原理
服务器给客户端颁发一个证书,客户端发送请求前,用证书做加密,到达服务器后,服务器用根证书解密。
密码学相关概念
密钥
通常是一个字符串或数字,进行加密/解密算法时使用。
公钥和私钥都是密钥,只不过一般公钥是对外开放的,加密时使用;私钥是不公开的,解密时使用。
非对称加密
使用公钥加密,在客户端与服务器相互验证的过程中用的就是非对称加密算法。
有 RSA、DSA/DSS、Elgamal、Rabin、D-H、ECC 等;
RSA 密码体制就是公钥密码体制,RSA 的一对公钥和私钥都可以用来加密和解密。
公钥加密后只能由私钥解密;私钥加密后只能由公钥解密。
对称加密
使用私钥加密,加密使用的密钥和解密使用的密钥是同一个密钥。
有 AES、DES、3DES、TDEA、Blowfish、RC4、RC5、IDEA 等。
由于加密算法是公开的,若要保证安全性,私钥不能对外公开。
通常用来加密消息体。
数字证书
包括公钥,签名使用的算法,证书有效期,颁发机构。
数字签名
如果使用私钥对所有信息进行加密,开销太大,一般的做法是对信息做个 hash 计算,然后用私钥对这个计算值进行加密,得到一个数字签名。

验证过程
1)客户端发起一个 http 请求,连接到服务器的 443 端口。
2)颁发证书
服务端把自己的信息以数字证书的形式返回给客户端。
证书中有一个公钥来加密信息,私钥由服务器持有。
3)验证证书的合法性
客户端收到服务器的响应后会先验证证书的合法性(证书中包含的地址与正在访问的地址是否一致,证书是否过期)。
4)生成对称加密算法
如果验证通过,浏览器就会生成一个随机码 key;
浏览器用服务器的公钥对随机码 key 加密,传送给服务端,服务端用私钥解密得到随机码 key,以后就用这个随机码对报文进行加密,传送给浏览器后,浏览器用随机码 key 进行对称解密。

总结
HTTPS 实际上就是 HTTP 穿上了 SSL/TLS 的外套,HTTP 属于应用层的协议,而 SSL(安全套接字)与 TLS(运输层安全)都属于运输层协议。其实 SSL 与 TLS 都是上个世纪的产物,最新版本的 TLS 建立在 SSL 3.0 协议规范之上。