【问题标题】:Microsoft CA: Where does user private key come from?Microsoft CA:用户私钥从何而来?
【发布时间】:2011-01-21 23:24:19
【问题描述】:

抱歉,这不完全是编程问题,但也很有趣。 所以我的问题是:用户私钥从何而来? 无论是在 CA 中生成的证书中的密钥对与公钥一起出现,还是在客户端操作系统中生成,当只有指纹、公钥等来自 CA 时?

谢谢你的到来。

【问题讨论】:

  • 如果您觉得有必要以“抱歉,这不完全是编程问题”来开始一个关于 SO 的问题,那么您可能需要重新考虑......
  • 这和微软有什么关系?

标签: security authentication certificate


【解决方案1】:

私钥和公钥在数学上是相关联的。生成过程让你bothalways;一种称为私有(您确保其安全),一种称为公共(您可以将其提供给任何人) 该链接很难找到,因此了解其中一个并不能帮助找到另一个。

当您签署某项内容时,您需要您的私钥。当人们想要检查签名时,他们需要您的公钥。

当你加密某些东西时,你需要接收者的公钥。只有他才能解密,因为这需要私钥。

因此,一开始,您将两者都保存在一个文件中,您可以提取公钥进行分发(如果您希望其他人信任它,也可以将其放入证书中)。

编辑:我开始了评论,但太长了,所以在这里:

每个安全库都有自己的工具,可以实现必要的数学运算来构建正确的公共/私有对。 OpenSSL 带有一个命令行工具,您可以使用它创建自己的 CA、创建证书请求和证书。 Windows Server 具有具有类似功能的证书服务。 .NET 有 sn(sn = 强名称)工具,它使用公钥/私钥(用于签署 DLL)创建文件(扩展名为 snk)。 Visual Studio 有一个用于创建 snk 文件的 GUI 前端。在 Java 世界(如果我没记错的话,一个叫做密钥库)和 Mac OS X 上当然有工具。 当您自己创建证书时,它们被称为“自签名”并且不受世界其他地方的信任。

【讨论】:

  • 非常感谢,但我还是不明白:我从哪里得到这个密钥对?无论是来自 CA 服务器,还是用户创建时由用户操作系统或 DC 生成。换句话说,我是否默认从我的操作系统获取这对,而不提交来自 CA 的证书查询?
【解决方案2】:

密钥通常(并且应该)来自客户端,因此私钥可以保密。在某些情况下,您提供了 PFX 文件,但不相信没有其他人可以访问私钥。

谈到 Windows,有所谓的Providers 可以生成密钥(除了其他加密操作)。有old (CSP/CAPI) 版本和newer (CNG) 版本。除了在机器和硬盘上生成和存储密钥的能力之外,还有一些允许将密钥存储在智能卡或 USB 令牌甚至硬件安全模块 (HSM) 上的能力 - 第 3 方提供实现也适用于提供者。

除了内置的提供程序之外,还有其他可以生成密钥的工具和软件,例如 OpenSSL。

那么在生成密钥之后会发生什么 - 只需完成故事即可。

证书请求(基本上是公钥和一些属性,如主题名称等)使用私钥签名并提交给证书颁发机构 (CA)。 CA 使用自己的证书(连同私钥)从请求中签署属性和公钥。结果称为证书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2015-08-06
    • 2014-11-30
    相关资源
    最近更新 更多