我使用以下命令创建了CSR请求:
openssl请求-out CertificateCsr.csr-new-newkey rsa:2048-keyout CertificateKey.key
之后,CA将与我共享证书(.cer)文件。
在此之后,我使用key将.cer文件转换为.p12。
使用CA发送的cer和私钥创建.p12证书
C:\Java\jdk1.6.0_38\jre\bin>openssl pkcs12-export-in C:\users\asharma1\cert.cer-inkey certificatekey.key-out
证书P12
正在创建JKS密钥库:
keytool-genkey-alias quid-keystore quid.jks
将.p12证书导入jks密钥库
C:\Java\jdk1.6.0_38\jre\bin>keytool-v-importkeystore-srckeystore C:\openssl-win64\bin\certi.p12-srcstoreType PKCS12
-destKeystore quid.JKS-destStoreType JKS
但是当我引用Java代码中的JK时,我得到了这个错误:
Sun.Security.Validator.ValidatorException:PKIX路径生成失败:
Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径
我还将cer文件添加到cacerts.,但仍然得到相同的错误。
就Java代码而言,我引用这个链接是为了引用我自己创建的密钥库:
http://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-Java-信托-商店/
public SSLContext getSSLContext(String tspath)
throws Exception {
TrustManager[] trustManagers = new TrustManager[] {
new ReloadableX509TrustManager(tspath)
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagers, null);
return sslContext;
}
SSLContext sslContext=getSSLContext("C:\\Java\\jdk1.6.0_38\\jre\\bin\\quid.jks");
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
URL pickUrl = new URL(pickupLocation);
URLConnection urlConn = pickUrl.openConnection();
HttpsURLConnection httpsURLConn = (HttpsURLConnection)urlConn;
httpsURLConn.setSSLSocketFactory(socketFactory);
String encoding = urlConn.getContentEncoding();
InputStream is = urlConn.getInputStream();
InputStreamReader streamReader = new InputStreamReader(is, encoding != null
? encoding : "UTF-8");
请注意我没有使用任何服务器。我正在尝试运行上面写的代码只有主方法。
请告诉我需要做什么。为什么我需要将我的.cer文件转换为.p12文件?
我建议您将CA证书(或整个CA链和中间CA)导入到密钥库。
我想p12是进口的。我所建议的是将链导入密钥存储库。至少错误消息是这样说的。
我推测:
您可以使用portecle导入丢失的受信任CA证书(而不是结束您在.p12或从颁发CA接收的单独的.cer文件中的实体cartificate)。它比KeyTool对用户更友好。只要按照这个指南操作就可以了。