|
分類:[Java]
指定したエイリアスでSSLソケットを開くために、KeyStoreの調査をしています。
<http://a4dosanddos.hatenablog.com/entry/2014/02/08/144856>
を参考に、KeyStoreから秘密鍵を取得しようとしているのですが、nullが戻ってきて取得できません。
なぜ取得できないか、原因を追究する方法など、ご存知でしたら、教えていただけないでしょうか。
(KeyStoreに入っているものでも、秘密鍵が含まれているとは限らないものなのでしょうか?KeyStoreには証明書とキーペアが混在しているのでしょうか?)
よろしくお願いします。
////////////////////////////////////////////////////////////////////////////////
◇実行したコード
public static void main(String[] args) {
try {
// KeyStoreのロード
KeyStore keyStore = null;
InputStream inputStream = new FileInputStream("C:/Program Files/Java/jre1.8.0_191/lib/security/cacerts");
try {
keyStore = KeyStore.getInstance("JKS");
keyStore.load(inputStream, "changeit".toCharArray());
}
finally {
if (inputStream != null) {
inputStream.close();
inputStream = null;
}
}
// エイリアスの一覧をログ出力
Enumeration keyEnumeration = keyStore.aliases();
int count = 0;
while (keyEnumeration.hasMoreElements()) {
String alias = (String) keyEnumeration.nextElement();
LogService.debug("Alias:[" + count + "]=[" + alias + "]");
count++;
}
// 秘密鍵を取得
// String alias = "verisignclass2g2ca [jdk]";
String alias = "verisignclass2g2ca";
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, "changeit".toCharArray());
if (privateKey == null) {
LogService.debug("PrivateKey is null.");
}
else {
LogService.debug("PrivateKey:[" + privateKey.toString() + "]");
}
}
catch (Exception exception) {
LogService.error(exception);
}
}
////////////////////////////////////////////////////////////////////////////////
◇実行結果
[2018/12/05 13:13:22.463] <DEBUG> [HyPAS]TestMain.main(80) - Alias:[0]=[verisignclass2g2ca [jdk]]
[2018/12/05 13:13:22.471] <DEBUG> [HyPAS]TestMain.main(80) - Alias:[1]=[digicertassuredidg3 [jdk]]
<<<中略>>>
[2018/12/05 13:13:22.485] <DEBUG> [HyPAS]TestMain.main(80) - Alias:[94]=[addtrustqualifiedca [jdk]]
[2018/12/05 13:13:22.485] <DEBUG> [HyPAS]TestMain.main(80) - Alias:[95]=[digicertglobalrootca [jdk]]
[2018/12/05 13:13:22.486] <DEBUG> [HyPAS]TestMain.main(89) - PrivateKey is null.
////////////////////////////////////////////////////////////////////////////////
◇指定したエイリアスのkeytoolの出力
キーストアには96エントリが含まれます
別名: verisignclass2g2ca [jdk]
作成日: 2016/08/26
エントリ・タイプ: trustedCertEntry
所有者: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
発行者: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
シリアル番号: b92f60cc889fa17a4609b85b706c8aaf
有効期間の開始日: Mon May 18 09:00:00 JST 1998 終了日: Wed Aug 02 08:59:59 JST 2028
証明書のフィンガプリント:
MD5: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1
SHA1: B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D
SHA256: 3A:43:E2:20:FE:7F:3E:A9:65:3D:1E:21:74:2E:AC:2B:75:C2:0F:D8:98:03:05:BC:50:2C:AF:8C:2D:9B:41:A1
署名アルゴリズム名: SHA1withRSA
サブジェクト公開鍵アルゴリズム: 1024ビットRSA鍵
バージョン: 1
|