SSLSocket в Tomcat Spring - PullRequest
       5

SSLSocket в Tomcat Spring

0 голосов
/ 22 марта 2012

Я пытаюсь переключиться на сокет SSL в моем контейнере Spring:

SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket c = (SSLSocket) f.createSocket(socket, srvAddr, srvPort,true);

и получаю следующую ошибку:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: не удалось построить путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели

, где сокет является уже открытым обычным сокетом (новый сокет (srvAddr), srvPort);)

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

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

Здесь вы можете найти учебник по этой теме.

0 голосов
/ 22 марта 2012

Томас Наррос объяснил вам причину. Вот способ сбора сервисного сертификата (цепочки) или даже его полного игнорирования.

Создание класса TrustManager с инструментами javax.net.ssl.X509TrustManager

Вы получите цепочку сертификатов сервера в checkServerTrusted(X509Certificate[] chain, String authType). В этом методе вы можете написать простой код для сохранения полученных сертификатов. Если вы не хотите проверять их, просто вернитесь, не выдав исключение.

Чтобы реализовать TrustManager, сделайте что-то вроде этого

TrustManager[] myTrustManager = { new MyTrustManager() };
SSLContext ctx = SSLContext.getInstance("TLS");

if (sendClientCerts) {   //send my certs for authentication to the server

    X509KeyManager kmsd = ...

    ctx.init(kmsd, myTrustManager, null);
} 
else {

    ctx.init(null, myTrustManager, null);
}

// Finally get a SSL Socket Factory and return it
SSLScketFactory ssf = ctx.getSocketFactory();

SSLSocket socket = ssf.createSocket(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...