Обновление цифрового сертификата безопасности для сервисов «1С»

Обновление цифрового сертификата  безопасности для сервисов «1С» Сертификаты

Что делать в этом случае?

Самое разумное решение — переход на актуальную конфигурацию начиная с версий  8.3.8 и выше. Если вы по каким-либо причинам не готовы переходить на современные версии, потребуется обновить файловое хранилище сертификатов платформы cacert.pem. Для выполнения такого обновления нужно быть администратором  системы “1С:Предприятие”, также вы можете обратиться к франчайзи 1С.

Если ваша программа проходила существенную кастомизацию или доработку, вам необходимо обратиться к специалистам для уточнения какие действия помогут решить проблему.

Пользователям последних версий платформы «1С:Предприятие» (8.3.8 и выше), не требуется выполнения каких-либо дополнительных действий при обновлении цифровых сертификатов безопасности. Это достигается за счет применения в последних версиях платформы нового, более удобного способа работы с сертификатами безопасности (используется хранилище сертификатов операционной системы, которое обновляется автоматически).

Ssl сертификаты

Старое – надо поправить

Весь PKI начинается с CA, следовательно, если у вас нет CA, то вы должны его создать:

Как создать CA:

Для простых лабораторных испытаний я предлагаю создать самоподписанный CA, используя openSSL.

openssl req -config openssl.cnf -x509 -new -days 365 -out cacert.pem -keyout privatecakey.pem

Не пытайтесь устанавливать (копировать) ваш ключ куда либо кроме privatecakey.pem, иначе у вас потом могут возникнуть проблемы с безопасностью. Данные, которые вы укажете как “Organization Name” и “Country Code” в дальнейшем будут использованы для всех сертификатов, которые будут созданы с этим CA.

Как сгенерить сертификат для веб-сервера (для Apache, Netscape или других): Для начала сгенерите Certificate Signing Request (CSR).

Пример использования Sun’овского keytool’а: Лучший инструмент для создания нового keystore (хранилища ключей), например, “ServerKeyStore”.

keytool -genkey -keystore ServerKeyStore -alias WebServer
Это создает новый приватный ключ для веб-сервера. В процессе создания keytool запросит у вас некоторую описательную информацию. Обязательно предоставьте те же название организации (Organization Name) и код страны (country code), как указано выше.

А теперь создайте CSR:

keytool -certReq -keystore ServerKeyStore -file webServerCSR.pem -alias WebServer
Вы получите webServerCSR.pem, который является запросом на ваш сертификат.

Про сертификаты:  "Моя Родня" - доставка сегодня, свои курьеры. интернет магазин товаров для дома и стройматериалов (Пенза)

Создайте подписанный сертификат для удовлетворения этого CSR используя ваш CA:

openssl ca -config openssl.cnf -in webServerCSR.pem -out webServerCert.pem
Теперь у вас есть подписанный сертификат для сервера: webServerCert.pem. Вернитесь к серверу и установите его. Веб-сервер должен также знать CA, поэтому вы должны установить также и cacert.pem (сертификат вашего CA) в keystore сервера.

Пример использования Sun’овского keytool’а: keytool принимает только x.509 сертификаты, поэтому вы должны отредактировать файл webServerCert.pem и удалить дополнитульную информацию.

Импортирование CA:

keytool -import -keystore ServerKeyStore -file cacert.pem -alias CA
Далее вы можете импортировать сертификат:

keytool -import -keystore ServerKeyStore -file webServerCert.pem -alias WebServer
Теперь ваш веб-сервер защищен и готов для SSL.

Как сгенерить клиентский сертификат:

Начнем с генерации CSR и приватного ключа, используя openssl (challenge password не вводить, иначе вылетает с ошибкой):

openssl req -config openssl.cnf -new -days 365 -out myUser1CSR.pem -keyout myUser1Key.pem
Теперь вы должны подписать CSR своим CA и тогда вы получите сертификат: Помните, что у вас уже есть приватный ключ с предыдущего шага.

openssl ca -config openssl.cnf -in myUser1CSR.pem -out myUser1Cert.pem
Теперь у вас есть все что необходимо. Однако, большинство инструментов, браузеров и прочее предпочитают импортировать pkcs12-файлы в отличии от .pem и .der -файлов.

Как создать PKCS12:

Ваш первый шаг заключается в связывании cacert, usercert и userkey вместе.

cat cacert.pem myUser1Cert myUser1Key.pem > myUser1CertPKCS12.pem
(cacert.pem добавлять не обязательно)

Теперь myUser1CertPKCS12.pem содержит все: CA, ключ и сертификат. Ваш следующий и последний шаг заключается в преобразовании myUser1CertPKCS12.pem в pkcs12-формат…

openssl pkcs12 -export -in myUser1CertPKCS12.pem -out myUser1Cert.p12 -name “User1 Client Certificate”
Браузер выдаст вам это имя в списке выбора сертификатов (у меня при использовании параметра name openssl вообще вылетала).

