Всех приветствую!
Руководством была поставлена задача создания своего Удостоверяющего Центра для 1С сервера.
Суть в том чтоб использовать openSSL сертификаты и ключи в 1С для подписывания согласований документов внутри предприятия.
Вот к чему я пришел, в контексте понимания работы с openSSL, но дальше с 1С я еще это всё не увязал. Ранее такого делать не приходилось, быть может есть у кого то опыт в этом?
Хотел делать далее производственную инструкцию для использования внутри отдела, но если всё получится, будет и для Альт руководство по внедрению такого функционала.
**********************
Требуется создать в рабочей директории несколько папок, рабочая директория не должна иметь полный доступ для всех пользователей системы.
mkdir {private,certs}**Данная команда создаст в корневой директории две папки private и certs.
Private — будет содержать закрытый ключ
Сerts — папка для хранения подписанных закрытым ключом сертификатов
chmod 700 ./private/**Данная команда назначает доступ к папке ключа только для администратора
openssl genpkey -algorithm RSA -out ./private/1c_priv.key -aes256
**Команда генерации закрытого ключа
**genpkey — ключ указывающий программе сгенерировать закрытый ключ
**-algorithm RSA — ключ указывающий программе использовать алгоритм шифрования RSA
** out ./private/1c_priv.key — ключ указывающий на путь и имя создаваемого файла закрытого ключа
**-aes256 — ключ указывающий необходимость дополнительного шифрования закрытого ключа методом RCA разрядностью 256 бит
Потребуется ввести пароль для работы с создаваемым ключем.
openssl req -x509 -new -nodes -key private/1c_priv.key -sha256 -days 3650 -out ./certs/1c_cert.crt -subj "/C=RU/ST=Moscow/L=Moscow/O=CompanyRUS/CN=CompanyRussiya"**req — подутилита для работы с запросами на сертификаты (CSR)
**-x509 — ключ говорит, что нужно создать самоподписанный сертификат (то есть сертификат, который подписан тем же закрытым ключом, что и сгенерирован)
**-new — ключ означает, что запрос новый, нужно создать его с нуля
**-nodes — отключает шифрование закрытого ключа (чтобы ключ сохранялся в открытом виде, без пароля в начале файла)
**-key — указывает путь к закрытому ключу (private/1c_priv.key)
**-sha256 — задаёт алгоритм хеширования (SHA-256) для подписи
**-days 3650 — срок действия сертификата в днях
**-out — путь, куда сохранить итоговый сертификат (./certs/1c_cert.crt).
**-subj — задаёт субъект сертификата в виде строки (в нашем случае — путь к организации и её названию в формате DN)
openssl x509 -in ./certs/1c_cert.crt -text -nooutКоманда проверки выпущенного подписанного сертификата
**x509 говорит об используемой версии стандарта X.509 (в нашем случае это v3)
**-in ./certs/1c_cert.crt : указывает файл с сертификатом, который нужно обработать
**-text : говорит OpenSSL вывести содержимое в текстовом формате, а не в бинарном
**-noout : предотвращает вывод самого закодированного бинарного сертификата — только текстовое представление тех частей, которые заданы другими опциями
В выводе будет содержаться:
• Version: Показывает версию стандарта X.509 (в нашем случае это v3).
• Serial Number: Уникальный серийный номер сертификата — помогает отслеживать его в системе.
• Signature Algorithm: Алгоритм подписи (например, RSA with SHA-256) и идентификатор используемого ключа (Key Identifier).
• Issuer: Кто выдал сертификат (организация, центр сертификации и т.п.).
• Validity: Даты начала и окончания действия сертификата (notBefore и notAfter).
• Subject: Кто является владельцем сертификата — здесь много деталей в формате «поле=значение» (CN — Common Name, O — Organization, email и др.).
• Subject Public Key: Параметр SubjectPublicKeyInfo — это открытый ключ сертификата (его можно использовать для шифрования), закодированный в определённом формате (например, Subject Public Key Info (RSA)).
• Extensions: Дополнительные поля (если есть), которые добавляют дополнительную информацию (например, Key Usage, Extended Key Usage).
• Authority Key Identifier: Если в цепочке есть промежуточные сертификаты, здесь может быть указан отпечаток (hash) публичного ключа центра сертификации, чтобы система могла проверить подпись внутри цепочки.
openssl genpkey -algorithm RSA -out ./private/docsign_1c.key -aes256
Команда для создания сертификата для подписи документов в 1С
openssl req -new -key ./private/docsign_1c.key -out docsign.csr -subj "/C=RU/ST=Moscow/L=Moscow/O=Company_Russiya/OU=IT/CN=Company_RUS"
Создание запроса на подпись (CSR )ранее выданным ключем, находящемся в ./private/docsign_1c.key
openssl x509 -req -in docsign.csr -CA ./certs/1c_cert.crt -CAkey ./private/1c_priv.key -CAcreateserial -out ./certs/docsign.crt -days 730 -sha256 -extfile <(printf "[alt_names]\nkeyUsage=digitalSignature, nonRepudiation\nextendedKeyUsage=codeSigning")
Команда подписи своим УЦ ключем
openssl x509 -in ./certs/docsign.crt -text -nooutКоманда проверки подписанного сертификата
cp ./certs/1c_cert.crt /etc/pki/ca-trust/source/anchors/1c_cert.crtКоманда копирования файла сертификата в папку хранения сертификатов системы
update-ca-trustКоманда обновления списка используемых системой сертификатов, для применения принятия сертификатов УЦ
openssl verify -CAfile ./certs/1c_cert.crt ./certs/docsign.crtКоманда проверки рабочего сертификата на соответствие с подписью ключем