Про установку SSL-сертификатов на веб-сервер написано достаточно много, и обычно этот вопрос не вызывает сложности у системных администраторов. Однако непосредственно перед установкой неплохо сделать несколько проверок, чтоб не созерцать в браузере досадное «The site's security certificate is not trusted!» (Сертификат безопасности сайта не является доверенным!). Особенно это актуально, когда сертификаты вы получаете не от регистратора, а от заказчика, который может, к примеру, перепутать приватные ключи или выслать сертификат в формате своего текстового редактора с добавлением мусора форматирования.

Таким образом, чтоб всё и сразу заработало, перед установкой 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)


  1. Ernillgeek
    01.08.2018 02:39
    -2

    А можно выкинуть эту статью на помойку, поставить acmetool или certbot, да в автоматическом режиме получить сертификат и обновлять его.


    1. o-pod Автор
      01.08.2018 04:56
      +1

      Для начала неплохо было бы ВНИМАТЕЛЬНО прочитать первый абзац, и особенно последнее предложение в нём.


      1. Ernillgeek
        01.08.2018 04:59
        -1

        Для начала неплохо было бы не выкладывать мусор на хабр.


  1. saipr
    01.08.2018 11:35

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

    Так прежде чем что-то делать посмотрите в текстовом редакторе что у вас на руках. Если это PEM-файл, то увидите по крайней мере -----BEGIN и т.д. Если видите белиберду, то может быть DER-кодировка.
    Ну уж если речь идет об openssl, то прежде чем все делать как описано, проверьте для начала asn1-структуру (openssl asn1parse ). Может дальше ничего и делать не надо!!!
    P.S. А md5 еще жив в openssl.