即真的只有我有私钥,还是我必须相信 StartSSL(或任何其他提供商)不会自己存储它?
StartSSL 在哪里生成证书,服务器端还是客户端?
我必须承认我没有尝试过 StartSSL,但它的常见问题解答建议使用多种密钥生成模式来申请证书。这可能取决于证书的类型。
“向导”模式(FAQ#43)在服务器端可视地生成密钥对。尽管 FAQ#44 向您保证他们不会保留它,但您有权怀疑。这不是很好的做法,但这可能是为了方便。
CA 通常使用的替代方法包括在用户机器上生成密钥对并仅提交公钥作为证书签名请求 (CSR) 的一部分。许多工具可让您保存 CSR。例如,这也可以使用 OpenSSL 手动完成。此外,还可以在浏览器中生成密钥对(不会将私钥发送出去)和 CSR(或等效的,例如 SPKAC 或 CMRF)。
其他一些问题的措辞有点混乱,但表明他们可以接受 CSR 或 SPKAC 请求。
FAQ#33说“我创建了一个私钥,而不是为 IIS 服务器提交我的证书请求 (CSR) ”。反对创建私钥来提交 CSR 有点令人困惑,因为无论如何您都会创建私钥来创建 CSR。从答案看来,您的私钥必须在某个阶段被 StartSSL 服务器知道(“登录到 StartSSL™ 控制面板并单击“工具箱”选项卡。选择“创建 PFX 文件”并提交加密的私钥、证书和您的密钥密码。 ”),这不是很好的做法。
但是,FAQ#51“我可以为客户端证书 (S/MIME) 提交证书请求 (CSR) 吗? ”似乎表明在 StartSSL 不需要知道私钥的情况下也可以这样做。(“私钥和证书请求是通过使用标签(Firefox)或activeX控件(Internet Explorer)生成的”。)他们在回答中施加的限制有些人为。原则上没有理由将一种应用模式与生成的证书的使用目的相关联。
在<keygen />Firefox 中生成私钥和公钥,这会向服务器发送一个 SPKAC 请求(其中包含公钥但不包含私钥,大致相当于 CSR)。IE ActiveX 控件实际上可以发送 CSR(以 PKCS#10 格式)。使用这两种浏览器内模式中的任何一种,当您取回证书时,它会根据生成的私钥导入,然后您可以根据需要在 PKCS#12 (.p12/.pfx) 包中一起导出。这就是为什么在您用于应用程序的浏览器中导入生成的证书很重要的原因。(FF 没有显示它拥有等待证书的密钥对,它们只有在您打开证书时才会在选项中可见。)
编辑:
关于您的评论之一:
为什么人们再次信任 SSL 而不是 OpenPGP?
像许多人一样,您混淆了 PKI 和 SSL/TLS。
我自己并不是 PKI 模型的忠实拥护者,因为它的缺陷,但认为让每个人都使用 Web-of-Trust 模型(a la PGP)就足以改善事情有点坦率。
通过使用 WoT 模型,您可能确实拥有一个不那么集中的系统(这听起来不错),但这会使整个系统更加复杂,并且更加难以思考,特别是对于“只想让它工作”的用户。困难主要来自这样一个事实,即你的 WoT 中的每个节点都需要在两个不同的事情上受到信任:(a)他们是谁,(b)他们验证下一个节点是谁的能力。
相信某人的身份是一回事,但相信他们做某事的能力(训练和正直)打开了一个完全不同的维度。如果您认为大型 CA 的工作是验证其他人的身份,有时可能很难做到这一点,期望您的 WoT 的所有成员都这样做似乎相当雄心勃勃。即使您想将某些能力限制为某些成员,对这些规则进行建模本身也很困难。
我使用 StartSSL,只要我想要一个新证书,我就会生成一个证书签名请求 (CSR):
openssl req -out example.com-2014.csr -new -newkey rsa:2048 -nodes -keyout example.com-2014.key
这也会生成一个私钥。
然后在 StartSSL 的控制面板中跳过生成私钥(标记为“Skip »»”的按钮)并在下一页提交生成的 CSR。StartSSL 将从 CSR 获取公钥(并忽略所有其他信息)。
使用此过程 StartSSL 将不会获得私钥,因为它不是 CSR 的一部分。
它是服务器端的,你不能 100% 保证他们不存储你的私钥。就这么简单,你必须信任他们,如果你不信任他们,你就必须去别处,但那里也存在问题。