我需要创建一个客户端库以通过 HTTPS 与单个服务(例如 google.com)通信。 我希望图书馆随附验证服务所需的所有数据(证书或 key )。
我不知道这些数据应该是什么。它应该是签署 google.com 证书的证书颁发机构的公钥吗?还是应该是 google.com 公钥?
在我见过的所有示例中,证书颁发机构的公钥都用于验证连接。但这似乎没有必要。如果我的图书馆只与 google.com 对话,我能否通过安全通道(浏览器)获取并保存 google.com 公钥,然后直接使用此 key 建立经过身份验证的连接而无需再次使用 CA key ?
最佳答案
您需要使用服务器的 key 对,而不是 CA。建立 HTTPS 连接时,数据将根据提供的公钥进行加密。为了解密该数据,服务器需要访问相应的私钥,如果您有 CA 的私钥,那将真的很糟糕。
CA 的目的是让客户端可以通过一些受信任的第 3 方验证服务器的证书。您的客户端将需要 CA 证书来正确验证服务器,但可能已经拥有并信任该 CA。
根据您的评论进行编辑:
传送 CA 证书而不只是服务器证书有更多优势。
主要原因是,如果服务器的私钥遭到泄露,您无需向所有客户端分发新证书。由于 CA 应该比您的服务器受到更好的保护,因此 CA 可以简单地颁发一个新的证书,客户端将信任该证书而无需任何额外的工作。
如果您发送了服务器的证书,则需要一种方法来安全地更新每个客户端上的证书。
关于security - CA 公钥与服务器公钥 : what should I use to establish an HTTPS connection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14127078/