TCP/IP是传输层协议, http是应用层协议。web使用http协议作应用层协议,封装http明文数据,然后使用tcp/ip做传输层协议将它通过网络传输。http协议以明文方式传输内容,不提供数据加密。https,安全套接字层超文本传输协议。https在http的基础上加入ssl(secure sockets layer 安全套接层)协议,ssl依靠证书来验证服务器的身份,并为客户端(client)和服务器(server)之间的通信加密。https是http下加入ssl层,https的安全基础是ssl。http直接用tcp进行数据传输,而https经过一层ssl,用的端口不一样,http是80,https是443。
https协议服务器须有数字证书,可以是自己制作或者ca(certificate authority)证书。自己颁发的证书需要客户端验证通过,才可以继续访问,使用ca证书则不会弹提提示窗。这套证书是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。公钥含了很多公开信息,如证书颁发机构,过期时间等。
客户使用https的url访问服务器,要求与web服务器建立ssl连接。客户端收到服务端证书后首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出窗警告,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。
客户端发给服务器端加密后的随机值,让服务端得到这个随机值,随后客户端和服务器端的通信就以这个随机值来加密解密。服务器端用私钥解密后,得到客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。对称加密是将信息和私钥通过某种算法混合在一起,除非知道私钥,否则无法获取明文内容,而恰好客户端和服务器端都知晓此私钥,所以只要加密算法足够复杂和精巧,数据就够安全。此后,服务器端传输给客户端的信息,是服务器端用私钥加密后的信息,客户端可解密还原。
https协议的作用有二:
一,建立信息安全通道,来保证数据传输的安全;
二,确认服务器的合法性。服务器端从http切换到https需要把url链接由http改为https。作为兼容性考虑,一般服务器端支持http和http两种。https是现行架构下相对安全的解决方案,虽然不是绝对安全,但它大幅度增加了中间人攻击的成本。但是https协议握手阶段比较费时,https协议需要ca申请证书或自制证书,会使数据的加载时延变长。https缓存不如http高效,会增加额外开销和能耗。
http是明文传输,https报文组装成tcp报文时加密,https的header,以及body都被加密。https使用加密与hash算法:
对称加密算法:aes,rc4,3des。对称加密(encryption)与解密(decryption)用的是同样的密钥(secret key),对称加密优点是快、简单,效率高。
非对称加密算法:rsa,dsa/dss。非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。最常用的非对称加密算法是RSA算法。
hash算法:md5,sha1,sha256。