Про установку SSL-сертификатов на веб-сервер написано достаточно много, и обычно этот вопрос не вызывает сложности у системных администраторов. Однако непосредственно перед установкой неплохо сделать несколько проверок, чтоб не созерцать в браузере досадное «The site's security certificate is not trusted!» (Сертификат безопасности сайта не является доверенным!). Особенно это актуально, когда сертификаты вы получаете не от регистратора, а от заказчика, который может, к примеру, перепутать приватные ключи или выслать сертификат в формате своего текстового редактора с добавлением мусора форматирования.
Таким образом, чтоб всё и сразу заработало, перед установкой SSL-сертификата желательно сделать несколько проверок.
Итак, приступим…
1. Проверяем целостность сертификата:
Если на выходе получим его модуль, то целостность сертификата не нарушена. В противном случае будет ошибка: «unable to load certificate».
2. Аналогично проверяем целостность приватного ключа:
3. Смотрим сроки действия сертификата:
4. Проверяем сертификат на предмет отзыва.
5. Проверяем соответствие сертификата и приватного ключа:
Если результаты получились одинаковые, значит, сертификат и приватный ключ соответствуют друг другу.
Если нужно установить пару SSL-сертификатов в год, то вышеперечисленных команд вполне достаточно. Однако, когда приходится работать с сертификатами регулярно, то лучше всего воспользоваться уже готовыми скриптами. В качестве примера рискну предложить собственную разработку под bash. Скрипты сделают все эти действия без лишних телодвижений с вашей стороны (тестировалось в Ubuntu, но скорее всего будет работать и в других дистрибутивах Линукс).
Проверка сертификата и приватного ключа на целостность и соответствие друг другу:
Проверка сроков действия сертификата и на отсутствие его в списках отзыва:
Вышеописанные тесты закрывают те проблемы установки SSL-сертификатов, с которыми мне когда-либо приходилось сталкиваться на практике. Но если вы считаете, что стоит проверять ещё какие-либо параметры, делитесь в комментариях, буду благодарен.
Таким образом, чтоб всё и сразу заработало, перед установкой SSL-сертификата желательно сделать несколько проверок.
Итак, приступим…
1. Проверяем целостность сертификата:
openssl x509 -noout -modulus -in certificate.crt
Если на выходе получим его модуль, то целостность сертификата не нарушена. В противном случае будет ошибка: «unable to load certificate».
2. Аналогично проверяем целостность приватного ключа:
openssl rsa -noout -modulus -in privatekey.key
3. Смотрим сроки действия сертификата:
openssl x509 -noout -text -in certificate.crt | grep -e "Not Before" -e "Not After"
4. Проверяем сертификат на предмет отзыва.
5. Проверяем соответствие сертификата и приватного ключа:
openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privatekey.key | openssl md5
Если результаты получились одинаковые, значит, сертификат и приватный ключ соответствуют друг другу.
Автоматизация
Если нужно установить пару SSL-сертификатов в год, то вышеперечисленных команд вполне достаточно. Однако, когда приходится работать с сертификатами регулярно, то лучше всего воспользоваться уже готовыми скриптами. В качестве примера рискну предложить собственную разработку под bash. Скрипты сделают все эти действия без лишних телодвижений с вашей стороны (тестировалось в Ubuntu, но скорее всего будет работать и в других дистрибутивах Линукс).
wget https://raw.githubusercontent.com/o-pod/security/master/ssl-check-matching.sh
chmod a+x ssl-check-matching.sh
wget https://raw.githubusercontent.com/o-pod/security/master/ssl-check-revoc.sh
chmod a+x ssl-check-revoc.sh
Проверка сертификата и приватного ключа на целостность и соответствие друг другу:
./ssl-check-matching.sh certificate.crt privatekey.key -v
Проверка сроков действия сертификата и на отсутствие его в списках отзыва:
./ssl-check-revoc.sh -f certificate.crt -v
Вышеописанные тесты закрывают те проблемы установки SSL-сертификатов, с которыми мне когда-либо приходилось сталкиваться на практике. Но если вы считаете, что стоит проверять ещё какие-либо параметры, делитесь в комментариях, буду благодарен.
Комментарии (4)
saipr
01.08.2018 11:35Особенно это актуально, когда сертификаты вы получаете не от регистратора, а от заказчика, который может, к примеру, перепутать приватные ключи или выслать сертификат в формате своего текстового редактора с добавлением мусора форматирования.
Так прежде чем что-то делать посмотрите в текстовом редакторе что у вас на руках. Если это PEM-файл, то увидите по крайней мере -----BEGIN и т.д. Если видите белиберду, то может быть DER-кодировка.
Ну уж если речь идет об openssl, то прежде чем все делать как описано, проверьте для начала asn1-структуру (openssl asn1parse ). Может дальше ничего и делать не надо!!!
P.S. А md5 еще жив в openssl.
Ernillgeek
А можно выкинуть эту статью на помойку, поставить acmetool или certbot, да в автоматическом режиме получить сертификат и обновлять его.
o-pod Автор
Для начала неплохо было бы ВНИМАТЕЛЬНО прочитать первый абзац, и особенно последнее предложение в нём.
Ernillgeek
Для начала неплохо было бы не выкладывать мусор на хабр.