http/https最大的差异在于https使用了加密传输数据。
https 基于tcl/ssl加密,大致上是先使用RSA(非对称加密)传输AES(对称加密)的秘钥,握手成功验证通过后通过随机生成的AES秘钥来进行通讯数据的加密。
具体步骤可以分为:
- 客户端将自己支持的一套加密规则发送给服务端
- 服务端选出一种加密算法和HASH算法,并将自己的身份信息以证书的形式发回给客户端(证书包含了网站地址、加密公钥、以及证书的颁发机构等信息)
- 客户端拿到证书后执行以下操作:
① 验证证书的合法(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)
② 如果证书合法或者用户接受不受信任的证书,将生产一串随机密码(对称加密秘钥),并用提供的证书加密
③ 使用约定好的HASH计算握手信息,并使用生成的随机密码对消息加密
④ 将之前生成的所有信息发送给服务端 - 服务端接受客户端信息后执行以下操作:
① 解密获取随机密码,用随机密码解密消息获取握手信息HASH值,并校验
② 使用随机密码加密一段握手信息,发送给客户端 - 客户端验证服务端发过来的加密握手信息。如果HASH一致,此握手过程结束,之后的通信数据将由之前的客户端生成的随机密码用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256