SSL Websocket с использованием StompClient - исключение SSL-сертификата - PullRequest
0 голосов
/ 18 октября 2018

У меня есть простой Java StompClient, подключающийся к событиям веб-сокета Java.Работает, когда сервер настроен как ws.Не удается подключиться, когда сервер настроен как wss.Код приведен ниже ...

KeyStore truststore = KeyStore.getInstance("JKS");
truststore.load(this.getClass().getResourceAsStream("/truststore.jks"), "<hidden_pwd_for_thispost>".toCharArray());
KeyStore keystore = KeyStore.getInstance("JKS");;
keystore.load(this.getClass().getResourceAsStream("/keystore.jks"), "<hidden_pwd_for_thispost>".toCharArray());

SSLContext sslContext = new 
SSLContextBuilder().loadTrustMaterial(truststore, acceptingTrustStrategy);
            .loadKeyMaterial(keystore, "<hidden_pwd_forthisPost>".toCharArray()).build();
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
StandardWebSocketClient client = new StandardWebSocketClient();
client.getUserProperties().clear();
client.getUserProperties().put("org.apache.tomcat.websocket.SSL_CONTEXT", sslContext);
WebSocketStompClient stompClient = new WebSocketStompClient(client);   
ListenableFuture<StompSession> sessionFuture = stompClient.connect(url, handler);
session = sessionFuture.get();

Исключение

Caused by: java.security.cert.CertificateException: No name matching <myhost> found
at sun.security.util.HostnameChecker.matchDNS(Unknown Source)
at sun.security.util.HostnameChecker.match(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(Unknown Source)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(Unknown Source)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(Unknown Source)

Обратите внимание, что у меня есть сборка keyStore и selfSigned trustStore локально.И как keyStore, так и trustStore имеют CN в качестве моего имени хоста.Проверено выше, запустив keytool -list

Может кто-нибудь предложить.Ваша помощь очень ценится.

Извинения, если на этот вопрос уже дан ответ, я искал пока безрезультатно.Отсюда пост.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Проблема решена ..... Пожалуйста, проверьте комментарии

0 голосов
/ 18 октября 2018

Соответствует ли альтернативное имя субъекта в вашем сертификате имени хоста сервера?

X509v3 extensions:
    X509v3 Subject Alternative Name:
        DNS:<**HOST name which matches the server host name**>

Это можно проверить, выполнив следующие действия:

•   openssl s_client -connect <serverhostname>:<port on which you connect>
•   Copy the string from -----BEGIN CERTIFICATE-----  till     -----END CERTIFICATE-----
•   Paste the string into a .pem file, for example:- “test.pem”
•   Run command:   openssl x509 -in test.pem -noout -text

Если SAN не имеетимя хоста, затем DN входит в изображение: См. это: - CertificateException: не найдено имя, соответствующее ssl.someUrl.de


ОБНОВЛЕНИЕ:

Если выпытаются добиться взаимной аутентификации, это означает, что и сервер, и клиент должны иметь свой собственный сертификат.На основе кода _stompClient.connect (url, обработчик);мне кажется, что сервер Websocket, вызываемый StompClient, действует здесь как сервер, а ваш вызывающий код является клиентом.Исходя из этого понимания, вы должны правильно настроить свои сертификаты.Я думаю, что вам нужно предоставить более подробную информацию по этому вопросу, чтобы уточнить, как вы это настроили.SSL - сложная тема, даже небольшая ошибка в конфигурации может привести к ошибке (очевидно из того факта, что WS работает, но не WSS)


ОБНОВЛЕНИЕ:

На основеВаш обновленный комментарий означает, что сертификат клиента не изображен на картинке, поэтому клиент не будет использовать взаимную аутентификацию, а только сертификат сервера, и он проверит, доверяет ли он сертификату сервера, что означает, что ЦС, подписывающий сертификат сервера, долженприсутствовать в доверительном магазине клиента.Если ваш сервер доступен как веб-сервер, вы можете попробовать открыть его через браузер и проверить, показывает ли он действительный сертификат, если вы используете https для доступа к любому ресурсу / интерфейсу пользователя.Это должно как минимум помочь выяснить, правильно ли настроен сертификат или нет.

...