2007年12月4日星期二

JavaSecurity_006:SSL 介绍 (摘录+整理)

SSL:Secure Sockets Layer。
SSL是用于对TCP/IP数据流进行加密的协议,同时还包括了身份认证(X.509证书)和数据完整性校验(消息验证码)等内容。
TLS (Transport Layer Security) 也是用于传输层加密的协议,一般认为TLS1.0 与SSL3.1相当。SSL可以用在任何面向连接的通信,用在HTTP上,就是HTTPS。
当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:

  1. 用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。

  2. 服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。
    如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。

  3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,继续。

  4. 客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。

  5. 如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。

  6. 如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。
    如果不在信任列表中,结束本次会话。
    如果检查通过,服务器用自己的私钥解密收到的pre-master secret,并用它通过某些算法生成本次会话的master secret。

  7. 客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。
    在双方SSL握手结束后传递任何消息均使用此会话密钥。
    这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。

  8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。

  9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。

  10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。

参考文献:
1. 《配置Tomcat 4使用SSL
2. 《Java安全性编程指南》第9章 译者 庞南 管和昌 陈立志

没有评论: