在此总结下https协议原理。
http问题
1)明文传输数据,被抓包后很容易可以看出传输内容,传输敏感数据有安全问题。
2)不能保证进行http通信的客户端与服务器是合法的。
为了解决这两个问题,需要对http数据进行加密和对通信双方进行认证。https就是在http协议的下层加了一个ssl协议,通过ssl实现了上述加密和认证的功能。
https协议原理
通常,http直接和tcp通信。而https协议,则是http和ssl通信,ssl和tcp通信,加解密的功能在ssl层实现。ssl是独立于http的协议,也可以用于应用层的smtp、telnet等协议。
要了解ssl原理,先要理解公钥加密和对称加密。公钥加密的优点是传输秘钥方便,除了加密还可以做认证,缺点是运行比对称加密慢很多。对称加密缺点是不方便传输秘钥,优点是加密速度快。ssl结合了公钥加密和对称加密的优点,使用公钥加密传输对称加密的秘钥。实际运行中,服务器将通信用的对称秘钥用自身私钥加密后传输给客户端,然后双方通信时使用此对称秘钥对数据进行加解密。
那么客户端如何确保公钥来自服务器?
通过数字认证机构颁发的数字证书,以及客户端内部嵌入的数字认证机构公钥集合。具体流程如下:
1)服务器运营人员向数字认证机构申请证书,申请证书时填入服务器公钥,数字认证机构用自身私钥加密服务器公钥生成一个数字证书(包含认证机构ID、加密后的服务器公钥和公钥明文),然后运营人员把证书放在服务器上。
2)客户端请求时,服务端把自身证书和公钥下发给服务端,客户端通过证书中的数字认证机构ID查询内部嵌入的公钥列表,得到认证机构的公钥,并使用此公钥解密得到服务端公钥,然后验证公钥如果一致,则同时验证了认证结构与服务器的合法性。
https的优缺点
https可以很大程度提高安全性,google、百度等许多大网站全站都实现了https,但使用https时,http处理速度回变慢,一种是多了一层,通信量增加,通信变慢,一种是加解密需要消耗cpu、内存等资源,处理时间增加,负载增加。和使用http相比,可能会变慢2~100倍(数据来自《图解HTTP》),所以只有在需要信息隐藏时才使用https,可以节省资源。
PS:客户端证书与服务端证书原理是一样的,常见的客户端证书比如网银U盾,证书是由银行颁发的,用于在服务器端认证客户。