Попытка загрузить и настроить сертификат с удаленного SSL-адреса для соединения с WebSocket, но получило исключение «Подпись не совпадает» - PullRequest
1 голос
/ 23 марта 2020

Сначала я скачал сертификат с:

echo "" | openssl s_client -connect io.lightstream.bitflyer.com:443 -showcerts 2>/dev/null | openssl x509 -out bitflyer.cer

Затем я импортировал сертификат в связку ключей:

keytool -import -file bitflyer.cer -alias bitflyer -keystore bitflyer.jks -storepass "abc123" -keypass "abc123"

Поэтому я пытаюсь подключиться к io.lightstream.bitflyer.com:443. Ниже моего полного рукопожатия:

Sending HTTP handshake! req=GET / HTTP/1.1
Host: io.lightstream.bitflyer.com
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Sec-WebSocket-Key: 0enPg4mnHvLcT6s7+4mEGA==
Origin: http://www.websocket.org
Sec-WebSocket-Version: 13

Но затем я получаю:

Caused by: sun.security.validator.ValidatorException: Certificate signature validation failed
    at sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:215)
    at sun.security.validator.Validator.validate(Validator.java:262)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:330)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:289)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:144)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1626)
    ... 16 more
Caused by: java.security.SignatureException: Signature does not match.
    at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:449)
    at sun.security.x509.X509CertImpl.verify(X509CertImpl.java:392)
    at sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:213)
    ... 21 more

Есть идеи, что я делаю неправильно или как это отладить? Спасибо!

1 Ответ

0 голосов
/ 23 марта 2020
openssl s_client -connect io.lightstream.bitflyer.com:443

Полученные сертификаты зависят от версии OpenSSL. До версии 1.0.2 расширение server_name (SNI) не использовалось автоматически (т. Е. Вам приходилось явно использовать -servername), и без полученного сертификата это самозаверяющий сертификат для «поддельного сертификата контроллера входа Kubernetes». С SNI, хотя сертификат является правильным сертификатом для «io.lightstream.bitflyer.com».

Я предполагаю, что вы на самом деле добавили в сертификат «поддельный сертификат Kubernetes Ingress Controller», когда Java использует SNI и, таким образом, вместо этого получить сертификат для "io.lightstream.bitflyer.com". Или это может быть наоборот, в зависимости от вашей версии OpenSSL, Java и фактического Java кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...