JDK 同梱の認証局証明書管理ファイル「cacerts」を見てみる

Java プログラムからとあるサーバ証明書の認証が上手く行かなかったので調べた。

JDK には cacerts というファイルが含まれていて、Java プログラムが動作する時に参照する「ルート認証局」の証明書が管理されているようだった。

ブラウザなんかが持っている認証局情報とはまた違うようなので、どんな認証局が登録されているか確認してみる。

目次

cacerts ファイルの場所

cacerts ファイルは JAVA_HOME 配下、./lib/security/ に格納されている。

MacOS で $ brew cask install java と叩いて、OpenJDK 11.0.2 をインストールした場合のフルパスは以下のようになった。

/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home/lib/security/cacerts

Windows の場合はこんな感じかな。

C:\ProgramFiles\Java\jdk1.8.0_21\lib\security\cacerts

中身を見る

ターミナルで、この ./lib/security/ ディレクトリに移動する。

keytool というコマンドが JDK とともにインストールされていて、PATH が通っていると思うので、このコマンドを使って以下のように叩く。

$ keytool -keystore cacerts -list -v
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
キーストアのパスワードを入力してください:  # ★ パスワードを入れる

キーストアのパスワードは、デフォルトでは changeit になっているので、コレを入力する。すると大量のデータが出力される。

$ keytool -keystore cacerts -list -v
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
キーストアのパスワードを入力してください:  # ★ 「changeit」と入力する
キーストアのタイプ: JKS
キーストア・プロバイダ: SUN

キーストアには93エントリが含まれます

別名: verisignclass2g2ca [jdk]
作成日: 2018/06/13
エントリ・タイプ: 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
証明書のフィンガプリント:
     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

*******************************************
*******************************************

別名: digicertassuredidg3 [jdk]
作成日: 2017/12/01
エントリ・タイプ: trustedCertEntry

所有者: CN=DigiCert Assured ID Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Assured ID Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US
# 以下略……

ちなみに、-v オプションを付けないとこんな感じ。

$ keytool -keystore cacerts -list
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
キーストアのパスワードを入力してください:  # ★ 「changeit」と入力する
キーストアのタイプ: JKS
キーストア・プロバイダ: SUN

キーストアには93エントリが含まれます

verisignclass2g2ca [jdk],2018/06/13, trustedCertEntry,
証明書のフィンガプリント(SHA-256): 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
digicertassuredidg3 [jdk],2017/12/01, trustedCertEntry,
証明書のフィンガプリント(SHA-256): 7E:37:CB:8B:4C:47:09:0C:AB:36:55:1B:A6:F4:5D:B8:40:68:0F:BA:16:6A:95:2D:B1:00:71:7F:43:05:3F:C2
# ……以下略

-v オプションを付けた時の内容は、コレの詳細版だ。

認証局を知る

さて、-v オプションを付けると長すぎてよく分からないが、-v オプションを付けないと認証局がイマイチ分からない。

そこで、grep発行者 の文字を含む行だけ抽出し、sort コマンドで順序を直してみる。

以下は MacOS にインストールした OpenJDK 11.0.2.jdk での結果。

# grep コマンドで結果を絞り、sort コマンドで揃える
$ keytool -keystore cacerts -list -v | grep '発行者' | sort

Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
警告: cacertsキーストアにアクセスするには-cacertsオプションを使用してください
キーストアのパスワードを入力してください:  # ★ 「changeit」と入力する

