数字证书安全漫谈(1)-证书长什么样子?
我们以最常见的网站域名数字证书为例。
大家在电脑上登录网银、使用搜索引擎、使用网上支付的时候,会留意到浏览器的地址栏有个小锁标志(根据浏览器类型和版本的不同,小锁所显示的位置也有所不同):
通常来说这个小锁表示浏览器和所访问的网站之间是私密的连接(其实也不尽然)。
建立这个私密的连接通道,需要在Web服务器上部署一张数字证书。
数字证书已经逐步成为网站的标准配置,如果没有配置,则很可能会被浏览器的未来某个版本提示网站不安全,从而导致用户流失。此前Google就曾经宣传Chrome将不支持未使用数字证书的网站。
那么证书长什么样子?
首先,点击浏览器(以Chrome为例)地址栏的小锁标志,
点击“证书信息”,即可直观的看到证书的详细信息:
证书路径:
这里可以看到一个三层的证书路径。
那么数字证书到底是以什么形式存在,存储在哪里呢? 服务器上的域名数字证书其实就是一个文本文件,下面以https://saas.janusec.com/的域名证书为例,
证书文件名: saas.janusec.com.crt(文件名和在服务器上的存放位置都是可以修改的,跟配置文件保持一致即可)。
证书文件内容(仅为直观展示目的,内容略作修改,此格式适用于Nginx配置):
可以看到,这个证书文件,实际上包含了两张证书:
上面的一张就是实际要用的域名证书,是证书服务器通过邮件方式发送过来的;下面的一张是中间证书,它是公开的,也可以从证书服务商的网站找到。如果中间证书不止一张,则需要把所有的中间证书都贴在这个文件里面,顺序刚好跟用户看到的证书路径层级相反。
那么问题来了,这个文件里面并没有根证书。
那么根证书在哪里呢?
其实,Web服务器上并不需要配置这个根证书,根证书就内置在您所使用的浏览器里面或者操作系统里面(Chrome和IE使用Windows的证书管理,而Firefox有自己的证书管理模块)。
在刚才的证书路径界面,点击根证书,查看证书,即可看到。
以常用的Chrome和IE为例,打开控制面板中的Internet选项,内容,证书,即可查看受信任的根证书颁发机构,在列表中可以找到它。
这里的受信任的根证书颁发机构,其实就是内置在Windows的证书管理(IE、Chrome)或浏览器厂商内置在浏览器(Firefox、Opera)里面的。
如果您使用了自颁发的证书,则浏览器默认就不会接受它,只有您手工将自颁发的根证书添加到受信任的根证书目录里面,浏览器才不会警告。最常见的就是12306网站,购票前需要用户先安装他家的根证书有没有?
Web服务器上除了这个证书文件之外,还需要配置私钥文件(样例中文件名为saas.janusec.com.pem)才能让证书正常发挥作用,因为浏览器在和Web服务器进行会话协商的过程中,将要用于内容加密的动态加密密钥是通过服务器证书的公钥加密的,服务器必须要用自己的私钥才能解开。这个动态加密密钥使用的是对称加密算法(而不是RSA),算法从双方都支持的算法集中挑选,比如本例中点击小锁标志,可以看到,对内容传输使用的加密算法是AES-128,密钥交换机制采用的才是RSA。
这个文件是需要保密的,其内容样式如下(具体内容已修改,防止泄密):
-----BEGIN RSA PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END RSA PRIVATE KEY-----
在Web服务器Nginx的配置文件中,在Server{}内部需要配置证书文件和私钥文件路径:
server {
...
ssl_certificate /usr/local/cert/saas.janusec.com.crt;
ssl_certificate_key /usr/local/cert/saas.janusec.com.pem;
...
}
数字证书FAQ
问:数字证书是否包含私钥?
答:私钥是保密的,证书中并不包含私钥。数字证书是公开给别人看的,所包含的字段,可以点击小锁标志进行查看,网站的域名数字证书最关键的字段是域名。