Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Отличный скрипт.
Однако, на текущий момент, озадачен вопросом установки неведомого количества корневых сертификатов на компьютер.
Не могу придумать, как считать содержимое некоего каталога на http, ну или считать некий файл index.txt с http, потом построчно считать из него весь список имён файлов, лежащих тут же рядом, ну и затем уже каждый файл скачать и разместить в нужном каталоге на minion
Владимир, вы как профессионал, не подскажете ли механизм. Считать по пути http весь список файлов там расположенных или как считать один файл и распарсить его построчно?
Костюков Владимир,
{% for filename in <список файлов> %}
<команда установки одного сертификата>
{% endfor %}
эта конструкция работает, проблема в составлении списка файлов, про который я и спрашивал изначально:
Владимир, вы как профессионал, не подскажете ли механизм. Считать по пути http весь список файлов там расположенных или как считать один файл и распарсить его построчно?
вы в своём скрипте делаете почти тоже самое, только считываете список параметров и потом в цикле каждый сертификат обрабатываете.
Администрировать список параметров, выяснять есть ли там уже нужный сертификат или нет, лично мне неудобно, их ведь может быть не 2 и не 3. Поэтому родилась идея - вести некий файлик со списком имен сертификатов, что удобнее для сверки проверки и т.д., и этот файл передавать в политику, чтобы там из него считывались все строки, содержащие, например, полные пути ко всем сертификатам, и в цикле их установить
Костюков Владимир,
{% for filename in <список файлов> %}
<команда установки одного сертификата>
{% endfor %}
эта конструкция работает, проблема в составлении списка файлов, про который я и спрашивал изначально:
вы в своём скрипте делаете почти тоже самое, только считываете список параметров и потом в цикле каждый сертификат обрабатываете.
Администрировать список параметров, выяснять есть ли там уже нужный сертификат или нет, лично мне неудобно, их ведь может быть не 2 и не 3. Поэтому родилась идея - вести некий файлик со списком имен сертификатов, что удобнее для сверки проверки и т.д., и этот файл передавать в политику, чтобы там из него считывались все строки, содержащие, например, полные пути ко всем сертификатам, и в цикле их установить
Не претендую на эффективность и эффектность решения. Очень всё кривое и косое, но есть над чем поработать пытливому уму Обязательное условие - наличие установленного КриптоПро CSP - сертификаты ставлю через его утилиту /opt/cprocsp/bin/amd64/certmgr
Я его к сожалению до внедрения в массовом масштабе так и не довёл, но работает на ALD Pro 2.3.0 однозначно
Сделал как и хотел:
- создал на сервере репозиториев вручную папку (/opt/rbta/aldpro/repo/storage/link_root_folder/crt)
- в этой папке создал структура вида ca (для корневых сертификатов) inter (для промежуточных сертификатов)
- в каждом подкаталоге держу некий индексный файл (index.txt), в котором храню список файлов сертификатов
- рядом с index.txt держу файл index.hash с md5 суммой самого index.txt (нужна для гарантированного обновления этого файла через политики)
- если меняю что-то в соответствующем списке файлов сертификатов, обновляю index.txt и index.hash
для себя создал вот такую простую памятку
! ПРАВИЛА !
1. Имена сертификатов не должны содержать пробелов и русских букв
2. Расширение файлов cer
3. Сертификаты должны быть сохранены в формате base64
! Порядок действий !
1. Выкладываем сертификаты на rep01 в /opt/rbta/aldpro/repo/storage/link_root_folder/crt/
Корневые в ca
Промежуточные в inter
Списки отзыва в crl
2. Удаляем из подкаталогов index.txt и index.hash
3. Формируем index.txt
ls *.cer > index.txt
удаляем перенос строки в последней строке
4. Формируем index.hash
md5sum -b index.txt > index.hash
- создал задание автоматизации, которое обновляет index.txt файлы ... списки отзыва так и не дописал в него
YAML:
{% set global_path_crt = 'http://urr61-rep01.urr61.esk/repos/crt/' %}
{% do salt.log.info("global_path_crt: " + global_path_crt) %}
{% set index_crt_filename = 'index.txt' %}
{% do salt.log.info("index_crt_filename: " + index_crt_filename) %}
{% set index_hash_filename = 'index.hash' %}
{% do salt.log.info("index_hash_filename: " + index_hash_filename) %}
{% set global_path_ca_crt = global_path_crt + 'ca/' %}
{% do salt.log.info("global_path_ca_crt: " + global_path_ca_crt) %}
{% set global_index_ca_crt = global_path_ca_crt + index_crt_filename %}
{% do salt.log.info("global_index_ca_crt: " + global_index_ca_crt) %}
{% set global_index_ca_hash = global_path_ca_crt + index_hash_filename %}
{% do salt.log.info("global_index_ca_hash: " + global_index_ca_hash) %}
{% set local_path_ca_crt = '/usr/local/share/ca-certificates/' %}
{% do salt.log.info("local_path_ca_crt: " + local_path_ca_crt) %}
{% set local_index_ca_crt = local_path_ca_crt + index_crt_filename %}
{% do salt.log.info("local_index_ca_crt: " + local_index_ca_crt) %}
{{ local_index_ca_crt }}:
file.managed:
- source: {{ global_index_ca_crt }}
- mode: 644
- makedirs: true
- create: True
- replace: True
- source_hash: {{ global_index_ca_hash }}
{% set global_path_inter_crt = global_path_crt + 'inter/' %}
{% do salt.log.info("global_path_inter_crt: " + global_path_inter_crt) %}
{% set global_index_inter_crt = global_path_inter_crt + index_crt_filename %}
{% do salt.log.info("global_index_inter_crt: " + global_index_inter_crt) %}
{% set global_index_inter_hash = global_path_inter_crt + index_hash_filename %}
{% do salt.log.info("global_index_inter_hash: " + global_index_inter_hash) %}
{% set local_path_inter_crt = '/usr/local/share/inter-certificates/' %}
{% do salt.log.info("local_path_inter_crt: " + local_path_inter_crt) %}
{% set local_index_inter_crt = local_path_inter_crt + index_crt_filename %}
{% do salt.log.info("local_index_inter_crt: " + local_index_inter_crt) %}
{{ local_index_inter_crt }}:
file.managed:
- source: {{ global_index_inter_crt }}
- mode: 644
- makedirs: true
- create: True
- replace: True
- source_hash: {{ global_index_inter_hash }}
- создал задание автоматизации, которое обновляет сертификаты (запускать нужно после того, как были обновлены index.txt предыдущим заданием)
YAML:
{% set global_path_crt = 'http://urr61-rep01.urr61.esk/repos/crt/' %}
{% do salt.log.info("global_path_crt: " + global_path_crt) %}
{% set global_path_ca_crt = global_path_crt + 'ca/' %}
{% do salt.log.info("global_path_ca_crt: " + global_path_ca_crt) %}
{% set local_path_ca_crt = '/usr/local/share/ca-certificates/' %}
{% do salt.log.info("local_path_ca_crt: " + local_path_ca_crt) %}
{% set local_index_ca_crt = local_path_ca_crt + 'index.txt' %}
{% do salt.log.info("local_index_ca_crt: " + local_index_ca_crt) %}
{% set list_crt = salt['file.read'](local_index_ca_crt).split('\n') %}
{% for item_crt in list_crt %}
{% set global_path_item_ca_crt = global_path_ca_crt + item_crt|string %}
{% do salt.log.info("global_path_item_ca_crt: " + global_path_item_ca_crt) %}
{% set local_path_item_ca_crt = local_path_ca_crt + item_crt %}
{% do salt.log.info("local_path_item_ca_crt: " + local_path_item_ca_crt) %}
{{ local_path_item_ca_crt }}:
file.managed:
- source: {{ global_path_item_ca_crt }}
- mode: 644
- recurse: true
- makedirs: true
- create: true
- replace: true
- skip_verify: true
cmd.run:
- name: "/opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file {{ local_path_item_ca_crt }}"
{% endfor %}
{% set global_path_inter_crt = global_path_crt + 'inter/' %}
{% do salt.log.info("global_path_inter_crt: " + global_path_inter_crt) %}
{% set local_path_inter_crt = '/usr/local/share/inter-certificates/' %}
{% do salt.log.info("local_path_inter_crt: " + local_path_inter_crt) %}
{% set local_index_inter_crt = local_path_inter_crt + 'index.txt' %}
{% do salt.log.info("local_index_inter_crt: " + local_index_inter_crt) %}
{% set list_crt = salt['file.read'](local_index_inter_crt).split('\n') %}
{% for item_crt in list_crt %}
{% set global_path_item_inter_crt = global_path_inter_crt + item_crt|string %}
{% do salt.log.info("global_path_item_inter_crt: " + global_path_item_inter_crt) %}
{% set local_path_item_inter_crt = local_path_inter_crt + item_crt %}
{% do salt.log.info("local_path_item_inter_crt: " + local_path_item_inter_crt) %}
{{ local_path_item_inter_crt }}:
file.managed:
- source: {{ global_path_item_inter_crt }}
- mode: 644
- recurse: true
- makedirs: true
- create: true
- replace: true
- skip_verify: true
cmd.run:
- name: "/opt/cprocsp/bin/amd64/certmgr -install -store mCA -file {{ local_path_item_inter_crt }}"
{% endfor %}
Вот такое вот чудо чудное получилось
PS: это был мой самый первый опыт создания политик и сейчас конечно оба задания я бы объединил в одно с условием, что если было обновление index.txt, то выполнить и обновление сертификатов. Но выкладываю как есть