PKCS #12 文件是一个 PFX 结构:经过认证的安全内容中装有若干安全包(keyBag、pkcs8ShroudedKeyBag、certBag、crlBag、secretBag),这些安全包带有友好名称和本地密钥 ID,此外还有一个从密码派生的完整性 MAC。RFC 9579(2024年)新增了 PBMAC1,用 PBKDF2 取代了旧的 PKCS #12 专用 MAC 密钥派生方式。
兼容性取决于默认算法。OpenSSL 3.6.5 的 pkcs12 -export 对证书和密钥都使用 AES-256-CBC 加 PBKDF2(2,048 次迭代),MAC 采用 HMAC-SHA-256;加上 -legacy 时,证书用 RC2-40、密钥用 3DES、MAC 用 HMAC-SHA-1,较旧版本的 Windows、macOS 和 Java 需要这种组合。从 JDK 9 起,Java 的默认密钥库类型就是 PKCS #12。
“mac verify failure”之类的错误通常意味着密码错误;“unsupported algorithm RC2-40-CBC”则表示在未加载 OpenSSL legacy 提供程序的情况下打开了旧格式文件。PFX 查看器可以在本地列出安全包和算法,而无需导出密钥。