你了解HTTPS 但你可能不了解X.509
世上根本就没有HTTPS协议,只有HTTP协议。——知乎某答友
某天,收到领导指示:学习一下X.509相关原理。
很多开发者可能和我一样觉得X.509这个词很陌生,但其实我们经常和它打交道,属于典型的“日用而不知”的东西。
那么X.509是什么呢?
X.509是一种数字证书的格式标准。
应用很广泛,现在HTTPS依赖的SSL证书使用的就是使用的X.509格式。这也就是说,每当我们开启https开头的网站都会用到它。
这个标准的具体内容是什么呢?
X.509规定的格式大致如下:
版本号 序列号 签名算法 颁发者 证书有效期 开始日期 终止日期 主题 主题公钥资讯 公钥算法 主体公钥 颁发者唯一身份资讯(可选) 主题唯一身份资讯(可选) 扩充套件资讯(可选) 签名
下图是某网站的 X.509 证书资讯
那么数字证书又是什么?
简单的说,数字证书就是通过加密算法来制造的一个网络“身份证”,用来证明通讯方的真实身份。
这个“身份证”的制作过程也很有意思,并不是由一个机构统一发放,而是层层颁发。
比如 A 持有了可信证书,那么它颁发给的 B 的证书也是可信的, B 再颁发给 C 的证书也是可信的。
整体结构很像资料结构中的“树”,其中 A 的证书为“根证书”,B 的为“中介证书”,C 的为“终端证书”。
而 A、B 都被称作认证机构,简称 CA(Certificate authority)。
每个证书都可以沿着树往上追溯到根证书,从而形成一条信任链。
比如下面这种图就是某网站证书的信任链资讯。
关于 X.509 的内容就分享完了。
但是心中的疑惑驱使着我继续探索,这证书靠谱么?
如果黑客伪造认证机构给木马网站颁发证书呢?
证书采用的是一种非对称加密机制来保证资讯不被窃取和复制。
这里稍稍解释下非对称机密,先说说密码学。
资讯加密的需求其实一直都存在,从古代开始就使用各种技术来加密重要的资讯,但是古代的加密安全程度都是基于加密方式的。
也就是说,别人如果知道了加密方式,那么就可以解密密文资讯。
而现代的加密技术安全性在于金钥的安全,也就是说加密方式(算法)是公开的,只要金钥不被窃取或泄露,资讯就是安全的。
虽然加密算法有很多种,但是大致上可以分为两类:对称加密和非对称加密。
对称加密的通讯双方都是用同一个金钥进行加解密,而非对称加密则要求使用不同的金钥进行加密和解密。
再回到证书的颁发过程,现在很多云服务厂商都提供了申请数字证书的功能,它会像CA发起申请,CA收到申请之后,做了下面的事情:
符合X.509格式的证书有多种,这里以SSL证书为例。
常见的场景会是下面这样:
证书在整个流程起到了重要的作用,那么能不能通过窃取和伪造的方式来获取通讯内容呢?
那这么说就是绝对安全了吗?非也~
对于DNS劫持的情况还是无解的。比如浏览器访问网站的时候给了一个假证书,然后向CA验证证书的时候又访问了一个假网站,证书就有可能被验证通过。从而黑客可以作为中间方获取并转发双方的资料。
SSL证书从生成到使用涉及到了三次加解密过程:
用一张结构图表示下HTTPS和X.509的关系: