8.

PFX / P12 (.pfx / .p12) とは ― PKCS#12 で証明書と秘密鍵を一括管理

編集
この記事の要点
  • PFX / P12 (.pfx / .p12)PKCS#12 規格、証明書 + 秘密鍵 + チェーンをパスワード保護で 1 ファイルにまとめた形式
  • Windows / IIS / Azure / コード署名 (signtool) で標準。Apple iOS / macOS の証明書管理でも使用
  • openssl pkcs12 -export -out out.pfx -inkey priv.pem -in cert.pem で PEM → PFX
  • パスワード暗号化方式が古い (RC2 / 3DES) と Windows と OpenSSL で互換性問題が起きる → -keypbe AES-256-CBC -certpbe AES-256-CBC 推奨
  • 取り扱い注意: 秘密鍵を含むため、漏洩したら即証明書失効

要点

  • PFX / P12PKCS#12 規格に基づくバイナリ証明書バンドル。証明書 + 中間 CA + 秘密鍵を 1 ファイルにまとめ、パスワードで暗号化する。
  • Windows 系 (IIS、Authenticode コード署名、Azure App Service) で標準。macOS の Keychain も直接インポート可。
  • 拡張子 .pfx (Microsoft 系) と .p12 (PKCS#12 由来) は同じ形式の別名。
  • OpenSSL の pkcs12 サブコマンドで PEM ⇔ PFX を相互変換できる。

概要

PEM や CRT 単体では証明書と秘密鍵を別ファイルで扱う必要があり、配布や移行で「片方だけ送ってしまった」「鍵が漏れた」といった事故が起きやすい。PKCS#12 (RFC 7292) はこの問題を解決するために、X.509 証明書チェーンと秘密鍵を一括バイナリ化し、パスフレーズで暗号化する形式として定められた。

Microsoft が早期から PFX として採用したため Windows ファミリーでは事実上の標準で、IIS の証明書バインドや Authenticode 署名鍵 (signtool/f 引数) はほぼ PFX を要求する。Java の PKCS12 キーストアや Kubernetes Ingress Controller の一部、Citrix / F5 アプライアンスでも採用される。

内部構造

PKCS#12 は ASN.1 構造で、外側に MAC (Message Authentication Code) を伴う「AuthSafe」があり、その中に複数の SafeBag (CertBag / KeyBag / ShroudedKeyBag など) が並ぶ。秘密鍵を保持する KeyBag は PBE (Password-Based Encryption)で暗号化される。歴史的に使われた pbeWithSHAAnd3-KeyTripleDES-CBC + RC2 のレガシー暗号と、近年の AES-256-CBC + PBKDF2 の 2 系統があり、古い OS (Windows Server 2008 R2 等) との互換性で問題が起きやすい。

ファイル全体は冒頭から DER バイナリで、テキストで読むことはできない。中身を確認するには OpenSSL の -info オプションを使うのが定番。

主な用途

  • IIS への証明書インストール: 「証明書のインポート」で .pfx を選び、パスワードを入れてバインドするのが基本フロー。
  • コード署名証明書の保管: EV コード署名以外は PFX で配布されることが多い。signtool sign /f mycode.pfx
  • ロードバランサ / WAF へのアップロード: Azure Application Gateway、AWS ALB の一部、F5 BIG-IP など。
  • S/MIME メール鍵の個人エクスポート: Outlook や Apple Mail の鍵バックアップ。

関連形式との比較

  • PEM: テキスト、複数ファイルに分けがち、パスワード保護は鍵のみ任意。
  • JKS (Java KeyStore): Java 独自バイナリ。JDK 9 以降は PKCS12 がデフォルトに変更され、JKS は徐々に縮小。
  • P7B (.p7b): 証明書チェーンのみで秘密鍵は含まない。PKCS#12 と混同しがちだが用途が異なる。
  • BKS (Bouncy Castle): Android 旧版で使われた独自形式。最近はあまり見ない。

コマンド・ツール

# PEM 群 (証明書 + 秘密鍵 + 中間 CA) を PFX にまとめる
openssl pkcs12 -export \
  -inkey   key.pem \
  -in      cert.pem \
  -certfile chain.pem \
  -name    "myserver" \
  -out     bundle.pfx

# PFX を分解 (証明書と鍵を別 PEM へ)
openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in bundle.pfx -nocerts -nodes  -out key.pem

# 中身の確認 (パスフレーズ要求)
openssl pkcs12 -in bundle.pfx -info -nodes

# Windows (PowerShell) で証明書ストアへ
Import-PfxCertificate -FilePath bundle.pfx `
  -CertStoreLocation Cert:\LocalMachine\My `
  -Password (Read-Host -AsSecureString)

# Java keystore (PKCS12) に変換
keytool -importkeystore -srckeystore bundle.pfx \
        -srcstoretype PKCS12 \
        -destkeystore mykeystore.p12 \
        -deststoretype PKCS12

注意点

  • パスフレーズの強度: PFX は鍵入りなので漏洩リスクが大きい。8 文字未満や弱い辞書語は避け、配布もパスフレーズと別経路で。
  • レガシー暗号互換性: OpenSSL 3.x はデフォルト暗号が AES に変わり、古い Windows / Java で読めない事故が頻発。互換性が要るときは -legacy-keypbe / -certpbe を明示。
  • Authenticode の HSM 化: 2023 年以降の OV/EV コード署名は PFX 配布が原則禁止になり、トークン or クラウド HSM に移行。新規調達時は要確認。
  • エクスポート可能フラグ: Windows で「秘密キーをエクスポート可能にする」を忘れると、後で PFX に戻せず鍵をロストする。
  • バックアップ: PFX は単独でサーバ復旧の鍵そのもの。漏洩対策とロスト対策を両立する保管設計が必要。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ISO(.iso)
  2. IMG(.img)
  3. VHD / VHDX(.vhd / .vhdx)
  4. QCOW2(.qcow2)
  5. OVA / OVF(.ova / .ovf)
  6. PEM(.pem)
  7. CRT / CER / DER(.crt / .cer / .der)
  8. PFX / P12(.pfx / .p12)
  9. PCAP / PCAPNG(.pcap / .pcapng)
  10. DMP / コアダンプ(.dmp / .core)

最近更新/作成されたページ