SSL证书验证

我想知道通过HTTP进行证书认证的确切步骤是什么。 我知道这已经被问过,但是从我读过的内容来看,它还不清楚它的工作原理。

  • 首次联系安全站点客户端时将发送其证书

  • 这将是他的公钥(假设一个public_key.pem文件使用---- BEGIN PUBLIC KEY -----)
  • 服务器将查看此证书是否由可信CA签署。

  • 服务器只有一个它信任的证书列表(您在配置SSL时配置此密钥库)。 这就是所有私钥都存储的地方。 这是否等同于服务器的所有可信CA?
  • 下一步是获取public_key.pem并检查密钥库中的任何证书是否已对其签名。
  • 如果上述过程是准确的:

    第一个问题 :“证书”是由另一证书(或自签名)签署的私钥,

    第二个问题 :服务器如何确认使用特定私钥(证书)对公钥进行了签名?

    第三个问题 :'证书' A可以用来签署另一个'证书' B ,因此'证书' B可以用来签署证书C等等。 如果我的服务器在其信任库中有证书A ,这意味着它也将信任来自证书BC的公钥?

    根据以下答案进行编辑

    我的服务器有cert.pemprivkey.pemcert.pem (x509证书)已由受信任的CA使用其私钥签名(“签署”过程涉及CA使用其私钥执行“某事”并签署我的证书签名请求)。

    当SSL被协商时,我的服务器会发送cert.pem到客户端(以某种形式)。 客户如何确定我的公共证书是由受信任的CA签署的。 我的信任库pb只包含其他可信CA的公共证书,因此它最终会检查我的cert.pem是否仅使用可信CA的公用证书进行签名。 这是不清楚的部分 - 我可能会误解整个流程 - 客户是否可以通过获得x509可信CA证书列表来检查我的x509证书是否有效?


    首次联系安全站点客户端时将发送其证书

    客户不必发送证书。 从你的问题来看,这听起来并不像你在具体询问客户端证书认证。 在许多网站中,例如,如果你去谷歌,stackoverflow,Facebook等,客户端/浏览器将不会发送证书。

    “证书”是由另一证书(或自签名)签署的私钥,

    不完全的。 证书包含由与另一个证书相对应的私钥签署的公钥。

    我认为这值得清理。 证书本身将只包含公钥,或x509说法中的“主题公钥信息”。 该公钥对应的私钥与x509证书分开存储。

    有一些格式将证书和私钥“结合”到一个文件中,但此时它不再是证书,它是一个包含证书的文件 - 例如PKCS#12。 这是一种可根据需要存储尽可能多的证书和私钥的格式。

    私钥甚至不一定是磁盘上的文件 - 它可能位于硬件安全模块,智能卡等中。

    '证书'A可以用来签署另一个'证书'B,因此'证书'B可以用来签署证书C等等。 如果我的服务器在其信任库中有证书A,这意味着它也将信任来自证书B和C的公钥?

    是。 这被称为证书链。 A是“根”证书,B是“中间”,C将是“最终实体”或“叶”证书。

    这在CA的HTTPS证书中非常普遍。 证书永远不会直接从根目录发出,而是从中间颁发。

    服务器如何确认使用特定私钥(证书)对公钥进行了签名?

    那么这就使得证书是一个私钥,而事实并非如此。

    与服务HTTPS的服务器一样,服务器并不关心证书的有效性。 由客户决定是否应该信任服务器提供的证书。

    服务器具有证书和相应的私钥。 服务器可以验证公钥和私钥属于一个整体。 这是如何完成的,取决于密钥的类型,但其要点是,如果你知道私钥,你可以从中完全重建公钥。 服务器将验证私钥的“公共部分”与证书的公钥相匹配。

    服务器将向客户端呈现证书,如浏览器。 浏览器会检查很多事情,但至少会检查两件重要的事情:

  • 浏览器是否可以构建链回到信任库中的证书。 因此,浏览器会查看证书的签名者(称为发行者),并检查发行者是否在其信任库中。 如果是,那么证书是可信的。 如果不是,它将查看该证书是否具有颁发者,并且一直循环到链中,直到它到达链的末尾,或者它在信任库中找到某些东西。 如果达到最后,那么证书不是由其信任的任何人签发的。

  • 该证书对该域有效。 证书包含一个主题备用名称(SAN),用于指示证书有效的域。

  • 还有很多其他事情会被检查,如过期,撤销,证书透明度,证书的“强度” - 太多无法列出。

    客户如何确定我的公共证书是由受信任的CA签署的。

    每个客户都有自己的信任存储。 Windows上的Internet Explorer使用Windows信任存储,Mac OS和Windows上的Google Chrome使用操作系统信任存储(Keychain,Windows Trust Store等)。

    如上所述,浏览器/客户端需要构建信任路径。 它是如何做到这一点有点复杂,但是它对Authority Key ID属性(如果存在)以及证书的Issuer属性起作用。 它使用这些值来查找发布它的证书。

    一旦找到颁发证书,它就会使用颁发者的证书公钥检查证书上的签名。

    该颁发证书可以位于“根”信任存储区中,并使用颁发证书中的公钥来验证签名证书。

    您的Web服务器可能(可能)将中间证书与“主”(叶)证书一起发送。 客户端可能会使用这些中间体来构建回到根信任存储中的证书的路径。 中间体只能用作中间体 - 您不能发送额外的证书说“这里是根证书,相信它”。

    客户是否可以通过拥有x509可信CA证书列表来检查我的x509证书是否有效?

    是。 那是信任商店。 每个浏览器都有/使用一个。 Firefox拥有自己的信任存储,名为NSS。 操作系统通常也有自己的信任库。

    链接地址: http://www.djcxy.com/p/3715.html

    上一篇: SSL Certificate validation

    下一篇: 2 way SSL/TLS configuration