Для защищенных сокетов сервера для отправки сертификата сервера все, что я делаю, это инициализирую SSLContext
с помощью KeyManagerFactory.getKeyManagers()
, которое было инициализировано с помощью моего хранилища ключей.
Но как я могу сделать это на стороне клиента?
Т.е. для клиента я делаю:
System.setProperty("javax.net.ssl.keyStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "secret");
System.setProperty("javax.net.ssl.trustStore", "clientKeystore.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "secret");
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket("localhost", 7890);
Я использую то же хранилище ключей, что и хранилище доверия. Я предполагаю, что просто для просмотра JSSE это нормально.
Проблема в том, что я попадаю в серверную часть (у меня есть setNeedClientAuth
в serversocket для true).
Exception in thread "main" javax.net.ssl.SSLHandshakeException: null cert chain
Итак, как мне настроить клиентскую сторону для отправки сертификата? Разве системные свойства не являются правильным подходом?
Потому что я не вижу, как SSLContext можно использовать на клиентской стороне.
Спасибо!
Exception in thread "main" java.net.SocketException: Software caused connection abort: recv failed
- person Cratylus   schedule 07.02.2011