SSL安全套接字协议
关于加密,主要有两大类算法:
对称加密: 常见的DES算法,其包含一个**,加密和解密过程使用的是同一个**。
非对称加密:常见的RSA算法,存在一组public key 和 private key 即一组公钥和私钥
- 采取公钥加密的数据通过私钥解密
- 采取私钥加密的数据通过公钥解密。
Hash算法:常见的MD5 SHA 用于生成一段序列的摘要,密码数据库基本都是Hash存储。
Hash是这样一类函数,能够将原始序列经过一些列Hash散列运算生成一个消息摘要,其主要特点是不可逆:
- 给定一个Hash结果,没有确切办法获知其原文。
- 给定Hash结果R,即使某个序列S的Hash摘要也为R 也不能断定原文就是S (因为存在Hash冲突)
早期的网络数据传输采取明文传输,其内容很容易被中间窃取和篡改,而后有了对称加密的意思,提出了DES加密算法,其通过一个56bit的**进行加密解密,需要事先通信双方确认对称**,随着计算水平的提高,暴力**成为可能,逐渐演变出AES256bit对称加密算法。
对称加密的局限性和不安全性使得非对称加密算法逐渐流行,其基本过程如下:
- 首先双方都产生自己的一组私钥,公钥。同时将公钥移交给对方(公钥可能被窃取)
- 甲方将待发送的数据的hash值,用自己的私钥加密。
- 甲方将待发送的数据用乙方提供的公钥加密。
- 甲方将加密后的数据和加密后的Hash值一起发送给乙方
- 乙方使用甲方的公钥解密Hash值
- 乙方使用自己的私钥解密数据,并运行一个Hash算法
- 通过比对两个Hash值,确认数据确实是由甲方发出(因为途中甲乙双方私钥和公钥都参与了过程)
可以看到非对称加密传输过程,双方的私钥公钥都参与了计算,似乎完美无缺,但仍然有安全风险。即:双方在交换公钥public key的时候,被第三方劫持,并伪造成自己的public key,和甲乙双方通信。
解决此类问题,出现了CA数字证书技术,其本质是通过权威机构验证public key的身份。
- 甲方乙方将自己的public key交由CA机构,
- CA通过自己的私钥加密public key,加密完的数据即为数字证书
- 双方交换数字签名后,使用CA的公钥解密成功,即可确认这是经过CA认证的public key
数字证书无法被伪造,因为伪造的证书无法通过CA公钥解密,而CA公钥解密通常内嵌在浏览器中。
因此一个安全的SSL套接字传输过程为:
- 首先发送数字证书,获取到可信的public key
- 通过public key发送对称秘钥,接收方用私钥解密。
- 通信双方使用仅仅对方可知的对称秘钥进行加密传输
SSL协议使用最多在HTTPS协议中,其通过在HTTP外层添加SSL协议层,通过TCP 443端口实现身份认证和传输加密。
由此可见HTTPS主要特点如下:
- 通过数字证书确认服务器身份,获知服务器公钥
- 将对称加***通过非对称进行传输沟通
- 之后的通信过程采取对称加密
另外,由于采取HTTPS需要建立安全连接,因此会带来一定的性能开销。另外服务器的数字证书需要第三方权威机构CA认证,需要一定的成本,https握手阶段的耗时对一些低延迟要求的网站也不太可取。