如何在windows中导入私钥

信息安全 tls 视窗 证书 公钥基础设施
2021-08-19 17:33:43

假设我有一个 X.509 证书和一个与之对应的私钥。我可以很容易地将 X.509 证书导入 Windows,但是私钥呢?

我可以通过将证书和私钥都转换为“个人信息交换(PKCS #12)”文件并导入它来做到这一点的唯一方法吗?

也许这个问题在 superuser.com 上会更好?不管怎样,谢谢!

4个回答

您的问题的答案是Yes您必须将 X.509 转换为 PFX 并导入。Windows 中没有单独的密钥库。

您可以使用以下命令使用 OpenSSL 转换您的证书:

openssl pkcs12 -export -out cert.pfx -inkey private.key -in cert.crt -certfile CACert.crt

在 Windows 中,您可以“自己”拥有私钥。以编程方式,您使用CryptAquireContext()“按名称”访问密钥。CryptoAPI 包含许多功能,允许您独立于证书导入和使用密钥。

但是,没有用于处理私钥的现有图形界面或文件格式,并且应用程序不按名称使用密钥。他们使用证书在 Windows 中,证书存储在“其他地方”,但“我的”存储中的每个证书都可以选择包含指向相应私钥的链接(该链接实际上是 CSP 名称,以及该 CSP 中容器的名称)。这映射到各种协议中的预期。例如,在 SSL 中,当服务器请求使用私钥进行客户端身份验证时,它实际上要求提供证书:客户端必须出示证书,然后才证明它也可以访问相应的私钥。

因此,在实践中,证书和密钥“共同存在”,密钥只能通过证书获得。证书及其私钥一起传输,这意味着 PKCS#12 文件(又名“PFX”)。

PKCS12(*.p12 或 *.pfx)绝对是最简单的方法。有很多常用工具可以将密钥对和证书组合到 p12 中。我最喜欢的是 OpenSSL,因为它适用于我曾经需要使用它的所有操作系统,而且它相当符合标准。尽管里程会根据您的密钥对和证书当前的存储方式而有所不同,但这里有很多关于如何存储的页面。

此外 - 如果设置允许密钥导出,大多数具有导出功能的设备将提供 PKCS12 生成选项 - 它或多或少是大多数启用 PKI 的应用程序的标准,以及这不是规范的少数情况(例如 Java),有通常仍然是转换或导出功能。

请注意 - 如果您的密钥位于硬件令牌或模块上,您仍然可以从 Microsoft Cert Store 引用它 - 您只需要导入证书并指示 Microsoft 密钥的存储位置...为此,您需要按照设备的说明更新证书存储。

当您将 Pub/priv 密钥对用作客户端证书时,应使用 PKCS12 (.p12/pfx) 将其导入 Windows。这就是这里的全部......

如果您将它导入到 IIS 中,那会有些不同,但这似乎不是您正在做的事情。以防万一——IIS 要求的证书格式与 X.509 稍有不同;它需要 PKCS7 而不是通用 X.509,因为 PKCS7 包含签名者证书,而 X.509 只有已签名的个人证书。这与签名者证书包含在 [trusted] 证书包中的典型 Apache 实现不同。