拡張子pfxとp12(pkcs12)の違いについて

結論から言うと現在では違いがない模様。


こんな話題をするのはX.509証明書の拡張子.pfxとはなんぞやと思い調べていると、調べれば調べるほど、どんどん混乱していったからです。

というのも、


最初に確認した、現時点のWikipediaのX.509のページには

PFX (Personal inFormation eXchange) 標準から発展した PKCS #12 は、単一ファイルでの公開鍵と私有鍵の交換に使われる。

とあり、


一方、WikipediaのPKCSのページには

PFXは PKCS#12 の旧称である。

とあり、


また、RSA Laboratories - PKCS #12 : Personal Information Exchange Syntax Standardにある、PKCS#12のマニュアルの用語定義には

PFX: The top-level exchange PDU defined in this standard.
Protocol Data Unit (PDU): A sequence of bits in machine-independent format constituting a message in a protocol.

となっていて、つまりpkcs#12のマニュアルであってもpfxという用語が出てきていると。


さらに、Windowsの証明書のエクスポート画面は以下のようになっている。


上記のような状況でなんとなく分かったような分からないような微妙な気持ち悪さを感じていたのです。



が、
opensslの古いFAQのOpenSSL PKCS#12 Program FAQ v1.77を確認することで、疑問が解消されました。


Microsoftはファイルの中身がPKCS#12形式であってもPFXファイルと言っている。
・古いNetscapeブラウザでは、ファイルの中身が古いpfx規約で作られたものであってもPKCS#12と主張していたことがある。
pkcs#12のマニュアルに出てくるpfxは、あまり深い意味はなく、MSの言うPFX(つまりpkcs#12)形式で作られたデータのことを指したい時に使用している(よく見ていないけども、おそらく)


pfx仕様を実装したソースコードは上記FAQにあるようです。
仕様自体は相変わらずどこにあるか見つかっていないのですが、とりあえずはこれだけ分かれば十分かなぁ。
FAQにもありますが、pfxについてはあまり知らない方がむしろ良さそうですね。