一、HTTPS简介

HTTP我们已经很了解了,其实HTTPS,即HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证,对传送的数据进行加密和隐藏,以确保数据在传输中不被篡改,即数据的完整性,现已成为该领域中全球化的标准。由于SSL技术已建立到所有主要的浏览器和web服务器中,因此,服务器端仅需安装ssl证书就可以使用https功能了,保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。

SSL网站不同于一般的Web站点,它使用的是“HTTPS”协议,而不是普通的“HTTP”协议。因此它的URL(统一资源定位器)格式为“https://”,比如“https://www.baidu.com”。

二、SSL证书

ssl证书是https协议中最重要的部分,是由可信的第三方CA颁发的,用于通信双方验证对方的身份真实性。ssl证书根据不同的形式可以有多种分类。

按照安全等级,SSL证书分为三大类:

1、域名型https证书(DVSSL域名验证类型):信任等级一般,只需验证网站的真实性便可颁发证书保护网站。适用对象:中小型企业网站、中小型电子商务网站、电子邮局服务器、个人网站等。
2、企业型 https 证书(OVSSL组织验证类型):信任等级强,须要验证企业的身份,审核严格,安全性更高。适合对象:企业网站、电子商务网站、证券、金融机构。
3、增强型 https 证书(EVSSL扩展验证类型):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。

常用的SSL证书主要是域名型证书DV,又分为三种:单域名证书、多域名证书、通配符证书。

1、单域名SSL证书:只保护一个域名(包括带www和不带www)的SSL证书,可以是顶级域名也可以是二级域名,例如:abc.com以及www.abc.com或者bbs.abc.com。
2、多域名SSL证书:可以同时保护多个域名,不限制域名类型;例如:abc.com及它的子域、xyz.com及它的子域、nnn.com及它的子域等,最多可保护2~150个域名。
3、通配符证书:只能保护一个域名以及该域名的所有下一级域名,不限制域名数量;例如:abc.com及它的所有子域*.abc.com,*.*.abc.com等,没有数量限制。

单域名、多域名、通配符SSL证书的区别就比较明显,唯一难以区分的就是多域名SSL证书和通配符证书,而它们之间的区别就是多域名SSL证书可以保护不同的主域或者子域,一张证书最多保护2~150个,适合顶级域名多的用户申请;通配符证书只能保护一个域名,以及该域名的所有下一级域名,不限制下一级域名数量,适合子域数量多的用户申请。

按照SSL证书规范标准,目前主流的有如下两种:

1、X509证书

X.509标准是密码学里公钥证书的格式标准。X.509证书己应用在包括TLS/SSL(www万维网安全浏览的基石)在内的众多 Internet协议里,同时它也有很多非在线的应用场景,比如电子签名服务。X.509证书含有公钥和标识(主机名、组织或个人),并由证书颁发机构(CA)签名(或自签名)。对于一份经由可信的证书签发机构签名(或者可以通过其它方式验证)的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,以及对文档进行数字签名。

在X.509系统中,证书申请者通过发起“证书签名请求(CSR)”来得到一份被签名的证书。为此,它需要提前生成一个密钥对,然后用其中的私钥对CSR签名(私钥本身要妥善保存,对外保密),CSR包含申请人的身份信息、用于验真CSR的申请人的公钥,以及所请求证书的专有名称(DN),CSR还可能带有CA要求的其它有关身份证明的信息,然后CA对这个专有名称发布一份证书,并绑定一个公钥。

组织机构可以把受信的根证书分发给所有的成员,这样就可以使用公司的PKI系统了。像Firefox, IE, Opera, Safari 以及Google Chrome这些浏览器都预装了一组CA根证书,所以可以直接使用这些主流CA发布的SSL证书。浏览器的开发者直接影响它的用户对第三方的信任。X.509是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。

X.509 DER编码(ASCII)的后缀是: .DER .CER .CRT
X.509 PAM编码(Base64)的后缀是: .PEM .CER .CRT
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。
.pem跟crt/cer的区别是它以Ascii来表示。

X.509证书的结构是用ASN.1(Abstract Syntax Notation One:抽象语法标记)来描述其数据结构,并使用ASN1语法进行编码。X.509 v3数字证书的结构如下:

1、X.509证书基本部分
1.1. 版本号(Version)
——标识证书的版本(版本1、版本2或是版本3)。
1.2. 序列号(Serial Number)
——标识证书的唯一整数,由证书颁发者分配的本证书的唯一标识符。
1.3. 签名(Signature)
——用于签证书的算法标识,由对象标识符加上相关的参数组成,用于说明本证书所用的数字签名算法。例如,SHA-1和RSA的对象标识符就用来说明该数字签名是利用RSA对SHA-1杂凑加密。
1.4. 颁发者(Issuer:)
——证书颁发者的可识别名(DN)。
1.5. 有效期(Validity)
——证书有效期的时间段。本字段由”Not Before”和”Not After”两项组成,它们分别由UTC时间或一般的时间表示(在RFC2459中有详细的时间表示规则)。
1.6. 主体(Subject)
——证书拥有者的可识别名,这个字段必须是非空的,除非你在证书扩展中有别名。
1.7. 主体公钥信息(Subject Public Key Info)
——主体的公钥(以及算法标识符)。
1.8. 颁发者唯一标识符(Issuer Unique Identifier)
——标识符—证书颁发者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。
1.9. 主体唯一标识符(Subject Unique Identifier)
——证书拥有者的唯一标识符,仅在版本2和版本3中有要求,属于可选项。
1.10.证书的扩展项(可选)
1.11.证书签名算法
1.12.证书的签名

https协议流程和ssl证书-编程知识网

2、PKCS证书

PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:

PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard

PKCS#7常用的后缀是: .P7B .P7C .SPC
PKCS#12常用的后缀有: .P12 .PFX

pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。

三、SSL协议

根据身份校验方式的不同,SSL协议有单向验证和双向验证区别的,两者的应用场景和安全要求级别不一样。

1、单向SSL

所谓单向SSL,即在安全连接建立之前,只有服务器一方提供ssl证书,客户端只需要校验服务器端证书的合法性即可,而客户端不需要提供证书供服务器端验证。

单向ssl协议交互过程如下图所示:

https协议流程和ssl证书-编程知识网

由于单向ssl协议中,只有服务器端提供证书,客户端不需要提供证书,所以服务器端是不需要校验客户端身份的合法性的。这种应用场景一般适合B2C业务,比如web站点,app api接口等。

2、双向SSL 

所谓双向ssl,即在安全连接建立之前,客户端——服务器端双方都需要校验对方的安全证书,以确保双方身份的合法性。

双向ssl协议交互过程如下图所示: 

https协议流程和ssl证书-编程知识网

双向ssl协议在客户端校验完服务器端的身份后,还会提供自己的证书供服务器端校验,所以双向ssl协议的安全性相较单向ssl而言会更高。一般应用在对客户端身份安全性要求更高的应用场景,比如B2B,SAAS,商户服务模式等。之前项目中集成某银行的电子钱包模块,即使用了双向ssl协议。