在HTTPS的传输过程中,有一个非常关键的角色--数字证书,那什么是数字证书?又有什么作用呢?
所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA机构对证书持有者的认可。
(1) 数字证书拥有以下几个优点
使用数字证书能够提高用户的可信度;
数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密;
在认证使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上;
(2) 证书类型
x509的证书编码格式有两种:
PEM(Privacy-enhanced Electronic Mail)是明文格式的,以 -----BEGIN CERTIFICATE-----开头,以-----END CERTIFICATE-----结尾。中间是经过base64编码的内容,apache需要的证书就是这类编码的证书.查看这类证书的信息的命令为: openssl x509 -noout -text -in server.pem。其实PEM就是把DER的内容进行了一次base64编码
DER是二进制格式的证书,查看这类证书的信息的命令为: openssl x509 -noout -text -inform der -in server.der
(3) 扩展名
.crt证书文件,可以是DER(二进制)编码的,也可以是PEM(ASCII (Base64))编码的),在类unix系统中比较常见;
.cer也是证书,常见于Windows系统。编码类型同样可以是DER或者PEM的,windows下有工具可以转换crt到cer;
.csr证书签名请求文件,一般是生成请求以后发送给CA,然后CA会给您签名并发回证书
.key一般公钥或者密钥都会用这种扩展名,可以是DER编码的或者是PEM编码的。查看DER编码的(公钥或者密钥)的文件的命令为: openssl rsa -inform DER -noout -text -in xxx.key。查看PEM编码的(公钥或者密钥)的文件的命令为: openssl rsa -inform PEM -noout -text -in xxx.key;
.p12证书文件,包含一个X509证书和一个被密码保护的私钥
(4) 证书的种类
安全证书主要分为DV、OV和EV三个种类,对应的安全等级为一般、较好和最高三个等级。三者的审核过程、审核标准和对应的域名数量也不同,所以价格在一两百元到几万元不等。
DV SSL:
DV SSL证书是指验证网站域名所有权的简易型(Class 1级)SSL证书,可10分钟快速颁发,能起到加密传输的作用,但无法向用户证明网站的真实身份。
目前市面上的免费证书都是这个类型的,只是提供了对数据的加密,但是对提供证书的个人和机构的身份不做验证。
OV SSL:
OV SSL,提供加密功能,对申请者做严格的身份审核验证,提供可信身份证明。
和DV SSL的区别在于,OV SSL 提供了对个人或者机构的审核,能确认对方的身份,安全性更高。
EV SSL:
EV=最安全、最严格
EV SSL证书遵循全球统一的严格身份验证标准,是目前业界安全级别最高的顶级 (Class 4级)SSL证书。
金融证券、银行、第三方支付、网上商城等,重点强调网站安全、企业可信形象的网站,涉及交易支付、客户隐私信息和账号密码的传输。
这部分的验证要求最高,申请费用也是最贵的。
根据保护域名的数量,SSL证书又分为:
单域名版:只保护一个域名,例如 www.abc.com 或者 login.abc.com 之类的单个域名
多域名版:一张证书可以保护多个域名,例如同时保护 www.abc.com , www.bcd.com, pay.efg.com 等
通配符版:一张证书保护同一个主域名下同一级的所有子域名,不限个数,形如 *.abc.com 。注意,通配符版只有 DVSSL 和 OVSSL 具有, EVSSL 不具有通配符版本。
(5) 证书在哪里
当你在下载并安装浏览器时,浏览器内部其实已经内嵌了全世界公认的根证书颁发机构的证书。
若一个网站的数字证书的证书颁发机构在浏览器中没有,则需要引导用户自行导入。
如果你想在 Chrome 中查看有哪些受信任的证书颁发机构,可以点击 设置 -> 隐私设置与安全性 -> 安全 -> 管理证书
(6) 证书里的信息
证书是哪个机构的?
证书里的公钥是什么?
证书有效期是什么时候?
采用的哪种加解密的算法?
(7) 证书吊销
证书是有生命周期的,如果证书的私钥泄漏了那这个证书就得吊销,一般有两种吊销方式:CRL和OCSP。
CRL( Certificate Revocation List)是CA机构维护的一个已经被吊销的证书序列号列表,浏览器需要定时更新这个列表,浏览器在验证证书合法性的时候也会在证书吊销列表中查询是否已经被吊销,如果被吊销了那这个证书也是不可信的。可以看出,这个列表随着被吊销证书的增加而增加,列表会越来越大,浏览器还需要定时更新,实时性也比较差。
所以,后来就有了 OCSP (Online Certificate Status Protocol)在线证书状态协议,这个协议就是解决了 CRL 列表越来越大和实时性差的问题而生的。有了这个协议,浏览器就可以不用定期更新CRL了,在验证证书的时候直接去CA服务器实时校验一下证书有没有被吊销就可以,是解决了CRL的问题,但是每次都要去CA服务器上校验也会很慢,在网络环境较差的时候或者跨国访问的时候,体验就非常差了。