概要

取得した証明書をお客様環境でも利用するので渡したらPFX形式でも欲しいとのことで、PFXから秘密鍵とかを取り出した経験はあるが逆はなかったので調べてみた

PFXってなに

AWSのACMや、Linux環境で使用する場合に使うpem形式の場合、証明書は下記の複数ファイルで構成されている

  • 秘密鍵
  • 証明書
  • 中間証明書

    PFXファイルは上記のファイルを一つにまとめたもので、Windows環境でつかわれている。 PKCS#12 とかいう名前で呼ばれていることもある。

pemからPFXを作成


OpenSSLのコマンドでpem形式のファイル群からPFXを作成することができる。

必要なもの

  • pem形式の各ファイル
    • 秘密鍵
    • 証明書
    • 中間証明書
  • パスフレーズ
    • 秘密鍵にパスフレーズがかかっている場合そのパスフレーズ
  • PFXに設定するパスフレーズ
    • 事前に考えておく
    • 利用環境でのポリシー(文字数、文字種)があれば考慮する

コマンド

openssl pkcs12 -export -inkey 秘密鍵ファイル名 -certfile 中間証明書ファイル名 -in 証明書ファイル名 -out 出力先ファイル名

実行例

$ openssl pkcs12 -export -inkey hogehoge.key -certfile chuukan.crt -in hogehoge.crt -out hogehoge.pfx
Enter pass phrase for hogehoge.key: (秘密鍵のパスフレーズを入力)
Enter Export Password:(PFXに設定するパスフレーズを入力)
Verifying - Enter Export Password:(確認で同じパスフレーズを入力)

確認

作成したPFXファイルの中身を確認

$ openssl pkcs12 -info -in hogehoge.pfx 
Enter Import Password:(PFXのパスフレーズを入力)
MAC: sha256, Iteration 2048
MAC length: 32, salt length: 8
PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256
Certificate bag
Bag Attributes
    localKeyID: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
subject=C=JP, ST=Tokyo, L=Minato-ku, O=Hogehoge Co., Ltd., CN=*.hogehoge.jp
issuer=C=BE, O=Foobar CA
-----BEGIN CERTIFICATE-----
(省略)
-----END CERTIFICATE-----
Certificate bag
Bag Attributes: <No Attributes>
subject=C=BE, O=Foobar CA 2024
issuer=OU=Foobar Root CA - R3, O=Foobar, CN=Foobar
-----BEGIN CERTIFICATE-----
(省略)
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256
Bag Attributes
    localKeyID: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
Key Attributes: <No Attributes>
Enter PEM pass phrase:(秘密鍵のパスフレーズを入力)
Verifying - Enter PEM pass phrase:(秘密鍵のパスフレーズを入力)
-----BEGIN ENCRYPTED PRIVATE KEY-----
(省略)
-----END ENCRYPTED PRIVATE KEY-----