Обновление openssl. Создание закрытого ключа и запроса на подпись

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/[email protected]/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----- A Sb-S dGSI k3Dqv PAqCAMIACAQ SxALBgkq ddhgrtkiG9w0BBwGg& KLPmowggHXAh Ub7e gest5 u0M63v1Z2A/ kFghj5CSqGSIb3DQBAs+klMF8xCzA nbijNByhTMd54vSA (.......) E+cFE GjgrHJgrA+eRP6XraWw8 iiguUtfgrrcJgg4P6XVS4l39+l5aCEGGbauLP5W6 K99 orhIhgQrlX2+ KeDi+ xBG2 coigehIGFeQS/16 S36 ITcluHGY5 EA+& A5 ujbhgrYHS -----END CERTIFICATE-----

Скопируйте данный сертификат туда же (в ту же директорию), где лежит ваш частный (приватный) ключ, назовем этот каталог /etc/ssl/crt/. В нашей ситуации приватный ключ - это private.key. Публичным ключом будет выступать domain.crt.

Задайте корневой и промежуточный сертификат

Очень важный пункт. Чтобы заслужить доверие браузеров и различных мобильных устройств к вашему SSL-сертификату, вам нужно будет задать сертификаты корневых и промежуточных ЦС (центров сертификации). Такие сертификаты обычно лежат вместе с файлом Вашего главного сертификата. Для Apache их надо объединить в ca_bundle.

  1. Выполните копирование файла server.ca-bundle в каталог, в котором у вас находятся файлы сертификата и ключа (у нас это: /etc/ssl/crt/).
  2. Далее внесите новую строку в секцию SSL в файле httpd.conf. Если эта строка уже имеется, отредактируйте ее, чтобы она имела следующий вид: SSLCertificateChainFile /etc/ssl/crt/y_server.ca-bundle
  3. В том случае, если вы используете иное расположение и иные названия файлов, вам надо будет изменить путь и имена файлов. Раздел SSL в обновленном файле config теперь получит следующий вид:

DocumentRoot /var/web/html3

ServerName www.leader_domain.com

SSLCertificateFile /etc/ssl3/cert/leader_domain.crt

SSLCertificateKeyFile /etc/ssl3/cert/leader_private.key

SSLCertificateChainFile /etc/ssl3/cert/leader_server.ca-bundle ***

*** Для Apache 1.x используйте: SSLCACertificateFile /etc/ssl3/cert/leader_server.ca-bundle

  1. Сохраните файл 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 сертификат очень удобно и выгодно в компании ЛидерТелеком. Любые вопросы, связанные с выдачей сертификата, можно будет легко решить при помощи отзывчивой службы поддержки.

Речь пойдет о дистрибутиве Apache 2.2.x.
Другие дистрибутивы не проверял. Установку проводил на Windwos XP, но все это будет работать и на серверных осях.

4) Вдумчиво читаем во это:), если есть время:)

5) Заполняем поля как показано ниже (потом все это можно изменить в файле конфигурации httpd.conf)

6) Выбираем Custom (мы же умные:))

7) Выбираем каталог для установки. Путь может быть любой, но лучше избегать пробелов в названиях папок. Далее (в других статьях) все примеры будут относительно этого пути. Так что бдите:) ПУТЬ и да пребудет с вами Сила. Омммм.....

8) Жмем Next, затем Install и пошла установка... Пару раз всплывет консолька, это удаляются временные файлы и устанавливается Apache как сервис. В трее появится значок для управления сервисом Apache.

9) Проверяем установку. Просто вводим в строке браузера localhost. И видим страничку с надписью It works! как показано на рисунке ниже.

Если такого не увидели, то повторяем шаги от 1 до 9 пока не увидим. :)

10) Правим файлик httpd.conf, который в моем случае лежит в папочке Z:\WAMPServer\Apache\conf
Добавляем туда строчку Listen 443 под строкой Listen 80, как показано на рисунке ниже.

11) Рестартуем Apache. И вводим в строке броузера http://localhost:443/ и наблюдаем в браузере надпись It works! как показано на картинке ниже. И погодите радоваться:) Это еще не SSL, это просто проверка того, что Apache слушает на 443 потру.

Если не видим, то пробуем остановить Apache и запустить его снова (иногда рестарт не помогает). Если и это не помогло, то повторяем шаги с 1 по 11 пока не увидим:)

12) Далее копируем из папочки Z:\WAMPServer\Apache\bin два файлика ssleay32.dll и libeay32.dll в каталог %systemroot%\system32. Внимание!!! Это очень важный шаг! Не пропустите его!

13) Копируем файлик openssl.cnf из каталога Z:\WAMPServer\Apache\conf в каталог Z:\WAMPServer\Apache\bin

14) Создаем сертификат для нашего сервера. Для этого заходим в каталог Z:\WAMPServer\Apache\bin (консолью или FAR-ом) и там вводим команду:

openssl req -config openssl.cnf -new -out my-server.csr

И отвечаем на все вопросы. Как показано на картинке (пароль естественно не виден, вообще вы можете ввести здесь все что угодно или просто ставить точку в ответе, тогда это поле останется пустым, единственное исключение составляет вопрос Common Name, здесь надо ввести доменное имя для которого будет использоваться сертификат, например www.vasya.ru , в нашем случае localhost ):

После этого в каталоге Z:\WAMPServer\Apache\bin образуется файлик my-server.csr

openssl rsa -in privkey.pem -out my-server.key
openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 365
openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

15) Создаем каталог ssl в каталоге Z:\WAMPServer\Apache\conf и перемещаем туда файлики my-server.key и my-server.cert из каталога Z:\WAMPServer\Apache\bin

16) В файле httpd.conf находим и раскоментируем строчку
LoadModule ssl_module modules/mod_ssl.so

Приводим его к следующему виду:


SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLMutex default
SSLSessionCache none


SSLEngine On
SSLCertificateFile conf/ssl/my-server.cert
SSLCertificateKeyFile conf/ssl/my-server.key

В конечном итоге это должно выглядеть как на картинке ниже:

17) Останавливаем Apache если он был запущен и запускаем его из командной строки с ключом -D SSL. Для этого даем команду

Z:\WAMPServer\Apache\bin>httpd.exe -D SSL

Запускать лучше из командной строки с ключом отладки SSL, чтобы можно было увидеть ошибки.

18) В строке браузера вводим https://localhost/ (именно HTTPS ) и видим следующее (это при условии что у вас IE7):

Это означает что все работает. Просто нас предупреждают, что сертификат данного узла не был выпущен доверенным центром сертификации, и это правильно, так как сертификат выпустили мы сами:). Жмем Продолжить открытие этого веб-узла и видим следующую картинку:

Итак, все работает:)! Если у вас не заработало, то вдумчиво повторяем шаги с 1 по 18 пока не заработает:)


В наши дни очень часто для повышения безопасности сетевых соединений или просто для аутентификации используются ssl сертификаты. Одна из самых популярных свободных программ для создания сертификатов - это OpenSSL. Это утилита командной строки, которая позволяет создавать различные виды сертификатов, например, PKI или HTTPS.

В этой статье мы рассмотрим что такое сертификаты, какими они бывают, разберем подробно создание сертификата OpenSSL. Причем рассмотрим каждый этап, чтобы вам было легче понять что и как происходит.

Думаю нужно начать с самого начала. Сертификаты в первую очередь позволяют идентифицировать человека, подтвердить что вы тот, за кого себя выдаете. А работает это так - есть два ключа - закрытый и открытый. Зашифровать сообщение можно с помощью открытого ключа, но чтобы его расшифровать нужен только закрытый ключ. Если у вас нет закрытого ключа, то вы попросту не сможете расшифровать зашифрованное сообщение. Фактически зашифровать сообщение может каждый, но расшифровать его способен только владелец закрытого (секретного ключа).

Если вы смогли расшифровать отправленное сообщение, зашифрованное с помощью вашего открытого ключа, то значит - это вы. Ключи работают только в паре, и вы не сможете расшифровать ничего другим ключом. Но еще остался один момент. Как определить что этот открытый ключ именно ваш, например, принадлежит вашему домену? Все просто, достаточно, чтобы кто-то из авторитетных источников, например, Comodo или LetsEncrypt подписал ваш ключ. Это так называемые центры сертификации.

В этой инструкции мы будем иметь дело с такими видами ключей:

  • .pem, .crt, .cer - готовый, подписанный центром сертификации сертификат, расширения разные, но означают одно и то же. Если совсем просто, то сертификат, это подписанный открытый ключ, плюс немного информации о вашей компании;
  • .key - закрытый или открытый ключ;
  • .csr - запрос на подпись сертификата, в этом файле хранится ваш открытый ключ плюс информация, о компании и домене, которую вы указали.

А теперь рассмотрим как создать сертификат openssl, как его подписать и что для этого нужно сделать. Генерация ключей openssl - это довольно простая задача, если во всем разобраться.

Создание закрытого ключа и запроса на подпись

Вам необязательно подписывать сертификаты в центре сертификации CA, вы можете подписать их сами, но об этом потом. Весь процесс вам так и так придется пройти. Сначала рассмотрим как создать закрытый ключ с нуля, и указать необходимую информацию. Это CN, где должно быть указанно ваше доменное имя, для которого вы собираетесь использовать сертификат, также можно указать дополнительную информацию о вашей компании, адресе и организации, но это уже необязательно.

Чтобы создать закрытый ключ и запрос на подпись открытого ключа выполните такую команду:

openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr

Опция -newkey указывает, что нужно создать новую пару ключей, а в параметрах мы сообщаем тип rsa и сложность 2048 байт. Опция -nodes указывает, что шифровать ключ не нужно, опция -new указывает что нужно создать запрос csr. Если у вас уже есть закрытый ключ, то вы можете создать для него csr запрос такой командой:

openssl req -key domain.key -new -out domain.csr

Во время создания вам нужно будет указать всю необходимую информацию для csr, это в первую очередь домен и организация. Можно создавать закрытый ключ отдельно:

openssl genrsa -des3 -out domain.key 2048

Кроме того, можно создать csr запрос из уже существующего сертификата и закрытого ключа, тогда вам не придется вводить информацию, она будет получена из сертификата:

openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr

Параметр -x509toreq указывает, что нужно использовать сертификат для X509 для получения CSR. X509, это сертификаты, подписанные сами собой. Обычно сертификат подписывается другим сертификатом, а этот был подписан сам собой. Если вы получили сертификат от CA, то этот параметр не нужен.

Подпись сертификатов OpenSSL

Допустим, у вас есть приватный ключ и запрос на подпись, фактически, открытый ключ. Теперь вам нужно его подписать чтобы получить сертификат, который можно использовать. Тут есть несколько вариантов. Можно отправить csr файл на подпись какому-либо центру сертификации, например, LetsEncrypt. Можно подписать сертификат тем же ключом, с помощью которого он был создан, и третий вариант - создать свой центр сертификации.

Первый способ я рассматривать не буду. Здесь все просто. Либо используете утилиту сервиса, либо заполняете веб форму и получаете готовый сертификат. Второй вариант гораздо интереснее. Мы подпишем наш сертификат сами, ключом, на основе которого он был создан:

openssl x509 -signkey domain.key -in domain.csr -req -days 365 -out domain.crt

С помощью параметра -days мы указываем что сертификат будет действительным в течение 365 дней, то есть в течение года. Вы можете объединить все в одну команду и сразу создать закрытый ключ, csr и подписанный сертификат:

openssl req -newkey rsa:2048 -nodes -keyout domain.key
-x509 -days 365 -out domain.crt

Или создаем самоподписанный сертификат openssl из существующего закрытого ключа без csr:

openssl req -key domain.key -new -x509 -days 365 -out domain.crt

Опция -new говорит, что нужно запросить информацию о csr у пользователя. Чтобы браузер доверял ключу нужно этот же сертификат импортировать в список доверенных. А теперь рассмотрим третий способ выполнить создание сертификата OpenSSL - подписать его с помощью собственного CA, центра сертификации.

Вот вы сейчас думаете что это что-то такое сложное, да? А нет, это обычная папка, в которой лежит защищенный паролем закрытый ключ, с помощью которого мы будем подписывать все другие ключи. А открытая пара этого ключа должна быть добавлена во все браузеры, которые будут ему доверять.

Вообще, центр сертификации в крупных корпорациях находится на отдельных компьютерах, которые даже к сети не подключены. Но для примера мы разместим папку в нашей файловой системе /etc/:

openssl req -newkey rsa:4096 -x509 -extensions x509_ca -keyout /etc/ca/certs/ca.key -out /etc/ca/certs/ca.crt -days 3654

Параметр -extensions загружает необходимые расширения для создания сертификата центра сертификации. Мы устанавливаем долгий строк действия - десять лет. Осталось подписать наш сертификат, созданный ранее:

openssl ca -extensions x509_client -in ~/domain.csr -out ~/domain.crt

Готово, теперь наш сертификат подписан. Но теперь, чтобы браузеры ему доверяли нужно добавить сертификат CA в список доверенных браузера.

Просмотр сертификатов

Сертификаты сохраняются в формате pem, а это значит, что вы не сможете их открыть как текстовый файл и нужно использовать специальные команды для просмотра информации о них. Сначала смотрим содержимое csr:

openssl req -text -noout -verify -in domain.csr

Смотрим содержимое сертификата в режиме обычного текста:

openssl x509 -text -noout -in domain.crt

Проверяем действительно ли сертификат подписан нужным CA:

openssl verify -verbose -CAfile ca.crt domain.crt

Просмотр закрытого ключа:

openssl rsa -check -in domain.key

Чтобы проверить связаны ли между собой закрытый ключ, сертификат и открытый ключ можно подсчитать сумы md5 для этих ключей, если значения совпадут, то есть вероятность что это ключи из одной пары:

openssl rsa -noout -modulus -in domain.key | openssl md5
$ openssl x509 -noout -modulus -in domain.crt | openssl md5
$ openssl req -noout -modulus -in domain.csr | openssl md5



Просмотров