Назад | Перейти на главную страницу

'openssl verify' выводит 'невозможно получить сертификат местного эмитента'

В / etc / ssl, когда я делаю sudo openssl verify mywebsite.pem Я получаю сообщение о том

    mywebsite.pem: OU = GT46830179, OU = See www.rapidssl.com/resources/cps (c)15, OU = Domain Control Validated - RapidSSL(R), CN = *.logitapp.com
error 20 at 0 depth lookup:unable to get local issuer certificate

Я создал mywebsite.key, скопировав из генератора сертификатов sslpoint в nano. Я создал mywebsite.pem, запустив sudo cat mywebsite.crt sslpointintermediate.crt >> mywebsite.pem . Создал mywebsite.crt и sslpointintermediate.crt путем вставки в nano из электронного письма sslpoint отправил мне.

mywebsite.pem и mywebsite.key на самом деле не являются именами файлов.

Использование Debian 8. Попытка заставить nginx и gunicorn работать с ssl. Возникли проблемы с этим, и я думаю, что это (по крайней мере, частично), потому что сертификаты ssl каким-то образом установлены неправильно, как указано в приведенном выше выводе. Как я могу это решить?

РЕДАКТИРОВАТЬ:

В предыдущей версии этого вопроса я также спрашивал о проверке файла .key с помощью openssl. Я удалил эту часть вопроса, так как нет смысла пытаться это сделать.

Если вы хотите использовать openssl verify, вы должны вместо этого использовать:

openssl verify -CAfile your-intermediates-and-final.pem mywebsite.crt

с your -mediates-and-final.pem со всеми промежуточными и конечными (доверенными якорями), объединенными внутри, в формате PEM. Если вы хотите использовать -CApath /etc/ssl/certs вариант, каждый промежуточный сертификат должен находиться в каталоге / etc / ssl / certs, и вы должны выполнить как root:

$ c_rehash

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


Кажется, nginx настроен правильно. Убедитесь, что разрешения верны и у вас есть два следующих параметра конфигурации в вашем server {} или http {} раздел:

ssl_certificate /path/to/your/mywebsite.pem;
ssl_certificate_key /path/to/your/mywebsite.key;

и в вашем server {} раздел:

listen 443 ssl;

OpenSSL нужно запускать от имени пользователя root только тогда, когда ему нужно читать личные данные как закрытые ключи в /etc/ssl/private/. Для проверки сертификата рут не нужен. Сертификаты в /etc/ssl/certs должен быть доступен для чтения всем, чтобы каждый пользователь и программное обеспечение могли проверять сертификаты. Или вы вводите пароль root каждый раз, когда заходите на сайт?

$ openssl verify mywebsite.pem
mywebsite.pem: OU = GT46830179, OU = See www.rapidssl.com/resources/cps (c)15, OU = Domain Control Validated - RapidSSL(R), CN = *.logitapp.com
error 20 at 0 depth lookup:unable to get local issuer certificate

Глядя на страницу руководства verify (1ssl):

   2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate
       the issuer certificate of a looked up certificate could not be found. This normally means the list of trusted certificates is not complete.

Вам необходимо предоставить openssl некоторую информацию о том, где в цепочке требуются сертификаты:

openssl verify [-CApath directory] [-CAfile file] [-untrusted file] [certifictes]

Например:

openssl verify -CAfile RootCert.pem -untrusted Intermediate.pem UserCert.pem

Смотрите также этот вопрос на SO


$ openssl verify mywebsite.key I get a message saying
unable to load certificate
139893743232656:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

Сертификат не может быть загружен, поскольку вы указали закрытый ключ. Это противоположно сертификату, который содержит открытый ключ с дополнительной информацией о цепочке сертификатов, сроке действия и т. Д. В сообщении об ошибке четко указано, что ожидается: Expecting: TRUSTED CERTIFICATE


Вам нужно только «установить» корневой сертификат, если он еще не пользуется доверием в вашей ОС и вы хотите, чтобы ему доверяли. Но когда вы говорите о серверах, нет смысла включать сертификат вашего собственного домена в хранилище доверенных сертификатов. Ваше программное обеспечение (nginx) в этом случае должно иметь доступ к файлу сертификата, включая полную цепочку доверия, от конечного сертификата вашего домена до корневого сертификата вашего центра сертификации (необязательно).

См. Документацию к nginx, поищите другие вопросы такого рода (в Интернете, включая SE и SF) их полно, или дайте точное и подробное описание вашей проблемы.

ты должен кошка все сертификаты для окончательного CA_Chain.crt:

cat RootCA.crt IntermediateCert1 IntermediateCert2> CA_Chain.crt

openssl verify -CAfile CA_Chain.crt website.crt

(подпись website.crt от IntermediateCert2)

Похоже, что awscli использует локальный openssl вашей системы для проверки сертификатов. На моем Mac у меня openssl версии 0.9.8, и мне не удалось проверить свой сертификат. Вы можете проверить версию вашего openssl, написав команду

openssl version

Я переключился на систему, содержащую openssl версии 0.10, и проблема устранилась. Вы также можете обновить свою версию openssl.

Я попытался загрузить сертификат еще раз, и у меня это сработало.