HTTPS与HTTP
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。然而,HTTP协议传输的数据都是未加密的,也就是明文的,使HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTPS与HTTP区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
HTTPS 验证原理
Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份:
验证流程
- 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端
服务端,接收到客户端所有的Cipher后与自身支持的对比;
- 如果不支持则连接断开,
- 反之则会从中选出一种加密算法和HASH算法以证书的形式返回给客户端证书中还包含了 公钥、颁证机构、网址、失效日期等等。
客户端收到服务端响应后:
- 验证证书的合法性,颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等
- 生成随机密码,如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,然后用证书中的公钥加密;
- 发送HASH握手信息,用最开始约定好的HASH方式,把握手消息取HASH值,然后用 随机数加密”握手消息+握手消息HASH值(签名)”并一起发送给服务端;
- 在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。
- 服务端拿到客户端传来的密文:
- 用自己的私钥来解密握手消息取出随机数密码;
- 再用随机数密码解密握手消息与HASH值;
- 并与传过来的HASH值做对比确认是否一致;
- 然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 );
- 把握手消息发送给客户端;
- 客户端接受握手消息:
- 用随机数解密并计算握手消息的HASH;
- 与服务端发来的HASH比较,如果一致,结束握手过程;
- 之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密;
- 因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全
- 非对称加密算法:RSA,DSA/DSS 在客户端与服务端相互验证的过程中用的是对称加密
- 对称加密算法:AES,RC4,3DES 客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
- HASH算法:MD5,SHA1,SHA256 在确认握手消息没有被篡改时
客户端如何验证证书的合法性
1. 验证证书是否在有效期内
在服务端面返回的证书中会包含证书的有效期,可以通过失效日期来验证 证书是否过期;
2. 验证证书是否被吊销了。
被吊销后的证书是无效的。验证吊销有CRL(证书吊销列表)和OCSP(在线证书检查)两种方法。
证书被吊销后会被记录在CRL中,CA会定期发布CRL。应用程序可以依靠CRL来检查证书是否被吊销了。
CRL有两个缺点,一是有可能会很大,下载很麻烦。针对这种情况有增量CRL这种方案。二是有滞后性,就算证书被吊销了,应用也只能等到发布最新的CRL后才能知道。
增量CRL也能解决一部分问题,但没有彻底解决。OCSP是在线证书状态检查协议。应用按照标准发送一个请求,对某张证书进行查询,之后服务器返回证书状态。
OCSP可以认为是即时的(实际实现中可能会有一定延迟),所以没有CRL的缺点。
3. 验证证书是否是上级CA签发的。
windows中保留了所有受信任的根证书,浏览器可以查看信任的根证书,自然可以验证web服务器的证书;
是不是由这些受信任根证书颁发的或者受信任根证书的二级证书机构颁发的(根证书机构可能会受权给底下的中级证书机构,然后由中级证书机构颁发中级证书);
在验证证书的时候,浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证,只有路径中所有的证书都是受信的,整个验证的结果才是受信;