このコマンドを使用してCSRリクエストを作成しました:
openssl req -out certificatecsr.csr -new -newkey rsa:2048 -keyout certificatekey.key
その後、CA は証明書 (.cer) ファイルを私と共有しました。
その後、キーを使用して.cerファイルを.p12に変換しました。
CA から送信された cer と秘密鍵を使用して .p12 証明書を作成する
C:\Java\jdk1.6.0_38\jre\bin>openssl pkcs12 -export -in C:\Users\ashharma1\cert.cer -inkey certificatekey.key -out
certi.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コードからこのJKSを参照していると、次のエラーが発生します:
sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました:
sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません
cer ファイルも cacerts. に追加しましたが、それでも同じエラーが発生します。
JAVAコードに関する限り、私はこのリンクを参照して、自分で作成したキーストアを参照しています:
http://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-java-trust-store/
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 ファイルに変換する必要があるのはなぜですか?