我正在尝试在 HTTPS 请求调用中包含 SSL 证书文件(.crt 和 .key)。但是这样做时出现握手失败错误。这是我在 Java 中包含该文件的代码。客户端期望 SSL 版本应该是 TLSv1.2。
public static void main(String[] args){
SSLConnectionSocketFactory socketFactory = null;
String uri = "https://myclient.com";
try {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(
new FileInputStream(new File(
"certificate.p12")),
keyStorePassword.toCharArray());
socketFactory = new SSLConnectionSocketFactory(
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
.loadKeyMaterial(keyStore, keyStorePassword.toCharArray()).build(),
NoopHostnameVerifier.INSTANCE);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
最佳答案
问题是您正在尝试加载一个 pkcs12
文件,而您应该加载一个 keystore
文件。
所以第一步(您已经做过)是使用 openssl
创建一个 pkcs12
(或 pfx
)文件。
openssl pkcs12 -export -out certificate.p12 -inkey privateKey.key -in certificate.crt
现在您必须使用java
的keytool 创建一个符合jks
的 keystore 。
keytool -genkey -alias mydomain -keyalg RSA -keystore mykeystore.jks -keysize 2048
你会被问到一堆问题,包括密码。
创建 keystore 后,您现在可以导入 pkcs12
文件:
keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore .\mykeystore.jks -deststoretype JKS
在您的 Java
代码中,您必须导入 mykeystore.jks
而不是 certificate.p12
。
关于java - 如何在 Java 的 HTTPS 请求调用中包含 SSL 证书文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48557606/