0

我需要创建一个客户端库来通过 HTTPS 与单个服务(比如 google.com)通信。我希望图书馆附带验证服务所需的所有数据(证书或密钥)。

我很困惑这些数据应该是什么。它应该是签署 google.com 证书的证书颁发机构的公钥吗?还是应该是 google.com 的公钥?

在我见过的所有示例中,证书颁发机构的公钥都用于验证连接。但这似乎没有必要。如果我的图书馆只与 google.com 对话,我是否可以通过安全通道(浏览器)获取并保存 google.com 公钥,然后直接使用此密钥建立经过身份验证的连接,而无需再次使用 CA 密钥?

4

1 回答 1

2

您需要使用服务器的密钥对,而不是 CA。建立 HTTPS 连接时,数据将在提供的公钥下加密。为了解密该数据,服务器将需要访问相应的私钥,如果您拥有 CA 的私钥,那就太糟糕了

CA 的目的是让客户端可以通过一些受信任的第三方来验证服务器的证书。您的客户端将需要 CA 证书来正确验证服务器,但可能已经拥有并信任该 CA。

根据您的评论进行编辑:

发送 CA 证书而不仅仅是服务器证书还有更多优势。

主要原因是如果服务器的私钥被泄露,您不需要向所有客户端分发新证书。由于 CA 应该比您的服务器受到更好的保护,因此 CA 可以简单地颁发一个新证书,客户端无需任何额外工作即可信任该证书。

如果您发送了服务器的证书,则需要一种方法来安全地更新每个客户端上的证书。

于 2013-01-02T18:23:01.490 回答