発行者: CN=AAA Certificate Services, O=Comodo CA Limited, L=Salford, ST=Greater Manchester, C=GB
発行者: CN=Actalis Authentication Root CA, O=Actalis S.p.A./03358520967, L=Milan, C=IT
発行者: CN=AddTrust Class 1 CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE
発行者: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE
発行者: CN=AddTrust Qualified CA Root, OU=AddTrust TTP Network, O=AddTrust AB, C=SE
発行者: CN=AffirmTrust Commercial, O=AffirmTrust, C=US
発行者: CN=AffirmTrust Networking, O=AffirmTrust, C=US
発行者: CN=AffirmTrust Premium ECC, O=AffirmTrust, C=US
発行者: CN=AffirmTrust Premium, O=AffirmTrust, C=US
発行者: CN=Baltimore CyberTrust Root, OU=CyberTrust, O=Baltimore, C=IE
発行者: CN=Buypass Class 2 Root CA, O=Buypass AS-983163327, C=NO
発行者: CN=Buypass Class 3 Root CA, O=Buypass AS-983163327, C=NO
発行者: CN=COMODO ECC Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
発行者: CN=COMODO RSA Certification Authority, O=COMODO CA Limited, L=Salford, ST=Greater Manchester, C=GB
発行者: CN=Certum CA, O=Unizeto Sp. z o.o., C=PL
発行者: CN=Certum Trusted Network CA, OU=Certum Certification Authority, O=Unizeto Technologies S.A., C=PL
発行者: CN=Chambers of Commerce Root - 2008, O=AC Camerfirma S.A., SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU
発行者: CN=Chambers of Commerce Root, OU=http://www.chambersign.org, O=AC Camerfirma SA CIF A82743287, C=EU
発行者: CN=Class 2 Primary CA, O=Certplus, C=FR
発行者: CN=Class 3P Primary CA, O=Certplus, C=FR
発行者: CN=D-TRUST Root Class 3 CA 2 2009, O=D-Trust GmbH, C=DE
発行者: CN=D-TRUST Root Class 3 CA 2 EV 2009, O=D-Trust GmbH, C=DE
発行者: CN=DST Root CA X3, O=Digital Signature Trust Co.
発行者: CN=Deutsche Telekom Root CA 2, OU=T-TeleSec Trust Center, O=Deutsche Telekom AG, C=DE
発行者: CN=DigiCert Assured ID Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Assured ID Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Assured ID Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Global Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Global Root G3, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=DigiCert Trusted Root G4, OU=www.digicert.com, O=DigiCert Inc, C=US
発行者: CN=Entrust Root Certification Authority - EC1, OU="(c) 2012 Entrust, Inc. - for authorized use only", OU=See www.entrust.net/legal-terms, O="Entrust, Inc.", C=US
発行者: CN=Entrust Root Certification Authority - G2, OU="(c) 2009 Entrust, Inc. - for authorized use only", OU=See www.entrust.net/legal-terms, O="Entrust, Inc.", C=US
発行者: CN=Entrust Root Certification Authority, OU="(c) 2006 Entrust, Inc.", OU=www.entrust.net/CPS is incorporated by reference, O="Entrust, Inc.", C=US
発行者: CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net
発行者: CN=GTE CyberTrust Global Root, OU="GTE CyberTrust Solutions, Inc.", O=GTE Corporation, C=US
発行者: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US
発行者: CN=GeoTrust Primary Certification Authority - G2, OU=(c) 2007 GeoTrust Inc. - For authorized use only, O=GeoTrust Inc., C=US
発行者: CN=GeoTrust Primary Certification Authority - G3, OU=(c) 2008 GeoTrust Inc. - For authorized use only, O=GeoTrust Inc., C=US
発行者: CN=GeoTrust Primary Certification Authority, O=GeoTrust Inc., C=US
発行者: CN=GeoTrust Universal CA, O=GeoTrust Inc., C=US
発行者: CN=Global Chambersign Root - 2008, O=AC Camerfirma S.A., SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU
発行者: CN=GlobalSign Root CA, OU=Root CA, O=GlobalSign nv-sa, C=BE
発行者: CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R4
発行者: CN=GlobalSign, O=GlobalSign, OU=GlobalSign ECC Root CA - R5
発行者: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2
発行者: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R3
発行者: CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
発行者: CN=ISRG Root X1, O=Internet Security Research Group, C=US
発行者: CN=IdenTrust Commercial Root CA 1, O=IdenTrust, C=US
発行者: CN=IdenTrust Public Sector Root CA 1, O=IdenTrust, C=US
発行者: CN=KEYNECTIS ROOT CA, OU=ROOT, O=KEYNECTIS, C=FR
発行者: CN=LuxTrust Global Root, O=LuxTrust s.a., C=LU
発行者: CN=QuoVadis Root CA 1 G3, O=QuoVadis Limited, C=BM
発行者: CN=QuoVadis Root CA 2 G3, O=QuoVadis Limited, C=BM
発行者: CN=QuoVadis Root CA 2, O=QuoVadis Limited, C=BM
発行者: CN=QuoVadis Root CA 3 G3, O=QuoVadis Limited, C=BM
発行者: CN=QuoVadis Root CA 3, O=QuoVadis Limited, C=BM
発行者: CN=QuoVadis Root Certification Authority, OU=Root Certification Authority, O=QuoVadis Limited, C=BM
発行者: CN=SecureTrust CA, O=SecureTrust Corporation, C=US
発行者: CN=Sonera Class2 CA, O=Sonera, C=FI
発行者: CN=Starfield Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US
発行者: CN=Starfield Services Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US
発行者: CN=SwissSign Gold CA - G2, O=SwissSign AG, C=CH
発行者: CN=SwissSign Platinum CA - G2, O=SwissSign AG, C=CH
発行者: CN=SwissSign Silver CA - G2, O=SwissSign AG, C=CH
発行者: CN=T-TeleSec GlobalRoot Class 2, OU=T-Systems Trust Center, O=T-Systems Enterprise Services GmbH, C=DE
発行者: CN=T-TeleSec GlobalRoot Class 3, OU=T-Systems Trust Center, O=T-Systems Enterprise Services GmbH, C=DE
発行者: CN=TeliaSonera Root CA v1, O=TeliaSonera
発行者: CN=Thawte Timestamping CA, OU=Thawte Certification, O=Thawte, L=Durbanville, ST=Western Cape, C=ZA
発行者: CN=USERTrust ECC Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US
発行者: CN=USERTrust RSA Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US
発行者: CN=UTN-USERFirst-Client Authentication and Email, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US
発行者: CN=UTN-USERFirst-Hardware, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US
発行者: CN=UTN-USERFirst-Object, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US
発行者: CN=VeriSign Class 3 Public Primary Certification Authority - G3, OU="(c) 1999 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
発行者: CN=VeriSign Class 3 Public Primary Certification Authority - G4, OU="(c) 2007 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
発行者: CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
発行者: CN=VeriSign Universal Root Certification Authority, OU="(c) 2008 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
発行者: CN=XRamp Global Certification Authority, O=XRamp Security Services Inc, OU=www.xrampsecurity.com, C=US
発行者: CN=thawte Primary Root CA - G2, OU="(c) 2007 thawte, Inc. - For authorized use only", O="thawte, Inc.", C=US
発行者: CN=thawte Primary Root CA - G3, OU="(c) 2008 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US
発行者: CN=thawte Primary Root CA, OU="(c) 2006 thawte, Inc. - For authorized use only", OU=Certification Services Division, O="thawte, Inc.", C=US
発行者: EMAILADDRESS=premium-server@thawte.com, CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA
発行者: OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US
発行者: OU=Go Daddy Class 2 Certification Authority, O="The Go Daddy Group, Inc.", C=US
発行者: OU=Security Communication RootCA1, O=SECOM Trust.net, C=JP
発行者: OU=Security Communication RootCA2, O="SECOM Trust Systems CO.,LTD.", C=JP
発行者: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, 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
発行者: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 3 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
発行者: OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd.", C=TW

コレでかなり把握しやすくなっただろう。DigiCertGlobalSignIdenTrust などが含まれているようだ。

よく分かったのでコレで終わり。