p12はキーストアの一つの形式です。キーストアとは暗号化された鍵と証明書を一つのファイルの保管する仕組みなります。今回はp12ファイルの内容を見ることで鍵と証明書について理解を深めます。
必要なもの
- p12ファイル→この中身を確認するわけだからこれは必須
- p12ファイルパスワード→p12にパスワードがかかっている場合には必要。後述するtoolで中身を確認しようとするとパスワードが要求される
- keytool→JREに含まれる。keytool単体では提供されていない模様
keytoolはJREに含まれているのでOracleのサイトもしくは”Java インストール”等で検索してJREをインストールする。keytoolはコマンドラインから実行する。しかしkeytoolが保管されているJREのフォルダにはPathが通っていないためにこのままでは実行できない。方法は2つある。
いづれの方法にしてもまずJREがインストールされたパスからkeytoolへのパスを確認する。JREのパスを確認するには自分でフォルダをひっくり返してみるのが一番良い気がする。コマンドラインからwhere javaで探した見たところ、java.exeはsystem32にあることが分かった。しかしkeytoolはここには存在しない。
JREがインストールされているパスをc:\jreとするならば、keytoolへのパスはc:\jre\bin\keytoolとなる。
さて実行方法としては下記の2つである。
- 環境変数Pathにフォルダパスを追加する
- フォルダパスを指定して実行する
1)の方法を取るならば環境変数pathにc:\jre\binを追加すればよい。2)の方法ならばコマンドラインからの実行時にc:\jre\bin\keytoolとすればよい。
keytool実行時のパラメータは以下のようになる。
ここではp12のファイル名はCertificate.p12でありc:\tempに置かれているとする。
keytool -list -v -keystore C:\temp\Certificate.p12 -storetype PKCS12
キーストアのパスワードを入力してください: xxxx
p12がパスワードで保護されている場合にはkeytoolを実行すると”キーストアのパスワードを入力してください”と表示されるので、ここでパスワードを入力すればよい。わからない場合にはp12ファイル作成者に聞く必要がある。このパスワードがわからない限りはp12情報取得することができない。
コマンドが成功すると以下のように表示される。
キーストアのタイプ: PKCS12
キーストアのプロバイダ: SunJSSEキーストアには 1 エントリが含まれます。
別名: ios developer: Taro Yamada ( contoso x company )
作成日: 2018/01/16
エントリのタイプ: keyEntry
証明連鎖の長さ: 1
証明書[1]:
所有者: C=US, O=”Contoso”, OU=ABCDEFG, CN=iPhone Developer: TY
実行者: CN=Apple Worldwide Developer Relations Certification Authority, OU=Apple Worldwide
シリアル番号: 57FFFFFFFFFFFFFFF
有効日: Wed Aug 31 22:55:24 JST 2016 有効期限: Thu Aug 31 22:55:24 JST 2017
証明書のフィンガープリント:
MD5: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA1: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
さてこの結果を一つずつ見ていく。
まずキーストアのタイプ。これはキーの保存形式を意味する。要するにキーのファイル拡張子のようなものである。保存形式には2通りある。
| PKCS#12 | .p12, .pfx | iPhone |
| jks | .jks, .keystore | andoroid |
今回は.p12であることからすでにkeytoolのパラメータで-storetype PKCS12を指定している。
キーストアプロバイダは要するにこの.p12ファイルを作成したツールは何かです。この場合にはSunJSSEの仕組みで作られている。その他よく見かけるプロバイダには以下がある。
- SunJCE (JCEKS format)
- SUN (JKS format)
- IBMJCE (IBM JREs)
- SunJSSE (PKCS12 format)
キーストアには複数のキーを保存できる。下記の記述からこのキーストアには一つのキーが含まれていることがわかる。
キーストアには 1 エントリが含まれます。
エントリタイプには4つあり、保管されているもの、証明機関により異なる。
PrivateKeyEntry : 公開鍵・秘密鍵であり、証明機関によりサインされている。
KeyEntry:公開鍵・秘密鍵であるが、証明機関によってサインされていない。
trustedCertEntry:証明書機関によりサインされた証明書
証明書のフィンガープリントではこの証明書のSHA1とMD5が表示されている。使い方としてはp12ファイルを送付後双方でフィンガープリントを比較すればファイルが壊れていない、改ざんされていないことがわかる。