Скачать самозаверяющий серверный сертификат

2

Резюме
Мне нужно загрузить самозаверяющий сертификат с сервера, чтобы создать .JKS-файл для использования в качестве хранилища доверенных сертификатов в приложении. Как я могу сделать это с сервера Red Hat?

То, что я пробовал,
я пытался использовать openssl для получения сертификата:

echo -n | openssl s_client -connect hostname.example.com:20000 -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > downloadedcerts.cert

Это терпит неудачу со следующим сообщением:

verify error:num=19:self signed certificate in certificate chain

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

Было бы легко загрузить URL-адрес в Firefox, вручную игнорировать ошибку сертификата и загрузить сертификат, но я не могу подключиться к серверу с настольного компьютера из-за брандмауэров.

Любая помощь приветствуется :)

МВт.
источник

Ответы:

2

ошибка проверки: num = 19: самоподписанный сертификат в цепочке сертификатов

Действительно, корневой сертификат этого сервера самоподписан, а не от CA.

Это ЦС, его просто не доверяют;)

В отличие от браузеров (которые доверяют почти всем), OpenSSL ничего не доверяет (вы должны сказать ему, чему доверять).


Загрузите сертификат CA вашей страны (обычно он не отправляется в цепочке). Это не отправлено в цепи, потому что это точка доверия; Вы должны уже иметь это и доверять этому.

Обычно вы можете найти сертификат CA в Интернете. Например, вот DigiCert's, вот Verisign и т. Д. Проверьте загруженный сертификат. Проверка - сложная часть - браузеры решают ее, неся свои собственные пакеты с уже проверенными сертификатами.

Поместите сертификат CA вашей страны в свой собственный файл. Затем используйте openssl s_client -connect hostname.example.com:20000 -CAfile my-country-ca.pem. s_clientбудет в комплекте с Verify OK (0)или аналогичным.

jww
источник
0

Я бы порекомендовал создать свой собственный центр сертификации [РЕДАКТИРОВАТЬ - не то, что нужно. см. следующий абзац]. Это своего рода PITA, и когда вы исследуете, как это сделать, это кажется сложнее, чем на самом деле. Вы просто создаете фиктивную компанию, сертификат которой вы положите в свой доверенный корень клиентов, и она сможет подписывать сертификаты, а не использовать самозаверяющие сертификаты.

Я нашел объяснение в ответе Бруно на этот вопрос здесь: https://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains-two-ca- s

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

ZuberFowler
источник
Я не создаю сертификат сам. Он создан правительственным агентством (которое также запускает сервер, к которому я пытаюсь подключиться), поэтому мне действительно нужно работать с существующим сертификатом.
МВт.
Извините, что не получил этого, когда я «ответил» на вопрос. Я попробую еще раз с правкой.
ZuberFowler
«Я не думал о том, что корневой сертификат самоподписан» - все общедоступные корни CA являются самозаверяющими. Это означает, что и то Subjectи другое Issuer. Большинство (много?) Общедоступных ЦС помечены как CA=true,critical.
jww