一般都会把两者并称(SSL/TLS),因为这两个可以视作是同一个东西的不同阶段。TLS为SSL的继任者
SSL: Secure Socket Layer
位于可靠的面向连接的网络层协议和应用层协议之间的一种协议。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。SSL被标准化之后名称改为TSL(Transport Layer Security),传输层安全协议。
- SSL记录协议
- SSL握手协议
SSL协议提供的服务:
- 鉴别:认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 保密性:加密数据以防止数据中途被窃取;
- 完整性:维护数据的完整性,确保数据在传输过程中不被改变。
SSL工作流程:
服务器认证阶段(强制):
- 客户端向服务器发送一个开始信息『hello』以便开始一个新的会话连接;
- 服务器根据客户的信息确定是不是要生成新的主密钥,如需要,则服务器在响应客户的『hello』信息时将包含生成主密钥所需的信息;
- 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
- 服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段(可选):
在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
握手过程:
找到两张图,可以说描述得非常清楚了。
HTTP
顺带说几句HTTP。
HTTP对TCP的连接分为『长连接』和『短连接』。长连接就是经常看到的Keep-Alive。在短连接的情况下,访问一个网站时,浏览器会发起一个TCP连接,拿到HTML源码,然后断开连接,分析这个源码,发现需要请求的资源时,再针对每个资源,分别建立TCP连接去请求这些资源。而长连接则会由浏览器发起一个TCP连接抓取页面,拿到HTML源码后,不会立即断开连接,分析到需要请求的资源时,就再用刚才的TCP连接去请求外部资源。
HTTPS即HTTP over SSL。为了解决HTTP协议明文传输带来的种种不安全性。
HTTPS的需求主要在这几个方面:
- 兼容性
- 可扩展
- 保密性
- 完整性
- 真实性
最后还有一个性能问题,比如在选择加密算法的时候,虽然非对称加密要比对称加密能干的事情多,但是它的性能在通常情况下却要比对称加密差很多,这是在设计SSL协议的时候需要权衡的一方面。还有,SSL协议在建立连接的握手阶段,也就是在还没有协商出用什么加密方式加密时,传输的内容都是用明文的,所以这一阶段也需要考虑安全问题。