👣
keytoolの翻訳バグに遭遇した話
いつものように 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)
Discussion