如果我们使私钥可导出(使用 makecert 中的 -pe 选项),那么理论上我们同时拥有可导出的私钥和公钥(证书中的公钥)——可以将其传输或导入另一台机器。
所以,我的问题是,为什么我们仍然需要创建 .pfx 文件(密钥交换文件,其中包含私钥和公钥)——让私钥在证书中可导出可以做任何我们想做的事情?任何场景 pfx 文件都可以涵盖哪些使证书中的私钥可导出无法实现?
提前谢谢,乔治
如果我们使私钥可导出(使用 makecert 中的 -pe 选项),那么理论上我们同时拥有可导出的私钥和公钥(证书中的公钥)——可以将其传输或导入另一台机器。
所以,我的问题是,为什么我们仍然需要创建 .pfx 文件(密钥交换文件,其中包含私钥和公钥)——让私钥在证书中可导出可以做任何我们想做的事情?任何场景 pfx 文件都可以涵盖哪些使证书中的私钥可导出无法实现?
提前谢谢,乔治
您是否发现了一个 makecert 命令行会生成一个包含私钥的证书文件?我从来没有。我看到有人提到有一个版本的 makecert 可以生成 .pfx 文件,但也从未见过。
这意味着如果您想要一个私钥文件,您最多可以使用 makecert 创建两个文件。一个用于证书,一个用于私钥。您可以将这两个文件复制到另一台计算机并使用 makecert 导入它们。
.pfx 证书格式的优点是您可以将证书和私钥这两个文件合二为一。这更方便,也意味着您可以将文件与 .Net X509Certificate2 类一起用于 SslStream。
您的 pfx 文件可以受密码保护,这将增加一层保护
问题是,X509 证书标准(证书)不包括私钥。证书包含主题公钥信息(又名公钥)和关于私钥持有者的信息,但标准不支持包含私钥。这是 PKI 的基本理念——证书是您与世界共享的公共信息,私钥是您非常安全地持有的东西。
使私钥可在任何机制(例如,makecert)中导出,意味着您告诉该产品可以导出密钥。它没有指定您将用来存储它的文件格式。pfx 文件是存储私钥的一种方式 - 它使用PKCS 12 标准。Java Key Stores (*.jks) 是做同样事情的另一种方式。大多数商业支持的标准都有类似的共同特征——它们通过加密来保护私钥。可以使用密码解锁加密。他们将私钥与描述它的证书结合起来。
如果要构建 PFX 文件,您应该同时拥有 x509 证书公钥和私钥文件,您可以使用 makecert 命令生成它们。PFX 可以使用 PVk2PFX 命令生成,您可以在 Microsoft SDK 安装目录中找到该命令。