Security Microsoft CA:用户私钥来自哪里?

Security Microsoft CA:用户私钥来自哪里?,security,authentication,certificate,Security,Authentication,Certificate,很抱歉,这不完全是编程问题,但也很有趣。 所以我的问题是:用户私钥来自哪里? 它是与CA中生成的证书中的公钥一起出现在密钥对中,还是在客户端操作系统中生成,而CA中只出现指纹、公钥等 感谢您的介绍。私钥和公钥在数学上是相互关联的。生成过程使您两者都,始终;一个叫私人(你保证安全),一个叫公共(你可以给任何人) 这种联系很难找到,因此了解其中一种联系无助于找到另一种联系 当你签名时,你需要你的私钥。当人们想要检查签名时,他们需要您的公钥 当您加密某些内容时,需要收件人的公钥。只有他才能解密,因为这

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


感谢您的介绍。

私钥和公钥在数学上是相互关联的。生成过程使您两者都始终;一个叫私人(你保证安全),一个叫公共(你可以给任何人) 这种联系很难找到,因此了解其中一种联系无助于找到另一种联系

当你签名时,你需要你的私钥。当人们想要检查签名时,他们需要您的公钥

当您加密某些内容时,需要收件人的公钥。只有他才能解密,因为这需要私钥

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

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

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

密钥通常(而且应该)来自客户端,因此私钥可以保持私钥。在某些情况下,您会获得提供的PFX文件,但不相信其他人无权访问私钥

说到Windows,有所谓的
提供程序
,可以生成密钥(除了其他加密操作之外)。有一个版本和一个版本。除了在机器及其硬盘上生成和存储密钥的功能外,还有一些功能允许将密钥存储在智能卡上,例如USB令牌,甚至硬件安全模块(HSM)-第三方也为提供商提供实现

除了内置的提供者之外,还有许多其他工具和软件可以生成像OpenSSL这样的密钥

那么,在生成密钥之后会发生什么呢?只需完成这个故事


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

如果您觉得有必要以“对不起,这不完全是编程问题”开始提问,那么您可能需要重新思考……这与Microsoft有什么关系?非常感谢,但我仍然不明白:我从哪里获得这对密钥?无论是来自CA服务器,还是在用户创建时由用户OS或DC生成。换句话说,我是否默认地从我的操作系统中获取这一对,而不从CA提交证书查询?