x509 证书如何知道链接到私钥?
How is a x509 certificate aware of being linked to a private key?
我不明白证书如何知道链接到私钥。例如,在 windows 下,当您单击来自智能卡的证书时,它显示 "You have a private key that corresponds to this certificate"。证书如何知道这一点?我一直在阅读 RFC5280,但是我没有看到 X509 证书中的任何字段指定证书是否连接到私钥。我错过了什么?
这取决于操作系统 and/or 使用加密库。在 Windows 的情况下,证书存储在 Certificate Store 中。证书存储支持存储附加属性,其中可以提供 CSP 和密钥容器信息。当您在商店中打开证书时,MMC 会读取附加的证书属性并确定是否存在关联的私钥。
一般来说,任何public密钥都包含在其私钥中。无论操作系统、存储机制或库如何,只要给定一个 X.509 证书和一个私钥,就可以从私钥中提取 public 键值并与 public 中的键值进行比较证书。如果它们匹配,则私钥属于证书。
例如,一个RSA私钥由
组成
- 公共指数
- 模数
- Prime1
- Prime2
- 指数 1 [可选]
- 指数 2 [可选]
- 系数[可选]
- PrivateExponent [可选]
前两个 PublicExponent 和 Modulus 构成 public 密钥并存储在 X.509 证书中。 (以上可选字段可以从前4个开始计算,但通常包含在私钥中,因为计算它们需要很多CPU的权力)
对于您的特定示例,MMC 证书管理单元查询 Crypto API (CAPI) 以获取已安装的证书。 CAPI 使用加密服务提供程序 (CSP) 模块,除其他外,它可以提供证书存储。作为 CSP 证书存储规范的一部分,该存储为每个存储的证书提供了一个属性 "PP_Container"。此属性告诉 CAPI 保存匹配私钥(如果有)的 CSP 容器的名称。 "separation" 允许将私钥存储在智能卡或硬件安全模块上,而证书存储在 Windows 系统本身。
我不明白证书如何知道链接到私钥。例如,在 windows 下,当您单击来自智能卡的证书时,它显示 "You have a private key that corresponds to this certificate"。证书如何知道这一点?我一直在阅读 RFC5280,但是我没有看到 X509 证书中的任何字段指定证书是否连接到私钥。我错过了什么?
这取决于操作系统 and/or 使用加密库。在 Windows 的情况下,证书存储在 Certificate Store 中。证书存储支持存储附加属性,其中可以提供 CSP 和密钥容器信息。当您在商店中打开证书时,MMC 会读取附加的证书属性并确定是否存在关联的私钥。
一般来说,任何public密钥都包含在其私钥中。无论操作系统、存储机制或库如何,只要给定一个 X.509 证书和一个私钥,就可以从私钥中提取 public 键值并与 public 中的键值进行比较证书。如果它们匹配,则私钥属于证书。
例如,一个RSA私钥由
组成- 公共指数
- 模数
- Prime1
- Prime2
- 指数 1 [可选]
- 指数 2 [可选]
- 系数[可选]
- PrivateExponent [可选]
前两个 PublicExponent 和 Modulus 构成 public 密钥并存储在 X.509 证书中。 (以上可选字段可以从前4个开始计算,但通常包含在私钥中,因为计算它们需要很多CPU的权力)
对于您的特定示例,MMC 证书管理单元查询 Crypto API (CAPI) 以获取已安装的证书。 CAPI 使用加密服务提供程序 (CSP) 模块,除其他外,它可以提供证书存储。作为 CSP 证书存储规范的一部分,该存储为每个存储的证书提供了一个属性 "PP_Container"。此属性告诉 CAPI 保存匹配私钥(如果有)的 CSP 容器的名称。 "separation" 允许将私钥存储在智能卡或硬件安全模块上,而证书存储在 Windows 系统本身。