我在某处得到提示,应用程序无法验证根 CA(只有操作系统可以)。我想得到以下几点的答案:
a) 只有操作系统才能验证根 CA 是真的吗?
b)(如果是)为什么应用程序(特别是 Web 浏览器)不能验证根 CA?
c)(如果是)那么浏览器如何验证 SSL 证书?
我在某处得到提示,应用程序无法验证根 CA(只有操作系统可以)。我想得到以下几点的答案:
a) 只有操作系统才能验证根 CA 是真的吗?
b)(如果是)为什么应用程序(特别是 Web 浏览器)不能验证根 CA?
c)(如果是)那么浏览器如何验证 SSL 证书?
“根 CA”是我们信任的组织。该组织曾经生成过一个证书(一对公钥和私钥)。公钥与任何其他现有的公钥没有什么不同,除了它预先安装到操作系统中并且我们都同意它是好的和值得信赖的。
当我们浏览一个常规的 HTTPS 站点时,我们会得到一个带有公钥的证书(例如https://www.google.com的证书)。最初我们不信任该证书,但操作系统或应用程序可以验证证书是否包含证明它由我们已经知道的根 CA 签名的证明......或者它包含由另一个受信任证书签名的证明(种类递归的)
无法以与根 CA 证书相同的方式完成此链验证。因为它是根,所以没有其他受信任的证书对其进行签名(这就是它是根的原因)。但是任何人都可以验证它,例如检查它是否已经安装到Trusted Root Certificate Store
我们的操作系统中。
因此,这就是根证书和普通证书之间的区别。
话虽如此,操作系统或任何应用程序都可以验证任何类型的证书。
不,应用程序无法验证根 CA 是不正确的。
例如,浏览器一直都在这样做。
作为另一个例子,核心 Java 有一整套包(JSEE 框架和支持类),其中包括允许您编写可以验证证书(包括根证书)的应用程序。