Невозможно `openssl проверять 'letsencrypt сертификат - PullRequest
0 голосов
/ 11 июня 2018

Я создаю сертификат с помощью Letsencrypt, используя контейнер Certbot:

$ mkdir /home/$USER/letsencrypt
$ docker run -it --rm -p 80:80 -p 443:443 -v /home/$USER/letsencrypt:/etc/letsencrypt certbot/certbot certonly --standalone --email user@example.com --agree-tos -d example.com

Я перехожу к созданному сертификату:

$ cd /home/$USER/letsencrypt/live/example.com

Я могу проверить chain.pem:

$ openssl verify chain.pem 
chain.pem: OK

И я вижу, что в chain.pem:

$ openssl x509 -noout -in chain.pem -subject -issuer
subject=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
issuer=O = Digital Signature Trust Co., CN = DST Root CA X3

Я не могу проверить cert.pem (предположительно, потому что ему нужна цепочка):

$ openssl verify cert.pem
CN = example.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error cert.pem: verification failed

Но я также не могу проверить fullchain.pem:

$ openssl verify fullchain.pem
CN = example.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error fullchain.pem: verification failed

Сертификат, похоже, работает в браузере, но не работает в curl (и клиенте HTTP http, что является реальной проблемой):

$ curl https://example.com
curl: (60) SSL certificate problem: unable to get local issuer certificate

Я дважды проверил, что fullchain.pem является объединением cert.pem и chain.pem.

Итак: я не понимаю, почему fullchain.pem нене проверить?

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Я понял это из man verify, читая описание untrusted.Оказывается, untrusted - это на самом деле то, как вы указываете цепочку доверия сертификатов (кажется нелогичным, когда вы так говорите).

Итак, команда, которую необходимо проверить для сертификата Letsencrypt:

openssl verify -untrusted chain.pem cert.pem

Где cert.pem - ваш сертификат, а chain.pem - промежуточный сертификат LE.Для этого нет необходимости использовать fullchain.pem.

0 голосов
/ 30 октября 2018

Я боролся с той же проблемой в течение 3 дней.Но ошибка была результатом ошибки конфигурации в моей конфигурации Apache.

Я обнаружил с помощью команды openssl s_client -connect advertentiekracht.nl:443 вернул:

Certificate chain
 0 s:/CN=advertentiekracht.nl
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3

включительно«Невозможно получить сертификат локального эмитента»

Команда: [root @ srv ssl] # openssl x509 -noout -in /etc/letsencrypt/live/advertentiekracht.nl/chain.pem -subject -issuer показала отсутствиеchain:

subject= /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3

Я, конечно, не знаком с openssl и сертификатами.Конечно, может быть много причин, приводящих к «Невозможно получить сертификат локального эмитента. Но прежде чем вы начнете копать, как я, проверьте вашу конфигурацию http-сервера . Для меня это Apache. У меня были опечатки вгде определяется фокус SSL-сертификата. httpd указывает на ошибочные строки ниже

        SSLCertificateFile /etc/letsencrypt/live/advertentiekracht.nl/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/advertentiekracht.nl/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

Помните, что первой строкой SSLCertificateFile должно быть SSLCertificateChainFile, и я пропустил ссылки на cert.pem и chain.pem.Строки ниже решили мою проблему:

        SSLCertificateChainFile /etc/letsencrypt/live/advertentiekracht.nl/fullchain.pem
    SSLCertificateFile /etc/letsencrypt/live/advertentiekracht.nl/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/advertentiekracht.nl/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/advertentiekracht.nl/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

Результат, полная цепочка:

    Certificate chain
 0 s:/CN=advertentiekracht.nl
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
0 голосов
/ 12 июня 2018

Неожиданно я наконец-то получил openssl verify, добавив корневой сертификат в цепочку.Такое ощущение, что Letsencrypt CA уже должен быть доступен, поэтому я не уверен, что это правильное решение (и приветствовал бы комментарии).

Шаги были:

  • Инструменты разработчика Chrome> вкладка «Безопасность»> «Просмотр сертификата»> вкладка «Сведения»> Выбор корневого сертификата («Встроенный маркер объекта: DST Root CA X3»)
  • Нажмите «Экспорт», экспортируйте как ASCII с кодировкой Base64, один сертификат (я назвал его)ca.pem)

Конкатенация корня с цепочкой:

$ ca.pem fullchain.pem > cachain.pem

Затем проверьте:

$ openssl verify cachain.pem
cachain.pem: OK

Это кажется "неправильным", поэтому я бынравится понимать, является ли это ложным срабатыванием.

...