对不起,这不是编程问题,但也有兴趣。 所以我的问题是:用户私钥来自哪里? 它是否与CA中生成的证书中的公钥一起出现密钥对,还是在客户端操作系统中生成,只有拇指打印,公钥等来自CA?
谢谢你。
答案 0 :(得分:1)
私钥和公钥在数学上是相互关联的。生成过程会让您 ,始终;一个被称为私人(你保持安全),一个被称为公共(你可以把它给任何人) 链接很难找到,因此了解其中一个链接无助于找到另一个链接。
当您签名时,您需要私钥。当人们想要检查签名时,他们需要您的公钥。
加密某些内容时,您需要收件人的公钥。只有他才能解密,因为这需要私钥。
因此,在开始时,您同时拥有一个文件,并且可以提取公钥以进行分发(或者如果您希望其他人信任它,则将其放入证书中)。
编辑:我开始发表评论但是时间太长了,所以这就是:
每个安全库都有自己的工具,可以实现构建正确的公共/私有对所需的数学运算。 OpenSSL附带一个命令行工具,您可以使用该工具创建自己的CA,创建证书请求和证书。 Windows Server具有具有类似功能的证书服务。 .NET有sn(sn =强名称)工具,可以使用公钥/私钥(用于签署DLL)创建文件(带有snk扩展名)。 Visual Studio具有用于创建snk文件的GUI前端。当然,Java世界中有一些工具(如果我没有记错,一个叫做密钥库)和Mac OS X. 当您自己创建证书时,它们被称为“自签名”,并且不被世界其他地方所信任。
答案 1 :(得分:0)
密钥通常(并且应该)来自客户端,因此私钥可以保密。在某些情况下,您获得了 PFX 文件,但不相信其他人可以访问私钥。
谈到 Windows,有所谓的 Providers
可以生成密钥(除了其他加密操作)。有 old (CSP/CAPI) 版本和 newer (CNG) 版本。除了在机器和硬盘驱动器上生成和存储密钥的能力之外,还有一些允许将密钥存储在智能卡或例如 USB 令牌甚至硬件安全模块 (HSM) 上 - 第 3 方提供实现供应商也一样。
除了内置的提供程序之外,还有其他可以生成密钥的工具和软件,例如 OpenSSL。
那么在生成密钥之后会发生什么 - 只需完成故事即可。
证书请求(基本上是公钥和一些属性,如主题名称等)用私钥签名并提交给证书颁发机构 (CA)。 CA 使用自己的证书(连同私钥)从请求中签署属性和公钥。结果称为证书。