【发布时间】:2017-06-13 04:59:08
【问题描述】:
我想知道通过 HTTP 进行证书身份验证的具体步骤是什么。 我知道以前有人问过这个问题,但从我读到的内容来看,我仍然不清楚它是如何工作的。
-
第一次联系安全站点时,客户端将发送其证书
- 这将是他的公钥(假设是一个 public_key.pem 文件以 ----BEGIN PUBLIC KEY---- 请求)
-
服务器将查看此证书是否已由受信任的 CA 签名。
- 服务器只有一个它信任的证书列表(您在配置 SSL 时配置此密钥库)。那是存储所有私钥的地方。这是否等同于服务器的所有受信任 CA?
- 现在下一步是获取 public_key.pem 并检查密钥库中的任何证书是否已对其进行签名。
如果上述过程是准确的:
第一个问题:“证书”是由另一个证书(或自签名)签名的私钥
第二个问题:服务器如何验证公钥是否使用特定的私钥(证书)签名?
第三个问题:'certificate' A 可以用来签署另一个'certificate' B,因此是'certificate' B 可用于签署证书C等。如果我的服务器在其信任库中有证书 A,这意味着它也会信任来自证书 B 和 C 的公钥?
根据以下答案进行编辑
我的服务器有 cert.pem 和 privkey.pem。 cert.pem(x509 证书)已由受信任的 CA 使用其私钥签名(“签名”过程涉及 CA 使用其私钥“做某事”并签署我的证书签名请求)。
协商 SSL 时,我的服务器会将 cert.pem 发送给客户端(以某种形式)。客户端如何确定我的公共证书是由受信任的 CA 签署的。我的信任库 pb 仅包含受信任 CA 的其他公共证书,因此它最终会检查我的 cert.pem 是否仅使用受信任 CA 的公共证书进行签名。 这是不清楚的部分 - 我可能误解了整个过程 - 客户可以通过仅拥有受信任 CA 的 x509 证书列表来检查我的 x509 证书是否有效吗?
【问题讨论】: