证书颁发机构对我的 CSR 做了什么?

信息安全 tls 证书 公钥基础设施
2021-08-30 08:52:10

我需要访问不属于我的 Web 服务。

该 Web 服务的 IT 部门要求我向他们发送 CSR(证书签名请求)。然后,他会给我发回一个签名证书,我可以通过将该证书与我的私钥相结合,将其包含在我的 PHP 调用中。

证书颁发机构做了什么让我这样做?网络服务现在如何接受我的呼叫?有人可以逐步向我描述他们所做的事情吗?

2个回答

CSR 是一个文件,其中包含您的公钥和描述您的服务器的数据——例如它的主机名(“通用名称”)等。证书颁发机构 (CA) 是您和您连接的各方相互信任的中介。CA 将审核您提交的 CSR,然后颁发证书,该证书通常与 CSR 中的数据相同,外加 CA 自己的数字签名。当您将此证书提供给您连接到的服务器时,他们会检查以确保 CA 签名有效并且属于他们信任的 CA。通过将其置于“相互信任的机构”中,这简化了确保各方之间信任的程序。

我建议您搜索“什么是证书签名请求”之类的术语,并阅读一些关于 x509 公钥基础结构的介绍性文章。

证书是一个包含名称公钥并已签名的对象。证书颁发机构是应用签名的实体:通过这样做,CA 声明:“公钥确实由具有名称的人拥有”。密钥所有权是通过控制相应的私钥来定义的。

证书请求是一个包含名称和公钥的对象,您将其发送给CA。CA 将建立证书(然后对其进行签名),将相关数据放入其中;特别是,它会将您发送的公钥作为请求的一部分。当然,CA 只会在验证它确实是您的密钥之后才会这样做(我推测,或者至少强烈希望,在您的情况下,“IT 部门”有一种合理可靠的方式来确保证书请求他们收到的确实是您发送的)。当然,要生成证书请求,您必须生成公钥/私钥对。私钥从未离开您的计算机;只有公共部分被发送到 CA。

通过在您的机器中安装证书,就在相应的私钥旁边,您允许 PHP 进行基于证书的客户端身份验证。其主要协议是SSL/TLS(因此是 HTTPS,即 HTTP-over-SSL)。当 SSL 客户端连接到服务器时,它们会进行一些加密(“握手”),然后服务器可能会向客户端请求证书:客户端必须发送证书使用相应的私钥来回答来自服务器(基本上,计算数字签名)。然后服务器验证证书(即验证 CA 对其应用的签名):该证书告诉服务器你的公钥,此时服务器可以验证您对挑战的回答,因此,请确保它确实在与您交谈。

摘要:服务器通过验证客户端是否控制与特定公钥对应的私钥来验证您的客户端。该证书将该公钥绑定到您的姓名。CA 建立此绑定。要生成证书,CA 需要知道您的公钥;您的公钥包含在您发送给 CA 的证书请求中。