Все про OpenSSL за 5 минут
OpenSSL – это криптографическая библиотека, которая является open source реализацией двух протоколов: Secure Sockets Layer (SSL) и Transport Layer Security (TLS). Данная библиотека имеет инструменты, предназначенные для генерации приватных ключей RSA и Certificate Signing Requests (CSR-запросов), управления сертификатами и выполнения кодирования/декодирования. Библиотека OpenSSL написана на C, однако существуют оболочки для широкого спектра языков программирования.
На апрель 2014 года 66% всех веб-серверов использовали OpenSSL. Инструментарий OpenSSL выпущен под лицензией Apache.
Генерация CSR запроса через OpenSSL
Генерация CSR-запроса должна проходить в строгом соответствии со следующими правилами. Во-первых, вся информация должна быть приведена на английском языке. Во-вторых, следует избегать использования следующих символов: < > ~ ! @ # $ % ^ * / \ ( ) ?.,&.
Поля для заполнения будут следующими:
- Country Name – ISO-кодстраны
- State or Province Name – область, где была проведена официальная регистрация компании
- Locality Name – город, где была проведена официальная регистрация компании
- Organization Name – полное название организации (без сокращений)
- Organizational Unit Name – название отдела организации
- Common Name – полное доменное имя сервера
Сгенерировать CSR-запрос в OpenSSL можно при помощи специальной команды:
openssl req -key -new cert.key -out cert.csrИмя домена, на который совершается запрос, указывается в Common Name. Поля «A challenge password» и «An optional company name» заполнять не нужно (просто жмем enter).
Команда для создания ключа:
openssl req -batch -new -noout -newkey rsa:2048 -nodes -keyout cert.keyВ случае потери пароля или файла ключа надо будет заказывать повторное создание сертификата.
Одновременное создание ключа и запроса с данными:
openssl req -batch -new -newkey rsa:2048 -nodes -keyout cert.key -subj '/C=RU/ST=Ivanovo/L=Ivanovo/O=Guru Project/OU=Research team/emailAddress=root@primer.com/CN=primer.com' -out cert.csrУдалить пароль с ключа (требуется в том случае, когда сертификат устанавливается вручную в конфигурацию Apache; в противном случае он во время запуска будет просить вновь ввести пароль):
openssl rsa -in cert.key -out cert.keyпосле чего указываем пароль через консоль (либо -passin pass:tv0ip4ssw0rd, что не так безопасно, поскольку пароль помещается в .history)
Посмотреть информацию CSR:
openssl req -noout -text -in cert.csrПолучить данные сертификата (чтобы установить, кем он был выдан, к примеру):
openssl x509 -noout -text -in cert.crtВыполнить проверку соответствия ключа сертификату:
openssl x509 -noout -modulus -in cert.crt | openssl md5 openssl rsa -noout -modulus -in cert.key | openssl md5Два значения должны быть равнозначными.
Процесс установки SSL сертификата
Процесс установки сертификата осуществляется при помощи следующих шагов.
Скопируйте выданный вам сертификат в файл, расположенный на вашем сервере ApacheПосле выпуска SSL-сертификата, на почтовый адрес, который вы задали, поступит электронное письмо, которое будет содержать в себе ваш сертификат. Файл с сертификатом будет называться domain.crt. Открыв файл с SSL сертификатом в обычном текстовом редакторе, вы увидите следующее (примерно):
-----BEGIN CERTIFICATE----- ASb-SdGSIk3DqvPAqCAMIACAQSxALBgkqddhgrtkiG9w0BBwGg&KLPmowggHXAh Ub7egest5u0M63v1Z2A/kFghj5CSqGSIb3DQBAs+klMF8xCzAnbijNByhTMd54vSA (.......) E+cFEGjgrHJgrA+eRP6XraWw8iiguUtfgrrcJgg4P6XVS4l39+l5aCEGGbauLP5W6 K99orhIhgQrlX2+KeDi+xBG2coigehIGFeQS/16S36ITcluHGY5EA+&A5ujbhgrYHS -----END CERTIFICATE-----Скопируйте данный сертификат туда же (в ту же директорию), где лежит ваш частный (приватный) ключ, назовем этот каталог /etc/ssl/crt/. В нашей ситуации приватный ключ - это private.key. Публичным ключом будет выступать domain.crt.
Задайте корневой и промежуточный сертификатОчень важный пункт. Чтобы заслужить доверие браузеров и различных мобильных устройств к вашему SSL-сертификату, вам нужно будет задать сертификаты корневых и промежуточных ЦС (центров сертификации). Такие сертификаты обычно лежат вместе с файлом Вашего главного сертификата. Для Apache их надо объединить в ca_bundle.
Чтобы ссылка на данный файл была корректной, следует произвести следующее в необходимом разделе Virtual Host для вашего веб-сайта:
- Выполните копирование файла server.ca-bundle в каталог, в котором у вас находятся файлы сертификата и ключа (у нас это: /etc/ssl/crt/).
- Далее внесите новую строку в секцию SSL в файле httpd.conf. Если эта строка уже имеется, отредактируйте ее, чтобы она имела следующий вид: SSLCertificateChainFile /etc/ssl/crt/y_server.ca-bundle
- В том случае, если вы используете иное расположение и иные названия файлов, вам надо будет изменить путь и имена файлов. Раздел SSL в обновленном файле config теперь получит следующий вид:
<VirtualHost 293.169.10.25:443>
DocumentRoot /var/web/html3
ServerName www.leader_domain.com
SSLEngine on
SSLCertificateFile /etc/ssl3/cert/leader_domain.crt
SSLCertificateKeyFile /etc/ssl3/cert/leader_private.key
SSLCertificateChainFile /etc/ssl3/cert/leader_server.ca-bundle ***
</VirtualHost>
*** Для Apache 1.x используйте: SSLCACertificateFile /etc/ssl3/cert/leader_server.ca-bundle
- Сохраните файл config и проведите перезапуск Apache.
Другие полезные команды для работы с сертификатами в OpenSSL
Уточнить длину запроса:
echo '(' `openssl req -modulus -noout -in leader_cert.csr| cut -d'=' -f2 | wc -c` '-1)*4' | bcПроверить состояние выдачи HTTPS:
openssl s_client -connect localhost:443 -state -debug GET / HTTP/1.0Для почтового адреса:
openssl s_client -connect localhost:993 -showcertsНа ОС Windows (в IIS в частности) применяется PFX-контейнер для SSL-сертификата, его можно сделать из файлов ключа и самого сертификата командой:
openssl pkcs12 -inkey -export -in certificate.crt yourcertificate.key -out yourcertificate.pfxС помощью OpenSSL вы сможете легко провести любые операции, связанные с SSL сертификатами. Приобрести же SSL сертификат очень удобно и выгодно в компании ЛидерТелеком. Любые вопросы, связанные с выдачей сертификата, можно будет легко решить при помощи отзывчивой службы поддержки.