У меня есть этот код для подключения сервера к клиенту с использованием SSL, и теперь я хочу добавить проверку на стороне клиента:
(У меня есть серверное хранилище ключей (тип JCEKS) и клиентское хранилище ключей (тип JKS), сервер использует truststore (cacerts), где я импортировал оба сертификата, потому что я также хочу использовать этот доверенный сервер для проверки подлинности клиента)
Клиентский код:
System.setProperty("javax.net.ssl.trustStore", cerServer);
System.setProperty("javax.net.ssl.trustStoreType","JCEKS");
System.setProperty("javax.net.ssl.trustStorePassword", pwdCacerts);
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", port);
Код сервера:
KeyStore ks = LoadKeyStore(new File(serverKeyStore), pwdKeyStore, "JCEKS");
KeyManagerFactory kmf;
kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, pwdKeyStore.toCharArray());
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(kmf.getKeyManagers(),null, null);
SSLServerSocketFactory ssf = sc.getServerSocketFactory();
sslserversocket = (SSLServerSocket) ssf.createServerSocket(port);
заблаговременно за помощь.
изменить: Я добавляю этот код на стороне сервера:
System.setProperty("javax.net.ssl.trustStore", cacerts);
System.setProperty("javax.net.ssl.trustStoreType","JKS");
System.setProperty("javax.net.ssl.trustStorePassword", pwdCacerts);
но если я удалю сертификат клиента в cacerts, соединение не даст мне ошибку и для этого я считаю, что это неправильно.