Мой текущий клиент TCP создает сокеты, используя org.apache.http.conn.ssl.SSLSocketFactory
Я перехожу на import javax.net.ssl.SSLSocketFactory;
Однако я не уверен, как загрузить закрытый ключ для сертификата клиента, который хранится в файле .p12, который у меня уже есть, в качестве контекста для новый SSLSocketFactory?
Вот мой существующий код, использующий устаревший SSLSocketFactory:
import org.apache.http.ssl.SSLContexts;
import org.apache.http.conn.ssl.SSLSocketFactory;
String ksPassphrase = "myKSpass";
String pkPassphrase = "myPKpass";
// Get a keystore instance of type PKCS12:
KeyStore keystore = KeyStore.getInstance("PKCS12");
// Load keystore file and password:
keystore.load(new FileInputStream("myFile.p12"), ksPassphrase.toCharArray());
// Create HTTPS connection socket factory context:
SSLContext context = SSLContexts.custom()
.loadKeyMaterial(keystore, pkPassphrase.toCharArray())
.build();
SSLSocketFactory sslScktFactory = new SSLSocketFactory(context);
Вот лучший код, которым я мог управлять из документов:
import javax.net.ssl.*;
// not sure if this is the pass to KS or private key or, somehow both?
String passphrase = "myPassphrase"
SSLContext context = SSLContext.getInstance("TLS");
KeyManagerFactory keyMngFactory = KeyManagerFactory.getInstance("SunX509");
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream("myFile.jks"), passphrase.toCharArray());
keyMngFactory.init(keyStore, passphrase);
context.init(keyMngFactory.getKeyManagers(), null, null);
SSLSocketFactory sslScktFactory = context.getSocketFactory();
- Я думаю, проблема заключается в том, что у меня нет метода
.custom()
для контекста в новой библиотеке.
Что использовать для новой SSLSocketFactory? - Дело в том, что в хранилищах ключей JKS нет внутренних паролей для закрытых ключей, хранящихся внутри (до сих пор я использовал только PKCS, не знакомый с форматом JKS), и поэтому я не вижу, куда ссылается пароль закрытого ключа к?