Подтвердить что ты не робот

OpenSSL Проверить код возврата: 20 (не удалось получить сертификат локального эмитента)

Я запускаю Windows Vista и пытаюсь подключиться через https для загрузки файла в виде нескольких частей, но у меня возникают проблемы с сертификатом локального эмитента. Я просто пытаюсь понять, почему это не работает сейчас, и вернемся к моему коду cURL позже после этого. Im работает с командой:

openssl s_client -connect connect_to_site.com:443

Он дает мне цифровой сертификат от VeriSign, Inc., но также выдает ошибку:

Verify return code: 20 (unable to get local issuer certificate)

Что такое сертификат локального эмитента? Это сертификат с моего компьютера? Есть ли способ обойти это? Я попытался использовать файл -CAfile mozilla.pem, но все равно дает мне такую ​​же ошибку.

4b9b3361

Ответ 1

У меня была такая же проблема и она была решена путем передачи пути в каталог, где хранятся ключи CA. На Ubuntu это было:

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443

Ответ 2

У меня была такая же проблема на OSX OpenSSL 1.0.1i из Macports, а также пришлось указать CApath как обходной путь (и, как упоминалось в отчете об ошибке Ubuntu, даже недопустимый путь CA заставит opensl искать в каталоге по умолчанию).  Интересно, что подключение к тому же серверу с использованием функций PHP openssl (как используется в PHPMailer 5) отлично работало.

Ответ 3

Эта ошибка также возникает, если вы используете самозаверяющий сертификат с keyUsage без значения keyCertSign.

Ответ 4

Решение: Вы должны явно добавить параметр -CAfile your-ca-file.pem.

Примечание. Я попробовал также параметр -CApath, упомянутый в других ответах, но это не работает для меня.

Объяснение: Ошибка unable to get local issuer certificate означает, что openssl не знает ваш корневой сертификат CA.


Примечание. Если у вас веб-сервер с большим количеством доменов, не забудьте добавить также параметр -servername your.domain.net. Этот параметр будет "Установить имя сервера расширения TLS в ClientHello". Без этого параметра ответ всегда будет содержать сертификат SSL по умолчанию (не сертификат, соответствующий вашему домену).

Ответ 5

Установлен ли ваш сервер для проверки подлинности клиента? Если это так, вам нужно передать сертификат клиента при подключении к серверу.

Ответ 6

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

поэтому, пожалуйста, проверьте "значение предмета эмитента в сертификате (cert.pem) == субъект эмитента (CA.pem)"

openssl verify -CAfile CA.pem cert.pem
cert.pem: ОК

Ответ 7

С проверкой подлинности клиента:

openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443

Ответ 8

поместите свой CA и корневой сертификат в /usr/share/ca -certificate или/usr/local/share/ca-certificate. Тогда

dpkg-reconfigure ca-certificates

или даже переустановить пакет ca-сертификата с помощью apt-get.

После этого ваш сертификат будет собран в системную БД: /etc/ssl/certs/ca -certificates.crt

Тогда все должно быть хорошо.