Сертификат эмитента недействителен в самозаверяющем сертификате SSL - PullRequest
0 голосов
/ 13 марта 2019

Я создал сертификат SSl с помощью этих команд:

openssl genrsa -out kc_ca-key 2048
openssl req -new -out san_domain.csr -key kc_ca-key -config openssl.cnf
openssl x509 -req -days 3650 -in san_domain.csr -signkey kc_ca-key -out kc_ca-cert -extensions v3_req -extfile openssl.cnf

Файл openssl.cnf содержит общее имя, название страны, альтернативное имя субъекта и всю подобную информацию. В браузере я могу безопасно подключиться после импорта этого сертификата, но когда я запускаю команду curl с тем же сертификатом, я получаю следующую ошибку:

Ошибка NSS -8156 (SEC_ERROR_CA_CERT_INVALID) * Сертификат эмитента недействителен. * Закрытие соединения 0 curl: (60) Сертификат эмитента недействителен. Подробнее здесь: http://curl.haxx.se/docs/sslcerts.html

curl выполняет проверку SSL-сертификата по умолчанию, используя «комплект» открытых ключей центра сертификации (CA) (CA certs). Если по умолчанию файл комплекта не подходит, вы можете указать альтернативный файл используя опцию --cacert. Если этот HTTPS-сервер использует сертификат, подписанный ЦС, представленным в пакет, проверка сертификата, вероятно, не удалось из-за проблема с сертификатом (срок его действия истек, или имя может не соответствует доменному имени в URL).

Как устранить эту ошибку

1 Ответ

0 голосов
/ 13 марта 2019

Недостаточно информации для определения вашей проблемы.

Я делаю следующие предположения:

  1. Вы отправили запрос на сертификат (CSR) поставщику CA и получили сертификат обратно.
  2. Вы настраиваете какой-то веб-сервер с этим сертификатом
  3. Я также предполагаю, что вы использовали веб-браузер "Windows", такой как IE или Chrome, который использует хранилище сертификатов Windows для проверки сертификата.
  4. CA, подписавший ваш сертификат, является хорошо известным CA, у которого есть корневые сертификаты во всех общих списках CA.

Если вышеприведенное верно и веб-браузер, такой как Firefox (который использует свой внутренний список CA), дает сбой, это связано с тем, что веб-сервер использует сертификат без каких-либо промежуточных сертификатов.

Вам нужно найти промежуточные сертификаты для вашего сертификата, подписанного СА, объединить их в цепочку сертификатов и настроить веб-сервер с этой цепочкой сертификатов. Детали того, как это сделать, будут зависеть от вашего веб-сервера.

Как только веб-сервер настроен с правильной цепочкой сертификатов, ваша команда curl (и firefox) должна работать нормально.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...