在 SSL 信任层次结构中,什么用于签署中间证书以及这与根证书有何关系?
In SSL trust hierarchies, what is used to sign an intermediate certificate and how does this relate to the root certificate?
我正在完成一项关于 SSL 的作业,我觉得我了解如何将证书用于非对称和对称加密的基础知识。但是我很难理解信任层次结构如何工作的一些细节。
具体来说,中间证书是用什么来签名的?我看过的所有指南都指出 CA 根证书用于签署中间证书。但是 "sign" 在这里到底是什么意思?换句话说,服务器如何证明其中间证书已通过 CA 根证书的身份验证?
我的猜测是在生成中间证书的签名时使用了根证书的 public 密钥或签名,但我不确定这是否准确。
如果能提供任何有助于我理解的信息,我将不胜感激。
如果只有一个中间证书(通常但并非总是如此),则中间证书由根以与最终实体证书完全相同的方式签名(对于 SSL/TLS 主要是服务器证书) 由中间人签署。在这两种情况下,这都是 shorthand; 签名实际上是使用非对称密钥对的私钥完成的,证书包含同一密钥对的public密钥,用于验证使用私钥进行的签名。由于私钥是私密的,我们所有使用 CA 的人只能看到他们的 public 密钥,所以我们专注于此。因此:
服务器证书是使用属于中间 CA 的私钥签署的;中间证书包含匹配的 public 密钥。作为验证服务器证书的一部分,依赖者(例如浏览器)使用服务器证书中的 Isssuer 名称查找或确认中间证书,并使用中间证书中的 public 密钥来验证服务器证书上的签名;这确保服务器证书实际上是由中间 CA 颁发的并且没有被篡改。
根据 SSL/TLS 标准,服务器应始终在握手中的服务器证书之后发送中间证书(或多个证书,按顺序),但如果未能这样做,某些客户端可能会使用 AIA 来自证书或其他启发式方法来获取证书,或者可能已经缓存甚至配置了它。
中间证书使用属于根 CA 的私钥签名;根证书包含匹配的 public 密钥。作为验证中间证书的一部分,依赖者使用中间证书中的 Issuer 名称找到根证书,并使用根证书中的 public 密钥来验证中间证书上的签名;这确保了中间证书实际上是由根 CA 颁发的并且没有被篡改。
根证书通常必须(已经)在依赖者的本地'trust store'并且服务器不需要发送它;通常,信任存储由浏览器开发人员 (Firefox) 或 OS/platform 开发人员(IE/Edge、Chrome、Safari)提供。
请注意这两个语句之间的相似之处,但(值得注意的)例外是依赖者如何找到父证书。另请注意,为 SSL/TLS 连接验证服务器证书链涉及的不仅仅是验证签名,尽管验证签名是一个关键部分,如果没有它,其他验证标准将无法保证。
一个中间 CA 和中间证书通常会被大量(数千到数百万)服务器证书和服务器使用。服务器不负责'proving'关于中间证书的任何事情,只将它传递给客户端,客户端验证整个链。
跨栈另见
https://security.stackexchange.com/questions/56389/ssl-certificate-framework-101-how-does-the-browser-actually-verify-the-validity
它很好地描绘了这种关系。
我正在完成一项关于 SSL 的作业,我觉得我了解如何将证书用于非对称和对称加密的基础知识。但是我很难理解信任层次结构如何工作的一些细节。
具体来说,中间证书是用什么来签名的?我看过的所有指南都指出 CA 根证书用于签署中间证书。但是 "sign" 在这里到底是什么意思?换句话说,服务器如何证明其中间证书已通过 CA 根证书的身份验证?
我的猜测是在生成中间证书的签名时使用了根证书的 public 密钥或签名,但我不确定这是否准确。
如果能提供任何有助于我理解的信息,我将不胜感激。
如果只有一个中间证书(通常但并非总是如此),则中间证书由根以与最终实体证书完全相同的方式签名(对于 SSL/TLS 主要是服务器证书) 由中间人签署。在这两种情况下,这都是 shorthand; 签名实际上是使用非对称密钥对的私钥完成的,证书包含同一密钥对的public密钥,用于验证使用私钥进行的签名。由于私钥是私密的,我们所有使用 CA 的人只能看到他们的 public 密钥,所以我们专注于此。因此:
服务器证书是使用属于中间 CA 的私钥签署的;中间证书包含匹配的 public 密钥。作为验证服务器证书的一部分,依赖者(例如浏览器)使用服务器证书中的 Isssuer 名称查找或确认中间证书,并使用中间证书中的 public 密钥来验证服务器证书上的签名;这确保服务器证书实际上是由中间 CA 颁发的并且没有被篡改。
根据 SSL/TLS 标准,服务器应始终在握手中的服务器证书之后发送中间证书(或多个证书,按顺序),但如果未能这样做,某些客户端可能会使用 AIA 来自证书或其他启发式方法来获取证书,或者可能已经缓存甚至配置了它。
中间证书使用属于根 CA 的私钥签名;根证书包含匹配的 public 密钥。作为验证中间证书的一部分,依赖者使用中间证书中的 Issuer 名称找到根证书,并使用根证书中的 public 密钥来验证中间证书上的签名;这确保了中间证书实际上是由根 CA 颁发的并且没有被篡改。
根证书通常必须(已经)在依赖者的本地'trust store'并且服务器不需要发送它;通常,信任存储由浏览器开发人员 (Firefox) 或 OS/platform 开发人员(IE/Edge、Chrome、Safari)提供。
请注意这两个语句之间的相似之处,但(值得注意的)例外是依赖者如何找到父证书。另请注意,为 SSL/TLS 连接验证服务器证书链涉及的不仅仅是验证签名,尽管验证签名是一个关键部分,如果没有它,其他验证标准将无法保证。
一个中间 CA 和中间证书通常会被大量(数千到数百万)服务器证书和服务器使用。服务器不负责'proving'关于中间证书的任何事情,只将它传递给客户端,客户端验证整个链。
跨栈另见 https://security.stackexchange.com/questions/56389/ssl-certificate-framework-101-how-does-the-browser-actually-verify-the-validity 它很好地描绘了这种关系。