👣

keytoolの翻訳バグに遭遇した話

2021/09/23に公開

いつものように keystore を作成していた

java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
❯ keytool -genkey -v -keystore release.keystore -alias key0 -keyalg RSA -keysize 2048 -validity 10000
❯ keytool -importkeystore -srckeystore release.keystore -destkeystore release.keystore -deststoretype pkcs12

Firebaseに登録するため、SHA1を確認したところ、

❯ keytool -list -v -keystore release.keystore -alias key0
キーストアのパスワードを入力してください:
別名: key0
作成日: 2021/09/14
エントリ・タイプ: PrivateKeyEntry
証明書チェーンの長さ: 1
証明書[1]:
所有者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
発行者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
シリアル番号: 1e6808bf
有効期間の開始日: Tue Sep 14 14:39:19 JST 2021 終了日: Sat Jan 30 14:39:19 JST 2049
証明書のフィンガプリント:
	 MD5:  33:01:38:7E:90:0A:C9:61:40:C8:B1:BE:CE:24:D2:D8:2D:2A:E0:40
	 SHA1: AB:CB:76:79:70:09:DF:F8:B9:C0:C5:8B:B0:E2:54:21:39:A3:73:BD:9B:62:87:4A:A9:D5:A2:5D:0D:6D:21:4D
	 SHA256: SHA256withRSA
署名アルゴリズム名: 2048ビットRSA鍵
サブジェクト公開鍵アルゴリズム: 3
バージョン: {10}

拡張:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: BA 8C 33 4C 42 E8 7D 30   20 7A 24 32 69 55 6F FE  ..3LB..0 z$2iUo.
0010: AE F6 40 07                                        ..@.
]
]

なんかMD5違くない?SHA1長くない?SHA256withRSA???

原因

keytoolの翻訳バグらしく、SHA1がMD5、SHA256がSHA1の項目に表示されているそう。
(結構前からOpenJDK 8使ってたけど気づかなかった...)
https://stackoverflow.com/a/67678202/12856415

対策

翻訳だけの問題なので大きな問題ではないが、いつの間にかOpenJDK 8も結構古くなってたので11にあげてみたら直っていた。

java -version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
OpenJDK 64-Bit Server VM (build 11.0.8+10-b944.6916264, mixed mode)
❯ keytool -list -v -keystore release.keystore -alias key0
キーストアのパスワードを入力してください:
別名: key0
作成日: 2021/09/23
エントリ・タイプ: PrivateKeyEntry
証明書チェーンの長さ: 1
証明書[1]:
所有者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
発行者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
シリアル番号: 67ff29f9
有効期間の開始日: Thu Sep 23 19:56:46 JST 2021終了日: Mon Feb 08 19:56:46 JST 2049
証明書のフィンガプリント:
	 SHA1: BD:EE:BC:BE:D6:BD:5D:10:0B:C0:BC:09:FA:A0:AA:81:CF:C9:2B:16
	 SHA256: 04:3B:26:30:F2:C5:CB:7C:DE:EC:25:90:13:65:BD:9A:58:F0:AD:34:59:F0:4B:BE:9F:E4:0B:CC:44:A3:9E:17
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 60 AE FF 78 9E 4C C0 4D   37 9C 94 78 19 C0 F4 F2  `..x.L.M7..x....
0010: 6E AC D9 81                                        n...
]
]

教訓

Android StudioにはOpenJDKがバンドルされてるようなので、特別な理由がなければ適度にアップデートされるしこれを使えばいいかも。

https://developer.android.com/studio/intro/studio-config?hl=ja#jdk

❯ /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/bin/java --version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
OpenJDK 64-Bit Server VM (build 11.0.8+10-b944.6916264, mixed mode)
GitHubで編集を提案

Discussion