SSL安全通信

SSL安全通信

本文参考了《java网络编程案例教程》这本书,后文所附的源代码仅供学习参考使用。

  • 安全套接字(SSL)是由NetScape公司开发设计的互联网安全通信协议,广泛应用于web浏览器与web服务器之间的安全通信。用户每次在网上下单购物或者登录电子银行,其交易细节都自动进行了一些SSL加密和认证。
    SSL协议在网络交换中的逻辑地位介于TCP传输层与应用层之间。
    SSL/TLS协议的基本原理是采用公钥加密法,也就是说,客户端先向服务器索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
    公钥加密需要解决两个重要问题:
    (1)保证公钥不被篡改。解决方法:通常将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。
    (2)公钥加密计算量太大,不适合加密大数据量的内容。解决方法:每一次对话,客户端生成一个对称秘钥,用对称秘钥加密,运算速度就会非常快。再用服务器公钥加密对称秘钥,客户机将数据和加密的秘钥一起发送给服务器。

  • 处理逻辑:
    1.发送文件之前,文件内容加密之后形成摘要,之后用个人私钥初始化加密模式对摘要生成数字签名。然后再用对称秘钥初始化加密模式加密数字签名,再用服务器公钥初始化加密模式对对称秘钥加密。
    2.接收文件之前,获取服务器私钥和客户机公钥,首先用服务器私钥解密对称秘钥,再在接收端获取对称秘钥解密数字签名,得到摘要,然后用客户机公钥解密摘要。

  • 用keytool生成公钥/私钥
    1.创建一个文件夹用于存放服务器和客户机的**,以c:/keystore为例
    2.按照给出的keytool命令格式,创建客户机**库client.keystore。库中包含公钥/私钥对,**采用RSA算法,**长度为1024位,**库访问密码为123456,私钥访问密码为123456,**有效期为365天,**库别名为client。如下图所示:
    SSL安全通信
    3.按照给出的keytool命令格式,创建服务器**库server.keystore。库中包含公钥/私钥对,**采用RSA算法,**长度为1024位,**库访问密码为123456,私钥访问密码为123456,**有效期为365天,**库别名为server。如下图所示:
    SSL安全通信
    4.按照给出的keytool命令格式,分别给出服务器公钥证书server.cer和客户机公钥证书hzulwy.cer
    SSL安全通信
    5.将服务器公钥证书分发给客户机。为了便于管理,为客户机创建一个公钥库tclient.keystore,集中存放客户机信任的所有公钥证书。
    SSL安全通信
    6.将客户机公钥证书分发给服务器。为了便于管理,为服务器创建一个公钥库tserver.keystore,集中存放服务器信任的所有公钥证书。
    SSL安全通信

源代码链接:
https://github.com/hzulwy/private-project/blob/master/SSL.rar