Загрузить самоподписанный сертификат сервера

Загрузить самоподписанный сертификат сервера

Краткое содержание
Мне нужно загрузить самоподписанный сертификат с сервера, чтобы создать .JKS-файл для использования в качестве truststore в приложении. Как это сделать с сервера 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, вручную проигнорировать ошибку сертификата и загрузить сертификат, но я не могу подключиться к серверу со своего настольного компьютера из-за брандмауэров.

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

решение1

проверить ошибку:num=19:самозаверяющий сертификат в цепочке сертификатов

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

Это центр сертификации, просто ему не доверяют ;)

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


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

Сертификат CA обычно можно найти в сети. Например,здесьэто DigiCert,здесьVerisign и т. д. Проверьте сертификат, который вы загружаете. Проверка — это сложная часть, браузеры решают ее, используя собственный набор уже проверенных сертификатов.

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

решение2

Я бы рекомендовал создать свой собственный центр сертификации [ПРАВКА - не то, что хотелось. см. следующий абзац]. Это своего рода PITA, и когда вы исследуете, как это сделать, это кажется сложнее, чем есть на самом деле. Вы просто создаете фиктивную компанию, сертификат которой вы помещаете в свой Trusted Root клиентов, и она сможет подписывать сертификат(ы) вместо использования самоподписанных сертификатов.

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

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

Связанный контент