пытаюсь установить соеденение с двухсторонним SSL
Код:
public static void main(String[] args) throws Exception {
System.setProperty("https.proxyHost", "172.18.0.88");
System.setProperty("https.proxyPort", "3128");
System.setProperty("http.proxyHost", "172.18.0.88");
System.setProperty("http.proxyPort", "3128");
System.setProperty("com.sun.security.enableCRLDP", "true"); // для sun jvm
System.setProperty("javax.net.ssl.supportGVO", "true");
KeyStore ks = KeyStore.getInstance("HDImageStore", "JCP"); // Тут хранится только один наш сертификат
ks.load(new FileInputStream("C:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\bogocert"), "123".toCharArray());
KeyStore kst = KeyStore.getInstance("HDImageStore", "JCP"); // Тут хранится сертификат удалённого сервера и корневые сертификаты
kst.load(new FileInputStream("C:\\Dev Tools\\Eclipse workspace\\NBKI-CKKI\\trust17"), "123".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
kmf.init(ks, "123".toCharArray());
tmf.init(kst);
SSLContext sslContext = SSLContext.getInstance("GostTLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory sslFact = (SSLSocketFactory)SSLSocketFactory.getDefault();
HttpsURLConnection.setDefaultSSLSocketFactory(sslFact);
URL url = new URL("https://icrs.nbki.ru/signals/list");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setHostnameVerifier(new HostnameVerifier()
{
public boolean verify(String hostname, SSLSession session) {
// TODO Auto-generated method stub
return true;
}});
connection.setUseCaches(false);
connection.setRequestMethod("GET");
connection.connect();
int responseCode = connection.getResponseCode(); /// Тут возникает ошибка!
String responseMesssage = connection.getResponseMessage();
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
String response = "";
while ((line = rd.readLine()) != null) {
response += line + "\r\n";
}
rd.close();
is.close();
System.out.println(response);
connection.disconnect();
В консоли ошибка
июл 12, 2018 5:42:37 PM ru.CryptoPro.ssl.am a
FINE: THROW
java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at ru.CryptoPro.ssl.w.<init>(Unknown Source)
at ru.CryptoPro.ssl.g.b(Unknown Source)
at ru.CryptoPro.ssl.g.checkServerTrusted(Unknown Source)
at ru.CryptoPro.ssl.x.checkServerTrusted(Unknown Source)
at ru.CryptoPro.ssl.ao.a(Unknown Source)
at ru.CryptoPro.ssl.ao.a(Unknown Source)
at ru.CryptoPro.ssl.f.o(Unknown Source)
at ru.CryptoPro.ssl.f.a(Unknown Source)
at ru.CryptoPro.ssl.am.a(Unknown Source)
at ru.CryptoPro.ssl.am.i(Unknown Source)
at ru.CryptoPro.ssl.am.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
at testapps.TwoWaySSLTester.main(TwoWaySSLTester.java:83)
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(Unknown Source)
at java.security.cert.PKIXParameters.<init>(Unknown Source)
at java.security.cert.PKIXBuilderParameters.<init>(Unknown Source)
... 15 more
Вроде как, сервер удалённый сертификат предъявляет, в хранилище trust17 сертификат сервера присутствует, а выдаёт ошибку
Во вложении журнал обмена
![](/forum2/Themes/soclean/icon_file.gif)
SSL_LOG.txt
(23kb) загружен 6 раз(а).