Как использовать Sun’овский keytool:

1. KeyStore

Сначала сгенерите ваш keystore, который будет использоваться сервером для аутентификации:

keytool -genkey -keystore C:mystoresIonaStageiPAS -keyalg RSA
Это будет вашим серверным сертификатом, который будет показан браузеру при запросе к серверу. Сертификат может быть установлен, когда сервер запускается следующей командой:

Про сертификаты:  Получите сертификат на бетон, сертификация бетона в Москве

java -Djavax.net.ssl.keyStore=C:mystoresIonaStageiPAS -Djavax.net.ssl.keyStorePassword=keypassword
Последующие сертификаты могут быть устновлены при помощи команды:

keytool -genkey -keystore C:mystoresIonaStageiPAS -keyalg RSA -alias Certificate2

2. TrustStore

Для того, чтобы позволить вашему серверу аутентифицировать клиентов вам также необходимо доверительное хранилище (TrustStore), где будут храниться все доверенные сертификаты или CA. Создать ваш TrustStore, путем импортирования сертификата CA, можно следующим образом:

keytool -import -trustcacerts -file cacert.pem -keystore C:mystoresIonaStageTrustStore
Добавте следующую строку к строке запуска вашего сервера:

-Djavax.net.ssl.keyStore= C:mystoresIonaStageTrustStore -Djavax.net.ssl.keyStorePassword=trustpassword
Следующие сертификаты могут быть созданы или добавлены следующей командой:

keytool -import -trustedcacerts -file anotherca.pem -alias anotherca -keystore C:mystoresIonaStageTrustStore
Генерация Certificate Signing Request (CSR) используя Sun’овский keytool

keytool -certreq -keystore C:mystoresIonaStageiPAS -alias Server2 -file myServer2CertCSR.pem
Теперь у вас есть ключ и неподписанный сертификат в папке с keytool’ом (например, C:jdk1.3bin). Перенесите CSR в папку с openSSL и подпишите его CA:

openssl ca -config openssl.cnf -in myServer2CertCSR.pem -out myServer2Cert.pem
Вы получите подписанный сертификат (подписанный вашим CA) – myServer2Cert.pem

Импортируйте подписанный сертификат в keystore. Для повторного импорта подписанного сертификата, вы должны изменить файл myServer2Cert.pem, иначе у вас возникнут проблемы при импорте. Скопируйте только тело сертификата (включая строки с тегами BEGIN и END) в файл myServer2CertModified.pem. Сертификат должен выглядеть примерно так:

—–BEGIN CERTIFICATE—–
MIIDyjCCAzOgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBpTELMAkGA1UEBhMCSUUx
FjAUBgNVBAgTDUNvdW50eSBEdWJsaW4xDzANBgNVBAcTBkR1YmxpbjEeMBwGA1UE
ChMVSU9OQSBUZWNobm9sb2dpZXMgcGxjMRIwEAYDVQQLEwlpUEFTIFRlYW0xFDAS
BgNVBAMTC0Jlbm5vIFZvZ2VsMSMwIQYJKoZIhvcNAQkBFhRiZW5uby52b2dlbEBp
b25hLmNvbTAeFw0wMTA3MjQxNjIyMzFaFw0wMjA3MjQxNjIyMzFaMIGlMQswCQYD
VQQGEwJJRTEWMBQGA1UECBMNQ291bnR5IER1YmxpbjEPMA0GA1UEBxMGRHVibGlu
MR4wHAYDVQQKExVJT05BIFRlY2hub2xvZ2llcyBwbGMxEjAQBgNVBAsTCWlQQVMg
VGVhbTEUMBIGA1UEAxMLQmVubm8gVm9nZWwxIzAhBgkqhkiG9w0BCQEWFGJlbm5v
LnZvZ2VsQGlvbmEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyxQrW
loVDzVpHolwJ41/Nagqo ePeyp30FvH9/nUi a/wLTTZN0JVHpoYKngp/hujCNQo
sG8mauq4z2mdGEO6HBL7JouSZ2Nb53Td8X/FIG8hOs15jKke21vrsbdhvRK/lKEv
YpE8NzIPenSTgpSr3Vu0MnUzOCgN rMGV9LaKQIDAQABo4IBBjCCAQIwHQYDVR0O
BBYEFO9pXLUGAmj/8PKoEb8utUEqkOY MIHSBgNVHSMEgcowgceAFO9pXLUGAmj/
8PKoEb8utUEqkOY oYGrpIGoMIGlMQswCQYDVQQGEwJJRTEWMBQGA1UECBMNQ291
bnR5IER1YmxpbjEPMA0GA1UEBxMGRHVibGluMR4wHAYDVQQKExVJT05BIFRlY2hu
b2xvZ2llcyBwbGMxEjAQBgNVBAsTCWlQQVMgVGVhbTEUMBIGA1UEAxMLQmVubm8g
Vm9nZWwxIzAhBgkqhkiG9w0BCQEWFGJlbm5vLnZvZ2VsQGlvbmEuY29tggEAMAwG
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAGFydQNe05Lo7OJciWrUzci4J
G2Nh3XrgGk1jWCjbNAyDiUUB6oYkXC7Oa TVa2Nuq1L4fXli8Rn/FOPN2/d6zBrq
grwxgxzE5q1IkI9uwjZbjKDOrpylJQXQ2L2a3TsOQ45o9YsMzFKiSAVlQ44uP8zU
okRKv5X340M5urRIXLs=
—–END CERTIFICATE—–

