【问题标题】:why do we need the pfx (key exchange) file?为什么我们需要 pfx(密钥交换)文件?
【发布时间】:2010-06-09 15:24:58
【问题描述】:

如果我们使私钥可导出(使用 makecert 中的 -pe 选项),那么理论上我们同时拥有可导出的私钥和公钥(证书中的公钥)——可以将其转移或导入到另一台机器.

所以,我的问题是,为什么我们仍然需要创建 .pfx 文件(密钥交换文件,其中包含私钥和公钥)——让私钥在证书中可导出可以做任何我们想做的事情? pfx 文件可以涵盖哪些场景无法在证书中导出私钥?

提前致谢, 乔治

【问题讨论】:

    标签: certificate pki


    【解决方案1】:

    是否有一个 makecert 命令行可以生成包含私钥的证书文件?我从来没有。我看到有人提到有一个版本的 makecert 可以生成 .pfx 文件,但也从未见过。

    这意味着如果你想要一个私钥文件,你最多可以使用 makecert 创建两个文件。一个用于证书,一个用于私钥。您可以将这两个文件复制到另一台计算机并使用 makecert 导入它们。

    .pfx 证书格式的优点是可以将证书和私钥这两个文件合二为一。这更方便,也意味着您可以将文件与 .Net X509Certificate2 类一起用于 SslStream。

    【讨论】:

    • “您是否找到了一个 makecert 命令行,可以生成包含私钥的证书文件?我从来没有。” -- 我的意思是 makecert -pe。有没有cmets?
    • -pe 命令不会在证书文件中包含私钥。您可以使用 -pe 自行检查,将证书文件复制到另一台计算机,导入它,您将看到没有私钥。
    • 我很困惑。 MSDN 中的 -pe 表示它用于使私钥可导出。你能帮忙澄清一下吗?
    • 这里是 MSDN 所说,“-pe 将生成的私钥标记为可导出。这允许私钥包含在证书中。” msdn.microsoft.com/en-us/library/bfsktky3(VS.80).aspx
    • 但只有在您使用 certmgr 导入然后导出之后。你很容易验证,试试我上面提到的测试。
    【解决方案2】:

    您的 pfx 文件可以受密码保护,这将增加一层保护

    【讨论】:

    • 感谢 Sébastien,我认为在证书中,私钥也是加密的。我看不出什么场景 pfx 文件比具有可导出私钥的证书更好且必须的一个强有力的理由。
    【解决方案3】:

    问题是,X509 Certificate standard(证书)不包含私钥。证书包含主题公钥信息(又名公钥)和关于私钥持有者的信息,但标准不支持包含私钥。这是 PKI 的基本理念——证书是您与世界共享的公共信息,私钥是您非常安全地持有的东西。

    使私钥可在任何机制中导出(例如,makecert),意味着您告诉该产品可以导出密钥。它没有指定用于存储它的文件格式。 pfx 文件是存储私钥的一种方式 - 它使用PKCS 12 standard。 Java Key Stores (*.jks) 是做同样事情的另一种方式。大多数商业支持的标准都有类似的共同特征——它们通过加密来保护私钥。可以使用密码解锁加密。他们将私钥与描述它的证书结合起来。

    【讨论】:

    • 从您的评论中,我了解到 PFX 不能在 PKI 环境中使用?我对吗?因为您不想让您的私钥在受密码保护的情况下四处乱跳?
    【解决方案4】:

    如果你想构建一个 PFX 文件,你应该同时拥有 x509 证书公钥和私钥文件,你可以使用 makecert 命令生成它们。 PFX 可以使用 PVk2PFX 命令生成,您可以在 Microsoft SDK 安装目录中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      相关资源
      最近更新 更多