最近、クライアント認証にPFX証明書を使用する必要がありました。そのため、Javaキーストア(JKS)に変換する必要がありました。この投稿では、トラストストアとキーストアの両方を作成する方法を学習します。ニーズに基づいて、どちらか一方が必要になる場合があるためです。
JSSE参照ガイドによると、トラストストアとキーストアの違いは、知らない場合は次のとおりです。
TrustManager:リモート認証資格情報(したがって接続)を信頼するかどうかを決定します。
KeyManager:リモートホストに送信する認証資格情報を決定します。
次に、必要なのはOpenSSLとJava 7+だけです!###前提条件
1qaz @ WSX
### 1.pfxを介してキーファイルを生成する
まず、PFXファイルからキーを生成しましょう。このキーは後でp12キーストアに使用されます。
示例: openssl pkcs12 -in example.pfx -nocerts -out example.key
### OpenSSLディレクトリに移動します
CD c:\ OpenSSL-Win32 \ bin
openssl pkcs12 -in C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.pfx -nocerts -out C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.key
ここに示すように、PFXファイルのパスワードの入力を求められます。後で、PEMパスフェーズに入るように求められます。たとえば、ここではすべてに123456を使用しましょう。
### 2.pfxを介してCRTファイルを生成します
2番目のコマンドはほとんど同じですが、今回はnokeyとcrtについてです。
示例: openssl pkcs12 -in example.pfx -clcerts -nokeys -out example.crt
openssl pkcs12 -in C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.pfx -clcerts -nokeys -out C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.crt
### 3.CRTを介してtruststore.jksを生成します
これで、キーとcrtファイルができました。次のステップは、次のようにトラストストアを作成することです。
示例: keytoolの-import -file example.crt -alias exampleCA -keystore truststore.jks
### JDKディレクトリに移動します
c:\ OpenSSL-Win32 \ bin> cd "C:\ Program Files \ Java \ jdk1.7.0_79 \ bin"
C:\ Program Files \ Java \ jdk1.7.0_79 \ bin>
keytool -import -file C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103 .crt -alias examplei-zhishiCA -keystore C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103_truststore .jks
ここに表示されているように、このcrtファイルをJKSトラストストアにインポートしてパスワードを設定するだけです。質問の場合:「この証明書を信頼しますか?」「はい」と答えると、トラストストアに追加されます。
トラストストアのみが必要な場合は、ここで停止できます。
### 4. crt / key / crtを使用してkeystore.p12を作成します
最後のステップは、次のようにキーストアを作成することです。
示例: openssl pkcs12 -export -in example.crt -inkey example.key -certfile example.crt -name "examplecert" -out keystore.p12
openssl pkcs12 -export -in C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.crt -inkey C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.key -certfile C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103.crt -name "examplei-zhishiCert" -out C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103_keystore.p12
### 5..keystore.p12を介してkeystore.jksを作成します
多くの場合、このp12キーストアで十分です。ただし、それでもJKSキーストアが必要な場合は、次の1つの追加コマンドが必要です。
示例: keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype JKS
キーストアkeystore.p12をkeystore.jksにインポートしています...
### JDKディレクトリに移動します
c:\ OpenSSL-Win32 \ bin> cd "C:\ Program Files \ Java \ jdk1.7.0_79 \ bin"
C:\ Program Files \ Java \ jdk1.7.0_79 \ bin>
keytool -importkeystore -srckeystore C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103_keystore.p12 -srcstoretype pkcs12 -destkeystore C:\ OpenSSL-Win32 \ bin \ JKS \ i-zhishi_com \ i-zhishi_com_20210103_keystore.jks -deststoretype JKS
キーストアkeystore.p12をkeystore.jksにインポートしています...
エイリアスexamplecertのエントリが正常にインポートされました。
インポートコマンドが完了しました:1エントリが正常にインポートされ、0エントリが失敗またはキャンセルされました
警告:
JKSキーストアは独自の形式を使用します。「keytool-importkeystore-srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12」を使用して、業界標準形式であるPKCS12に移行することをお勧めします。
以上です!これがお役に立てば幸いです。ご質問やコメントがございましたら、お気軽にどうぞ。
ls //証明書ファイルを表示する
example.pfx
example.key
example.crt
keystore.p12
keystore.jks
truststore.jks