我需要创建一个客户端库,以通过HTTPS与单个服务(例如google.com)进行对话。
我希望该库附带验证服务所需的所有数据(证书或密钥)。

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

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

最佳答案

您需要使用服务器的密钥对,而不是CA。建立HTTPS连接时,将使用提供的公共密钥对数据进行加密。为了解密该数据,服务器将需要访问相应的私钥,如果您将CA的私钥放在身边,那将是非常糟糕的。

CA的目的是使客户端可以通过某个受信任的第三方验证服务器的证书。您的客户端将需要CA证书来正确认证服务器,但是大概已经拥有并信任该CA。

根据您的评论进行编辑:

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

主要原因是,如果服务器的私钥遭到破坏,则无需将新证书分发给所有客户端。由于应该比您的服务器更好地保护CA,因此CA可以简单地颁发新证书,客户端将信任该证书而无需进行任何额外工作。

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

关于security - CA公共(public) key 与服务器公共(public) key :建立HTTPS连接应使用什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14127078/

10-15 02:32
查看更多