У меня есть сервер tomcat, для которого мне нужен подписанный сертификат. Я создал ключ, используя
keytool -genkey ....
а затем сгенерировал CSR и отправил его администратору моей компании.
Мне вернули CER-файл с подписанным сертификатом и цепочкой сертификатов.
Я установил корневой сертификат, промежуточный сертификат и подписанный сертификат в хранилище ключей с помощью keytool.
Но когда я использую сертификат на сервере и подключаюсь к браузеру, я получаю ошибку ERR_SSL_VERSION_OR_CIPHER_MISMATCH в Chrome.
Это то, что я получаю, когда использую openssl для отладки.
$ openssl s_client -connect localhost: 18443 -debug -tls1 -msg
СОЕДИНЕН (00000003) запись в 0x7fecbbc1b4d0 [0x7fecbc019000] (100 байт => 100 (0x64)) 0000-16 03 01 00 5f 01 00 00-5b 03 01 5b 1c 08 e9 8a ...._... [.. [.... 0010 - 69 73 dd 18 9f 58 98 08-b3 23 dd 76 89 3c b8 7b is ... X ... #. V. <. {0020 - 3e aa ea 61 d8 88 0f eb- af 52 45 00 00 2e 00 39> .. a ..... RE .... 9 0030-00 38 00 35 00 16 00 13-00 0a 00 33 00 32 00 2f .8.5 ...... .3.2. / 0040-00 9a 00 99 00 96 00 05-00 04 00 15 00 12 00 09 ................ 0050-00 14 00 11 00 08 00 06- 00 03 00 и далее 01 00 00 04 ................ 0060-00 23
. # 0064 -TLS 1.0 Handshake [длина 005f], ClientHello 01 00 00 5b 03 01 5b 1c 08 e9 8a 69 73 dd 18 9f 58 98 08 b3 23 dd 76 89 3c b8 7b 3e aa ea 61 d8 88 0f eb af 52 45 00 00 2e 00 39 00 38 00 35 00 16 00 13 00 0a 00 33 00 32 00 2f 00 9a 00 99 00 96 00 05 00 04 00 15 00 12 00 09 00 14 00 11 00 08 00 06 00 03 00 ff 01 00 00 04 00 23 00 00 чтение из 0x7fecbbc1b4d0 [0x7fecbc014600] (5 байтов => 5 (0x5)) 0000-15 03 01 00 02 ..... чтение из 0x7fecbbc1b4d0 [0x7fecbc014605] (2 байта => 2 (0x2)) 0000 - 02 28
. (<<< TLS 1.0 Alert [length 0002], fatal handshake_failure 02 28 24316: error: 14094410: SSL-подпрограммы: SSL3_READ_BYTES: sslv3 alert handshake failure: /BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/ OpenSSL098-64.50.7 / src / ssl / s3_pkt.c: 1145: номер предупреждения SSL 40 24316: ошибка: 1409E0E5: подпрограммы SSL: SSL3_WRITE_BYTES: сбой подтверждения ssl: /BuildRoot/Library/Caches/com.apple.xbs/Sources/ OpenSSL098 / OpenSSL098-64.50.7 / src / ssl / s3_pkt.c: 566:
Есть идеи, что я делаю неправильно?
Я пробовал все что угодно, от Google и stackoverflow.
Если ты бежишь keytool --list -keystore <yourkeystore>
тогда вы должны вернуть PrivateKeyEntry
, что-то вроде этого:
tomcat, Aug 23, 2018, PrivateKeyEntry,
Certificate fingerprint (SHA-256): F2:BA:29:E...
Если у тебя есть подписанный сертификат и закрытый ключ, то вам нужно экспортировать их в хранилище ключей PKCS12 и импортировать в хранилище ключей Java. Подписанный сертификат не работает без ключа в хранилище ключей.
#export to PKCS12, set password -> it has to be the same as the java keystore password in the next step
openssl pkcs12 -export -name tomcat -in cert.cer -inkey key.pem -out tomcat.p12
#import the pkcs12 keystore. make sure, both passwords are the same
keytool -importkeystore -destkeystore tomcat.keystore -srckeystore tomcat.p12 -srcstoretype pkcs12 -alias tomcat
Не уверен, подходит ли это для вашей проблемы, но, возможно, это приблизит вас к решению: если есть проблемы с сертификатом, например ERR_SSL_OBSOLETE_CIPHER, вы можете добавить это в коннектор SSL в server.xml
useCipherSuitesOrder="true"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,
TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
TLS_SRP_SHA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
TLS_SRP_SHA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"
Приведенный выше ответ помог мне диагностировать причину моего «несоответствия ssl или шифра» после того, как я переключился с запуска Tomcat внутри IntelliJ IDE и настроил его для автономной работы.
Я настроил хранилище ключей для URL, отличный от localhost (myinitials.company.com), но пытался получить к нему доступ через https: // localhost. Как только я побежал keytool --list -keystore <yourkeystore>
, он показал, что хранилище ключей было настроено для myinitials.company.com. Я изменил имя хоста на это имя и больше не получил ERR_SSL_VERSION_OR_CIPHER_MISMATCH.
Надеюсь, это поможет кому-то другому, кто найдет эту страницу.