Рукопожатие на стороне клиента java с использованием сертификата PKCS12
Я подключаюсь к удаленному серверу постоянного тока, используя следующий код подтверждения связи
System.setProperty("javax.net.ssl.keyStore",".p12 file path");
System.setProperty("javax.net.ssl.keyStorePassword",keystorePassword);
System.setProperty("javax.net.ssl.keyStoreType",""pkcs12"");
Я могу подключиться к первому серверу с этим кодом, но для следующего сервера Tomcat игнорирует недавний набор свойств, поэтому я не могу подключиться к следующему серверу с таким же типом скрытого сервера постоянного тока.
заранее спасибо
1 ответ
Если под "подключением https URL" вы имеете в виду java.net.URL
класс и что-то вроде new java.net.URL("https://something") .openConnection()
который возвращает реализацию (подкласс) javax.net.HttpsURLConnection
Вот два примера, на которые я ссылался:
static void SO49993912ExampleClientPKCS12 (String[] args) throws Exception {
FileInputStream fis = new FileInputStream (args[0]);
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load (fis, args[1].toCharArray()); fis.close();
KeyManagerFactory kf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kf.init (ks, args[1].toCharArray());
SSLContext ctx = SSLContext.getInstance ("TLS");
ctx.init (kf.getKeyManagers(), null /*default TM(s)*/, null);
// method 1
HttpsURLConnection conn1 = (HttpsURLConnection) new URL (args[2]).openConnection();
conn1.setSSLSocketFactory(ctx.getSocketFactory());
conn1.connect(); System.out.println (conn1.getResponseCode()); conn1.disconnect();
// method 2
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
HttpsURLConnection conn2 = (HttpsURLConnection) new URL (args[2]).openConnection();
conn1.connect(); System.out.println (conn2.getResponseCode()); conn2.disconnect();
}
Однако в Java существует множество способов подключения к https (и другим) URL; если вы действительно имели в виду что-то еще, вы должны быть более конкретны.