Skip to main content

Command Palette

Search for a command to run...

Как создать цепочку сертификатов?

Published
2 min read

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

Одна из часто возникающих проблем - это установленная на сервер неполная цепочка сертификатов, что приводит к ошибке:

x509: certificate signed by unknown authority or server certificate verification failed

При этом браузер, при обращении к сайту по HTTPS протоколу, может не показывать ошибку, т.к. браузеры умеют автоматически дополнять цепочку сертификатов (из своего встроенного хранилища сертификатов или из хранилища операционной системы).

Делаем правильную цепочку сертификатов

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

Сначала давайте убедимся что у нас есть все необходимые файлы:

  • корневой сертификат (CA certificate, обычно файл называется ca.pem или cacerts.pem)
  • промежуточный сертификат (Intermediate certificate, его может не быть совсем или их может быть несколько)
  • сам сертификат домена

Далее в примерах мы будем использовать следующие имена файлов:

  • корневой сертификат: ca.pem
  • промежуточный сертификат: intermediate.pem
  • сертификат домена: cert.pem

Теперь, когда у нас есть все необходимое, перейдем в папку с файлами и объединим сертификат домена и промежуточный сертификат в один файл следующей командой (не забудьте заменить имена файлов из примера на соответствующие имена ваших файлов):

$ cat cert.pem intermediate.pem > chain.pem

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

$ openssl crl2pkcs7 -nocrl -certfile chain.pem | openssl pkcs7 -print_certs -noout

вывод будет примерно такой:

subject=/C=Countrycode/ST=State/O=Organization/CN=FQDN
issuer=/C=Countrycode/ST=State/O=Organization/CN=the name of the intermediate CA

subject=/C=Countrycode/ST=State/O=Organization/CN=the name of the intermediate CA
issuer=/C=Countrycode/ST=State/O=Organization/CN=the name of the CA

в поле CN мы должны увидеть:

  • subject: домен, на который выдан сертификат
  • issuer: имя промежуточного сертификата
  • subject: имя промежуточного сертификата, которое должно совпадать со значение в поле issuer предидущего сертификата
  • issuer: имя корневого сертификата

Если описанные выше условия выполняются, то цепочка сертификатов сделана правильно!

Промежуточных сертификатов может быть больше одного, в этом случае в файл должны быть добавлены все промежуточные сертификаты, по тому же принципу: поле subject каждого следующего сертификата должно соответствовать полю issuer предидущего сертификата. Получить поле issuer можно следующей командой:

openssl x509 -in cert.pem -noout -issuer

Статья написана на основе материалов из поста Get your certificate chain right

More from this blog

Справочник товарной номенклатуры внешнеэкономической деятельности (ТН ВЭД) в XML

Справочник товарной номенклатуры внешнеэкономической деятельности (ТН ВЭД) доступен через СМЭВ, но что, если к СМЭВ нет доступа? В этом случае получить справочник в приемлемом машиночитаемом виде оказалось проблемой, единственный официальный источник...

Apr 1, 20221 min read

Как сделать авторизацию по ключу на удаленном сервере для Git на Windows?

Устанавливаем Git, если не установлен и запускаем Git Bash Создаем ключssh-keygen -t rsa -b 4096 -C "your_email@example.com" # Enter file in which to save the key ({путь по умолчанию}): # можно ничего не вводить останется путь по умолчанию, жмем Ente...

Dec 30, 20211 min read
Как сделать авторизацию по ключу на удаленном сервере для Git на Windows?

pgood dev notes

5 posts