Импортируйте файл следующей командой:

keytool -import -alias Server2 -file myServer2CertModified.pem -keystore C:mystoresIonaStageiPAS
Вы получите сообщение наподобие этого “Certificate reply was installed in keystore”.

ЗЫ вообще удалю эту страницу после того как разберу остальное

The ruby way! (fun)

This assumes your have already installed the Rails Installer for Windows.

Обновление cacert.pem

Обновление необходимо только в том случае, если используются режим совместимости с версией 8.3.7 и ниже или версия платформы 8.3.7 и ниже. Обновление заключается в добавлении сертификата издателя DigiCert в файл cacert.pem. Файл cacert.pem находится в директории bin установленной платформы.

Про сертификаты:  Покупайте онлайн

Создание

В статье я буду рассматривать простую схему взаимодействия клиент-сервер, без удостоверяющего центра. Для взаимной проверки подлинности нам понадобится корневой самоподписанный сертификат caCert и два конечных clientCert и serverCert.

Хранение

Теперь, когда у нас есть все сертификаты, необходимо их сохранить. В руководстве openssl обычно предлагается хранить сертификаты в формате pem, разбив их на открытую часть public.crt и private.key. Полученные на предыдущих этапах сертификаты являются экземплярами класса X509Certificate2, который имеет все необходимые для нас свойства и методы.

StringBuilder builder = new StringBuilder();
builder.AppendLine("-----BEGIN CERTIFICATE-----");
builder.AppendLine(Convert.ToBase64String(clientCert.RawData, Base64FormattingOptions.InsertLineBreaks));
builder.AppendLine("-----END CERTIFICATE-----");
File.WriteAllText("public.crt", builder.ToString());

Также сохраним закрытый ключ:

string name = clientKey.SignatureAlgorithm.ToUpper();
StringBuilder builder = new StringBuilder();
builder.AppendLine($"-----BEGIN {name} PRIVATE KEY-----");
builder.AppendLine(Convert.ToBase64String(clientKey.ExportRSAPrivateKey(), Base64FormattingOptions.InsertLineBreaks));
builder.AppendLine($"-----END {name} PRIVATE KEY-----");
File.WriteAllText("private.key", builder.ToString());

Отмечу, что метод ExportRSAPrivateKey появился только в netcore 3.0, поэтому в предыдущих версиях могут возникнуть проблемы.

Еще один способ хранения сертификатов — формат pkcs12 или pfx, позволяющий уместить в одном файле открытую и закрытую часть. Класс X509Certificate2 содержит метод Export, принимающий в качестве аргумента необходимый нам ключ X509ContentType.

Pkcs12 или X509ContentType.Pfx. Однако на этом этапе возникают трудности, поскольку загруженный обратно из файла сертификат неожиданно не содержит приватного ключа, о чем свидетельствует флаг cert.HasPrivateKey == false.

Дело в том, что класс X509Certificate2 содержит внутреннюю метку, описывающую, куда и как экспортируется закрытый ключ. Эта метка инициализируется только с помощью конструктора и не может быть изменена после. Поэтому для создания файла p12 или pfx, необходимы дополнительные усилия:

var exportCert = new X509Certificate2(clientCert.Export(X509ContentType.Cert), (string)null, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet).CopyWithPrivateKey(clientKey);
File.WriteAllBytes("client.pfx", exportCert.Export(X509ContentType.Pfx));
File.WriteAllBytes("client.p12", exportCert.Export(X509ContentType.Pkcs12));

При желании можно использовать перегрузки метода Export с паролем.

Для работы с коллекциями сертификатов в .net core удобно использовать специализированное хранилище, реализуемого классом X509Store. Хранилище в простом случае инициализируется строковым именем:

X509Store store = new X509Store("test");
store.Open(OpenFlags.ReadWrite);
store.Add(cert);

В результате для OC Linux будет создана папка “~/.dotnet/corefx/cryptography/x509stores/ test/” и файл “827…E3E.pfx”, соответсвующий цифровому отпечатку (поле Thumbprint). Попытка что-то сделать с этим сертификатом с помощью openssl не увенчается успехом, так как он ожидаемо запаролен.

Оцените статью
Мой сертификат
Добавить комментарий