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 ответа2

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) или аналогичным.

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .