什么是SSL预证书?

预验证是用作证书透明度(CT)一部分的特殊类型的SSL证书。 预先证书与常规SSL证书不同,因为它们不是(也不可以)用于验证服务器或形成经过身份验证的连接(例如HTTPS连接)。它们的唯一目的是允许证明证书已被记录以直接嵌入到证书中。顾名思义,预认证出现在正式证书之前。而预证书几乎很少暴露给最终用户,也就是说你可能收到了预证书但从不知道它的存在。

预证书在证书透明度RFC中定义。本文将用简单的语言解释什么是预先证书,如何使用它们以及它们的工作机制。

为什么需要预证书?

预证书的存在是为了允许将证书透明度数据直接嵌入到最终证书中。

预验证是将证明提交到证书透明度日志(SCT)的证书的几种方式之一。 预处理的优点是允许将CT数据嵌入SSL证书本身,而不是作为单独的数据提供(其他方法要求在握手期间将SCT作为单独的文件发送,与OCSP Stapling类似)。

CT日志需要能够为该证书的数据生成一个有效的签名(SCT),但是CA还需要日志中的SCT才能创建最终的证书。 于是需要预证书来解决这个问题,它允许日志生成正确的签名,而不需要最终的证书。

以下是需要用到预证书的场景:

1.证书颁发机构(CA)将向客户签名并颁发证书。他们需要使其符合浏览器的CT策略,因此他们需要将证书提交到CT Log。 2.CA对如何提供证书已被记录的证据有不少选择。如果他们想直接将该证明嵌入证书,他们将需要使用预认证。 3.在CA签署最终证书之前,他们首先创建一个预认证,其中包含相同的数据,但格式化为特定方式,以使其不被视为有效的SSL证书。 4.CA将预认证提交到CT日志并接收SCT(签名证书时间戳)。这是一个由日志签署的文件,可用于密码证明客户端证书已被记录。 5.CA发布最终证书,SCT嵌入其中。 6.终端用户可以部署他们的证书,并证明他们的证书中包含它们的CT合规性。这是包含SCT的最佳方式。

当你搜索证书透明度日志时,可能会遇到预认证,但不能检查关联的(有效的)证书。 这是因为CA不需要将后续证书提交到日志。 即使预先认证不被客户视为有效,但是仍然保留相同的发行标准。 CT RFC规定,“预认证的错误被认为等于最终证书的错误”。

预证书如何运作?

预证书不同于普通证书的点在于它使用X.509 v3格式的扩展名的数据字段区。扩展为X.509格式提供了灵活性,并允许采用新功能,而不需要新版本的格式。

预证书包含一个“有毒的扩展”。是的你没看错,这个扩展有毒!之所以这么称呼它是因为该扩展十分关键还不支持客户端。如果它没有被正确解析,那么正式证书就要GG(被判无效)了。而当客户端遇上预认证,十之八九都会把它认作无效。“有毒”扩展的存在可以说是常规证书和预证书之间唯一的区别了。

毒性扩展使用一种独一无二的OID:1.3.6.1.4.1.11129.2.4.3。OID又称对象标识符,是分配给某些目的并用于提供计算机可解析格式的标准化字符串。例如,您可以查看该OID号码,并看到它已被分配了以下目的:“证书透明度预认证毒药扩展(poison extension)”。其他OID(如1.3.6.1.5.5.7.48.1)用于SSL证书中以指示该证书的OCSP URL。

举个栗子,如果你在Windows中下载并打开一个预认证,它将看起来与常规SSL证书非常相似。 但是,在Windows“证书查看器”的“常规”窗格中,您将注意到它将显示为“证书包含未标识为”关键“的扩展名。”在“详细信息”中,您会看到底部附近列出的毒药扩展名(查找OID)。

因为这个扩展是存在的,Windows将预认证视为无效。 这样可以防止在使用SSL证书的情况下使用SSL,例如在HTTPS连接中。 在macOS上,证书查看器会说“不能使用此证书(无法识别的关键扩展)”。

在证书透明度协议(仍在开发中,RFC6962)的2.0版本中,预认证的格式将从X.509更改为CMS(加密消息语法)。 这意味着预制证的技术格式和编码将会大大改变,并且将不再是与常规SSL证书相同的格式。也就是说,当部署CT 2.0时将不会再有毒药扩展,因为不需要区分预密码和有效的X.509 SSL证书。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

iOS 中 HTTPS 证书验证浅析

导语 在 WWDC 16 中,Apple 表示, 从 2017年1月1日起(最新消息, 实施时间已延期),所有新提交的 App 使用系统组件进行的 HTTP 网...

5608
来自专栏惨绿少年

HTTPS 原理与证书实践

1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间...

6887
来自专栏刺客博客

免费泛解析证书获取及后续安装方法

4635
来自专栏java一日一条

HTTPS 原理剖析与项目场景

最近手头有两个项目,XX导航和XX产业平台,都需要使用HTTPS协议,因此,这次对HTTPS协议做一次整理与分享。

1181
来自专栏JetpropelledSnake

Python Web学习笔记之SSL,TLS,HTTPS

1533
来自专栏Android开发实战

Android之Https初识

如果读者对上面任何一个名词陌生,请参考这篇文章: https://foofish.net/https-story-1.html

892
来自专栏Java技术栈

SSL / TLS 协议运行机制详解

本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和运行过程,不涉及具体的实现细节。如果想了解这方面的内容,请参阅RFC文档。

1424
来自专栏吴伟祥

了解SSH加密和连接过程 转

SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份...

992
来自专栏React Native开发圈

HTTPS证书申请及windows server部署

StartSSL免费DV证书 沃通(Wosign)免费DV证书 这两个已经被苹果拉入黑名单。我10月份在StartSSL申请的证书还可以使用。但是近期申请的已经...

3242
来自专栏blackheart的专栏

[信息安全] 3.HTTPS工作流程

0. 简单回顾 在前面两篇博客中介绍了密码相关的一些基本工具,包括(对称密码,公钥密码,密码散列函数,混合密码系统,消息认证码码,数字签名,伪随机数,数字证书)...

2575

扫码关注云+社区