Я пытаюсь настроить сервер WildFly, работающий в Docker, на использование SSL:
keytool -genkey -alias axcelpk -keyalg RSA -keystore server.keystore -keysize 2048 -validity 1825
keytool -certreq -alias axcelPK -keystore server.keystore -file axcel.csr
p7b
к cer
: openssl pkcs7 -print_certs -inform der -in axcel-B64-chain.p7b -out axcel-B64-chain.cer
keytool -import -alias axcelCert -trustcacerts -file axcel-B64-chain.cer -keystore server.keystore
Конфигурация WildFly в standalone.xml уже была сделана, поэтому я не трогал ее (проверял и вроде нормально).
При запросе страницы с сервера я получаю Certificate error
. При проверке сертификата я заметил, что получаю отпечаток закрытого ключа SHA256 вместо отпечатка фактического сертификата. Кроме того, эмитент неверен, и путь сертификации в основном пуст.
Любые идеи?
TL; DR: это не закрытый ключ, это самозаверяющий сертификат
Хотя вы этого не говорите (или не показываете), я думаю, вы это сделали keytool -list
в вашем хранилище ключей и увидел две записи, одну privateKeyEntry и одну trustCertEntry, каждая с отпечатком пальца. Отпечаток на privateKeyEntry НЕ ЯВЛЯЕТСЯ отпечатком закрытого ключа; это отпечаток (первого) свидетельство хранится в privateKeyEntry. В вашем случае это фиктивный самозаверяющий сертификат, который был сгенерирован как часть -genkey
операции, поскольку впоследствии вы не заменили его должным образом. Например, самоподписанный сертификат всегда имеет Issuer, равный Subject (и не установлен на настоящий CA, как это делает настоящий сертификат CA).
Сервер Java SSL / TLS использует сертификат (ы) в privateKeyEntry, и / любой клиент, который получает этот сертификат, должен (1) не доверять ему и отображать ошибку или предупреждение, указывающее, что он не является доверенным, и (2) показывать это как собственный путь сертификации без родителя (ов) (т.е. одиночный, а не пустой). Сервер SSL / TLS не может отправить закрытый ключ; протокол не позволяет этого, потому что это было бы совершенно небезопасно и глупо.
На четвертом шаге используйте keytool -import
в цепочке сертификатов CA с тем же псевдонимом что вы использовали для -genkey
операция, здесь axcelpk
, а не другой псевдоним. Обратите внимание, что на самом деле вам не нужен третий шаг; при импорте ответа ЦС (т.е. вашего своя цепочка сертификатов) к записи частного ключа, keytool
(и вообще CertificateFactory
) может читать p7b напрямую в PEM или DER. Хотя, если вы хотите иметь либо последовательность сертификатов PEM, которая поддерживается OpenSSL, либо последовательность сертификатов DER, которая не поддерживается, они также работают.