- Openssl, проверка SSL-сертификатов через терминал
- 1. Генерация CSR и ключа
- 2. Создание нового CSR для уже имеющегося ключа.
- 3. Проверка корректности CSR
- 4. Проверка корректности ключа
- 5. Проверка данных SSL-сертификата
- 6. Декодирование CSR
- 7. Декодирование SSL-сертификата
- 8. Сравнение соответствия SSL-сертификата и ключа
- 9. Сравнение соответствия SSL-сертификата и CSR
- 10. Проверка правильности порядка установки CA сертификатов.
Openssl, проверка SSL-сертификатов через терминал
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT. Также имеется возможность шифрования данных и тестирования SSL/TLS соединений.
Рассмотрим на примерах следующие случаи:
1. Генерация CSR и ключа.
2. Создание нового CSR для уже имеющегося ключа.
3. Проверка корректности CSR.
4. Проверка корректности ключа.
5. Проверка данных SSL-сертификата.
6. Декодирование CSR.
7. Декодирование SSL-сертификата.
8. Сравнение соответствия SSL-сертификата и CSR.
9. Сравнение соответствия SSL-сертификата и ключа.
10. Проверка правильности порядка установки CA сертификатов.
Первое что нужно сделать — это зайти по SSH на сервер и установить OpenSSL.
1. Генерация CSR и ключа
Перейдем в директорию, в которой будут хранится файлы CSR и ключа:
Далее выполняем команду генерации CSR и ключа:
openssl req -out server.csr -new -newkey rsa:2048 -nodes -keyout server.key
server.key – имя файла ключа;
имена можно менять по своему усмотрению.
После ввода команды, так же как и через онлайн генератор CSR нужно ввести данные в поля:
Проверяем создались ли файлы:
Файлы создались, все в порядке. Можно заказывать SSL-сертификат.
Подробно о заказе и установке SSL-сертификата можно ознакомиться в статье “Заказ и установка SSL сертификата на хостинг Ukrnames”
Мы получили файлы сертификата (ukrnames_idua_org, ca_1, ca_2, ca_3) и переместим их так же в папку /etc/ssl/certs/
Можем переходить теперь к следующим пунктам статьи.
2. Создание нового CSR для уже имеющегося ключа.
Случаются ситуации, когда требуется продлить SSL-сертификат. Нужно заново вводить CSR запрос, но т.к. выполнялся заказ SSL-сертификата около года назад, то CSR файла у нас в большинстве случаев уже нет.
Данная команда позволит заново сгенерировать CSR-запрос на основании имеющегося у нас ключа (в данном примере ключ у нас находится в папке /etc/ssl/certs/server.key):
openssl req -out /etc/ssl/certs/server.csr -key /etc/ssl/certs/server.key -new
И вновь нужно вводить данные CSR.
Потом можем копировать данные файла server.csr и продлевать SSL-сертификат, копировать ключ уже не нужно, он заново сгенерирован в старый файл ключа /etc/ssl/certs/server.key.
3. Проверка корректности CSR
Выполним команду для проверки корректности содержимого CSR:
openssl req -text -noout -verify -in /etc/ssl/certs/server.csr
Получаем вывод, в котором стоит обратить внимание на поле verify , если стоит статус “OK” , значит с CSR все в порядке.
4. Проверка корректности ключа
Выполним команду для проверки корректности содержимого ключа:
openssl rsa -in /etc/ssl/certs/server.key -check
Получаем вывод, в котором стоит обратить внимание на поле RSA key, если стоит статус “ok”, значит с ключом все в порядке.
5. Проверка данных SSL-сертификата
Переименуем для удобства файл сертификата ukrnames_idua_org в server.crt с помощью команды:
mv /etc/ssl/certs/ukrnames_idua_org /etc/ssl/certs/server.crt
Выполним команду для проверки данных SSL-сертификата:
openssl x509 -in /etc/ssl/certs/server.crt -text -noout
Получаем вывод, в котором можно ознакомится с подробностями SSL-сертификата (кто выдал, для какого домена выдан и т.д.).
6. Декодирование CSR
Иногда после генерации CSR хочется проверить правильность ввода данных. Для этого достаточно выполнить команду:
openssl req -in /etc/ssl/certs/server.csr -noout -text
Получим вывод, в котором стоит обратить внимание на поле “Subject:”, в нем указаны все вводимые нами данные.
7. Декодирование SSL-сертификата
Вывести данные SSL-сертификата можно командой:
openssl x509 -in certificate.crt -text -noout
Вывод будет эдентичен выводу в пункте 5.
8. Сравнение соответствия SSL-сертификата и ключа
Для того чтобы сравнить SSL-сертификат и ключ, нужно будет вывести хеши данных их файлов и сравнить.
openssl x509 -noout -modulus -in /etc/ssl/certs/server.crt | md5sum
openssl rsa -noout -modulus -in /etc/ssl/certs/server.key | md5sum
Получим вывод на экран хешей:
5bece1c3929b08096dcad3eb4613b300
5bece1c3929b08096dcad3eb4613b300
Невооруженным взглядом можно увидеть, что хеши совпадают, значит сертификат соответствует ключу.
9. Сравнение соответствия SSL-сертификата и CSR
Для данного примера заменим данные CSR файла /etc/ssl/certs/server.csr на другие:
openssl req -out /etc/ssl/certs/server.csr -key /etc/ssl/certs/server.key -new
Выполним команды для вывода хешей файлов /etc/ssl/certs/server.crt и /etc/ssl/certs/server.csr:
openssl x509 -noout -modulus -in /etc/ssl/certs/server.crt | md5sum
openssl req -noout -modulus -in /etc/ssl/certs/server.csr | md5sum
5bece1c3929b08096dcad3eb4613b300
6f4526732defc3985a3abd37f877eae5
Как видим, хеши отличаются – это означает, что сертификат не совпадает с CSR.
10. Проверка правильности порядка установки CA сертификатов.
На данном сервере, где выполнялись работы с openssl, установим веб-сервер, подключим домен ukrnames.idua.org и установим для него SSL-сертификат.
Т.к. веб-сервер не имеет доступа к папке /etc/ssl/certs/ , то копируем ключ, сертификат и промежуточные сертификаты в новосозданную папку /var/www/ssl/
В файле конфигурации веб-сервера подключаем файлы SSL-сертификата. Но чтобы все корректно работало, нужно создать файл для промежуточных сертификатов (к примеру ca.pem) и внести в него с определенной последовательностью данные файлов промежуточных сертификатов (ca_1, ca_2, ca_3).
Чтобы понять в какой последовательности нужно добавлять файлы, выполним ряд действий.
Получаем данные об издателе основного сертификата:
openssl x509 -in /var/www/ssl/server.crt -noout -text | grep Issuer:
Issuer: C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA
Теперь получим данные о промежуточных сертификатах ca_1, ca_2, ca_3 (нужно обращать внимание только на поля “Issuer:” и “Subject:”):
openssl x509 -in /var/www/ssl/ca_1 -noout -text | egrep "Subject:|Issuer:"
openssl x509 -in /var/www/ssl/ca_2 -noout -text | egrep "Subject:|Issuer:"
openssl x509 -in /var/www/ssl/ca_3 -noout -text | egrep "Subject:|Issuer:"
Сопоставив данные сертификата и промежуточных сертификатов, можно сделать вывод, что после основного сертификата первым промежуточным должен идти сертификат ca_3, т.к. в поле “Subject:” раздел CN файла ca_3 совпадает с полем “Issuer:” разделом CN (CN=COMODO RSA Domain Validation Secure Server CA).
Далее смотрим на поле “Issure:” раздел CN файла ca_3 (CN=COMODO RSA Certification Authority). Ищем в выводах файлов ca_2 и ca_1 совпадение в полях “Subject:” . Совпадение найдено в файле ca_2, данный файл мы будем подключать вторым.
И методом исключения, файл ca_1 будет подключаться самым последним.
Выполняем команды для объединения всех файлов промежуточных сертификатов(ca_1, ca_2, ca_3) в один (ca.pem):
cat /var/www/ssl/ca_3 > /var/www/ssl/ca.pem cat /var/www/ssl/ca_2 >> /var/www/ssl/ca.pem cat /var/www/ssl/ca_1 >> /var/www/ssl/ca.pem
Теперь можем увидеть полную цепочку установленных сертификатов с помощью команды:
openssl s_client -connect ukrnames.idua.org:443
Получим вывод на экран правильной цепочки подключения сертификатов: