SSL 是一种安全传输协议,其全称是 Secure socket layer(安全套接层)。该协议最初由 Netscape 研发,现已成为网络上用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。由于 SSL 技术已经得到所有主流浏览器和 WEB 服务器的支持,因此仅需要安装配置数字证书就可以激活服务器功能了。
SSL的工作原理
SSL协议分为 Handshake Protocol 和 Record Protocol 两个部分。其中 Handshake Protocol 用来协商密钥,协议的大部分内容就是通信双方如何利用它来安全的协商出一份密钥。Record Protocol 则定义了传输的格式。
SSL是一个介于 HTTP 与 TCP 之间的一个可选层,如果利用 SSL 协议来访问网页,其步骤如下:
- 用户:在浏览器的地址栏里输入 https://www.123.com
- HTTP层:将用户需求翻译成HTTP请求,如:
GET /index.htm HTTP/1.1
Host http://www.123.com - SSL层:借助下层协议的的信道,安全的协商出一份加密密钥,并用此密钥来加密HTTP请求。
- TCP层:与服务器的443端口建立连接,传递SSL处理后的数据。
- 接收端(即服务器)与此过程相反。
SSL在TCP之上建立了一个加密通道,通过这一层的数据经过了加密,因此达到保密的效果。
如果上面你看得不太懂的话,我们来看一个更形象的比喻,我们假设 A 与 B 通信,A 是 SSL 客户端,B 是 SSL 服务器端,加密后的消息放在方括号 [ ] 里,以突出和明文消息的区别。双方的处理动作的说明用圆括号( )括起。
A:
我想和你安全的通话,我这里的对称加密算法有 DES,RC5,密钥交换算法有 RSA 和 DH,摘要算法有 MD5 和 SHA。
B:
我们用 DES - RSA - SHA 这对组合好了。这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给 A )。目前没有别的可说的了。
A:
(查看证书上 B 的名字是否无误,并通过手头早已有的 CA 的证书验证了
B 的证书的真实性。如果其中一项有误,发出警告并断开连接。这一步保证了 B 的公钥真实性。)(产生一份秘密消息,这份秘密消息处理后将用作加密密钥,加密初始化向量和hmac的密钥。将这份秘密消息-协议中称为 per_master_secret 用 B 的公钥加密,封装成称作 Client Key Exchange 的消息。由于用了 B 的公钥,保证了第三方无法窃听。)
我生成了一份秘密消息,并用你的公钥加密了,给你(把 Client Key Exchange 发给 B)
注意,下面我就要用加密的办法给你发消息了!(将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥。)
[我说完了]
B:
(用自己的私钥将 Client Key Exchange 中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和 hmac 的密钥,这时双方已经安全的协商出一套加密办法了。)
注意,我也要开始用加密的办法给你发消息了!
[我说完了]
A:
[我的秘密是……]
B:
[其它人不会听到的……]