У меня есть сертификат клиента в моем хранилище ключей и открытый сертификат сервера в моем хранилище доверенных сертификатов.
В настоящее время я устанавливаю хранилище ключей и доверенность как
System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.keyStore", Constants.APPLICATION_HOME + File.separatorChar + this.certificateName);
System.setProperty("javax.net.ssl.keyStorePassword", certificatePass);
System.setProperty("javax.net.ssl.trustStore", Constants.APPLICATION_HOME + File.separatorChar + "jssecacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
Но я хочу сделать это без использования System.setProperty()
. По крайней мере, часть хранилища ключей, хранилище доверенных сертификатов может оставаться таким, поскольку оно никогда не меняется. Я попробовал это:
keyStore = KeyStore.getInstance("PKCS12");
InputStream keyStoreData = new FileInputStream(Constants.APPLICATION_HOME + File.separatorChar + this.certificateName);
this.keyStore.load(keyStoreData, certificatePass.toCharArray());
TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustFactory.init(this.keyStore);
TrustManager[] trustManagers = trustFactory.getTrustManagers();
sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, null);
SSLContext.setDefault(sslContext);
Но это устанавливает хранилище доверенных сертификатов, насколько я могу видеть, и поэтому мое рукопожатие терпит неудачу, потому что теперь у меня есть только сертификат клиента в моем хранилище доверенных сертификатов, а не сертификат сервера из моего файла jssecacerts. Сбой с этой ошибкой:
http-bio-8080-exec-10, обработка исключения:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: не удалось построить путь PKIX:
sun.security.provider.certpath.SunCertPathBuilderException: невозможно
найти действительный путь сертификации для запрошенной цели
Как мне этого добиться?