最终用户如何区分 OV 和 DV 证书?

信息安全 证书 相信 用户教育
2021-08-27 00:38:56

是一个很好的链接,它解释了不同类型的 SSL 证书和它们提供的信任级别。扩展验证 (EV) 证书很容易通过地址栏中的绿色和突出显示的组织名称来识别。

在此处输入图像描述

但是域验证和组织验证证书呢?显然,后者提供了更好的信任水平。所以问题是最终用户如何找出站点使用的证书类型。我尝试在浏览器(firefox)中查看证书,但找不到任何相关内容。

ps 我在互联网上进行了更多搜索,甚至 Tidalwave 的答案也指出,用户没有真正的方法可以找到答案。所以这意味着对于最终用户来说只有两种类型的证书 EVSSL 和非 EVSSL 这难道不是违背了拥有 DV 和 OV 的全部目的吗?

4个回答

在浏览器的身份字段中,DV 和 OF 没有区别。下面的屏幕截图显示了 Chrome、Firefox 和 MSIE 的此字段。对于 DV 和 OV,身份字段中仅显示 URL(无公司名称)。

当网站有 EV 时,公司名称会与 URL 一起显示。Chrome 和 MSIE 使用绿色背景作为公司名称,而 Firefox 将使用绿色文本作为公司名称。

在此处输入图像描述

但是,如果您查看证书本身,您会发现差异。

下面的两个屏幕转储都来自 Firefox 证书查看器。

下面的屏幕转储来自仅具有域验证 (DV) 的站点。如您所见,证书中没有有关组织的信息。

在此处输入图像描述

下一个屏幕转储来自具有组织验证 (OV) 的站点。在这里,您可以看到拥有该域的组织的名称。

在此处输入图像描述

您还将找到具有扩展验证 (EV) 的站点的组织名称。OV 和 EV 的区别在于,如果网站有 EV 证书,则公司名称会显示在浏览器的身份字段中,但如果网站有 OV 证书,则不会。

区分 DV 和 OV 证书的另一种方法是检查数字策略标识符(如果存在,则显示在证书的“详细信息”选项卡下)。请注意,并非所有 CA 都采用此标识符。用于策略标识符的值如下所示:

DV 2.23.140.1.2.1
OV 2.23.140.1.2.2

为什么您认为您可以信任在某些国家/地区正式注册的公司,而不是您可以信任托管在任何国家/地区的注册域?

EV 具有明显的优势,验证更严格,但其他两者之间的可信度差异却没有实际意义。支持 EV 的浏览器供应商根本不觉得有必要就另外两种(OV、DV)验证模型的单独视觉识别达成一致,因为两者都没有提供明显的优势(如果有的话)。

简而言之,没有一家主要的浏览器供应商觉得有必要或想要区分两者并以他们的名字支持它。很好,他们也没有。如果公司能够经受住 EV 带来的审查,那么没有人会阻止他们申请此类证书。另一方面,显然还需要更便宜的证书,因为额外的验证不适合其价格范围。由于前面提到的原因,支持 EV 的浏览器供应商(以及其他一些软件供应商的用户界面)不会以任何其他特殊方式支持这些更便宜的证书,而不是像往常一样已经存在的证书。

至于您问题的另一部分(证书数据的目视检查),OV 和 DV 的描述会有所不同,其中 OV 通常持有更多关于为其颁发的公司的数据,但仅此而已。但是,此附加信息显示可能会因不同的客户端而异。但是,您附加的该图像来自Wikipedia,并且您没有提及您在哪个浏览器中检查详细的证书信息,因此我无法说明您在未知浏览器中可以看到哪些差异。

Mozilla Firefox 中的扩展验证证书显示。

Mozilla Firefox 中的扩展验证证书示例(上图)。

编辑:DV 证书在组织名称字段中不包含识别信息。通常,此值只是重新声明域名或简单地说“Persona Not Validated”、“(unknown)”等。这不是所有 CA 的标准。另一种方法是检查策略标识符(如果存在),其中 2.23.140.1.2.1 代表 DV,2.23.140.1.2.2 代表 OV。同样,这并不是所有 CA 都采用的。简而言之,没有确定性的方法来判断证书是否经过域或组织验证。

域验证证书显示在 Mozilla Firefox 中。

Mozilla Firefox 中的域验证证书示例(上图)。请注意组织信息字段中缺少有意义的数据。

有问题的扩展和 OID 可以通过运行命令行来读取 openssl x509 -noout -text -in <cert.file>

定期执行此操作时,您可能希望准确无误。这是我自己的 Python 3 证书帮助工具的片段:

known_policies = {
        '2.23.140.1.2.1': 'DV',
        '2.23.140.1.2.2': 'OV',
        '2.23.140.1.1':   'EV'
}
policy_re = re.compile(r'.*(2\.23\.140\.1\.[.0-9]+)', re.DOTALL)
ext = x509.get_extension(idx)
if ext.get_short_name().decode('ascii') != 'certificatePolicies':
    # Other type of extension, not interested in that
    continue

policy_match = policy_re.match(str(ext))
if not policy_match:
    # Doesn't seem to contain valid policy information
    continue

policy_oid = policy_match.group(1)
type = known_policies[policy_oid]

总体思路是使用 Python 的 OpenSSL 库来读取和加载 X.509 证书。然后在查找certificatePolicies -extension时迭代其扩展。预期的正常情况是,扩展数据中有硬编码的 OID 之一。

For Digicert
2.16.840.1.114412.2.1 - EV
2.16.840.1.114412.1.1 - OV

但鉴于浏览器不再为 EV 提供特殊的视觉指示器,我们将在 EV 证书到期时从更昂贵的 EV 转移到 OV。