技術系TIPS
PR

p12(pkcs12)形式の証明書の有効期限をkeytoolとopensslで確認する

saratogax
記事内に商品プロモーションを含む場合があります
エンジニア
エンジニア

証明書の有効期限が切れそうだから差し替えておいて

エンジニア
エンジニア

証明書のファイルとパスフレーズは別途送っておくね

急に渡された p12 拡張子(pkcs#12)の証明書。

設定するのは簡単だけど、証明書に不備があればサービスを止めかねない作業。

まずは、パスワード(パスフレーズ)を使って証明書の中身を確認しておきましょうか。

そもそもパスワードが違っていたら本末転倒ですからね。

今回は p12 ファイルの証明書の中身の確認と有効期限の調べ方を紹介します。

keytool

Mac や Linux など keytool コマンドが利用できる環境なら簡単。
(証明書のファイル名を hoge.p12 とします)

$ keytool -list -v -keystore hoge.p12 -storetype PKCS12 -storepass ******

または、storepass を省略してインタラクティブにパスワード入力をすることもできます。

$ keytool -list -v -keystore hoge.p12 -storetype PKCS12

結果の一部を抜粋します。

キーストアのタイプ: PKCS12
キーストア・プロバイダ: SunJSSE
作成日: 2023/02/16
エントリ・タイプ: PrivateKeyEntry
有効期間の開始日: Thu Feb 19 00:00:00 JST 2023 終了日: Mon Mar 30 00:00:00 JST 2025
署名アルゴリズム名: SHA256withRSA
サブジェクト公開キー・アルゴリズム: 2048ビットRSAキー

他にも所有者とか発行者とかありますが、終了日を確認しておけば間違って古い証明書を扱うことも起こらないでしょう。

openssl

keytool が使えない場合は openssl コマンドでも代用できます。

$ openssl pkcs12 -in hoge.p12 -clcerts -nokeys

秘密鍵をわざわざ参照する必要はないので nokeys のオプションは付けておきたいですね。

結果の一部を抜粋します。

MAC verified OK
Bag Attributes
friendlyName: XXXXXXXXXX
localKeyID: XXXXXXXXXX
subject=XXXXXXXXXX
—–BEGIN CERTIFICATE—–
XXXXXXXXXX
—–END CERTIFICATE—–

有効期限がわからないので、一度ファイルに出力しましょう。

$ openssl pkcs12 -in hoge.p12 -clcerts -nokeys -out tmp.crt

この tmp.crt の中身を確認します。

Certificate.Signature.Validity の項目を確認すれば、証明書の有効な期間がわかりますね。

$ openssl x509 -noout -text -in tmp.crt

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            XXXXXXXXXX
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: XXXXXXXXXX
        Validity
            Not Before: Feb 19 00:00:00 2023 GMT
            Not After : Mar 30 00:00:00 2025 GMT

まとめ

p12(pkcs12)形式の証明書の中身を確認する方法を紹介してきました。

証明書とパスワードを発行した人を信用していないわけではないですが、設定後に問題が発生するよりは事前にチェックしておいた方がいいですよね。

openssl コマンド実行時に、以下のようなパスワード間違いのエラーが出ることだってあるわけですから。

Mac verify error: invalid password?

keytool も password was incorrect ですが、自分の Java の環境が悪いのかなっと思って複数バージョンで試しちゃいました・・・。

java.io.IOException: keystore password was incorrect
	at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2059)
	at java.security.KeyStore.load(KeyStore.java:1445)
	at sun.security.tools.keytool.Main.doCommands(Main.java:926)
	at sun.security.tools.keytool.Main.run(Main.java:366)
	at sun.security.tools.keytool.Main.main(Main.java:359)
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました