Пришлось освоить новое, поэтому новый пост. Жаль, что для всего нового, что я узнаю, не получается написать пост, а то пришлось бы по несколько постов в неделю ваять. :-)

На этот раз я устанавливал сертификаты для сайтов. Сайты рабочие и все под NDA, поэтому пишу максимально обезличено, без упоминаний реальных имен, все совпадения случайны. :-)

Зачем нужен SSL сертификат

  • безопасное соединение между браузером и сервером, все передаваемые данные шифруются, используется протокол https
  • Google и другие поисковики сайты с поддержкой https выдают выше в результатах поиска
  • современные браузеры скоро будут неистово ругаться на сайты без https

Установка SSL-сертификата на сайт

  • Нужно сгенерировать ключ и запрос на выпуск сертификата CSR (Certificate Signing Request) openssl req -new -newkey rsa:2048 -nodes -keyout my_domain.key -out my_domain.csr
    • запустится мастер, в котором нужно будет ответить на вопросы (один из важных вопросов это код страны, который обязательно нужно указать по стандарту ISO 3166-1)
    • результатом работы будет два файла
      • my_domain.key, его не отдавайте никому, это секретный ключ
      • my_domain.csr, он нужен будет для генерации сертификата, по сути это публичный ключ, в нем содержится информация, которую вы вводили, ее можно просмотреть с помощью какого-нибудь CSR-Decoder, например этого
  • Дальше оформляется заявка на выпуск сертификата, содержимое файла my_domain.csr нужно будет отправить на сервер, который выдает сертификаты обычно за деньги (я пользовался этим), но есть и бесплатные варианты
  • после этого нужно провести валидацию сертификата, тут есть три варианта
    • самый простой, с помощью электронной почты в том домене, к которому вы делаете сертификат, она указывается во время выбора типа валидации
    • с помощью файла, загруженного на веб-сайт, он должен быть с определенным именем и содержанием и доступен по определенному пути, сам файл можно будет скачать на сервере, который выдает сертификаты, там же и путь узнаете, куда его положить
    • третий вариант, сделать определенную запись на DNS-сервере, подробности тоже сервис по выдаче сертификатов предоставит
  • после прохождения валидации, сертификат придет на почту, которую вы указали при генерации CSR, останется его установить
  • нужно из пришедших файлов сертификата (файлы my_domain.crt и my_domain.ca-bandle) сгенерировать цепочку сертификатов с помощью команды cat my_domain.crt my_domain.ca-bundle >> cert_chain.crt
  • получившийся файл cert_chain.crt (его лучше переименовать, особенно если у вас несколько сайтов на сервере) и файл с ключом my_domain.key нужно скопировать на сервер с сайтом, например в директорию /etc/nginx/cert/
  • в конфиге nginx для этого домена настроить постоянную переадресацию 301 с http на https прописать пути к ключу и сертификату, включить ssl, прописать порт 443, вот вам кусок конфига:
server {
  listen 80;
  server_name my_domain.com;
  return 301 https://my_domain.com$request_uri;
}

server {
  server_name my_domain.com www.my_domain.com.com;
  listen 443 ssl;

  ssl on;
  ssl_certificate	/etc/nginx/crt/my_domain.crt;
  ssl_certificate_key	/etc/nginx/crt/my_domain.key;
  ssl_protocols		TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers		HIGH:!aNULL:!MD5;

  other settings
}
  • нужно проверить, есть ли ошибки в конфиге sudo nginx -t, при ошибке в консоли появится соответствующее сообщение
  • останется перезапустить сервис nginx sudo service nginx restart или sudo nginx -s reload, если ошибок в конфиге не будет, то сервис успешно перезапустится и https заработает
  • с помощью сервиса https://www.sslshopper.com/ssl-checker.html проверьте, что на вашем сайте реально работает https

В целом ничего сложного, вопросы можно попробовать задать в мой Telegram @demshin.

P.S. Много полезного про SSL-сертификаты можно прочитать в прекрасной статье на Хабре.