• 原因:登陆中敏感信息(例如:密码)都是明文传输的
• 解决方案:对传输的明文进行加密,然后在服务器端解密
• 具体实现:
1、在服务器端通过创建工具类RSAUtil,通过RSAUtil工具类可以获取RSA加密算法的公钥、私钥、加解密方法
2、前端通过该工具类获得公钥对密码进行加密,使用加密后的密文进行传输
引入jsencrypt.min.js
3、在服务器端接收到密文之后进行解密
使用上述方法虽然对密码进行了加密,但是通过网络劫持一样可以获得加密后的密码,只要跳过加密的代码,使用加密后的密码仍然可以登录到系统,没有解决根本问题
应该使用https具有安全性的ssl加密传输协议,这样可以做到防劫持
1、使用jdk自带的keytool工具生成免费的SSL证书(windows和linux系统相同)
• 生成服务器端秘钥:keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -ext san=ip:172.16.124.79 -validity 365 -keystore C:/tomcat.keystore -storepass 123456
这里最主要的是名字与姓氏,这里填写主机名、ip地址或域名,其他可以选填
参数解释
|
• 为客户端生成证书:keytool -genkey -alias client -keypass 123456 -keyalg RSA -storetype PKCS12 -keypass 123456 -storepass 123456 -keystore C:/client.p12
操作和上面一样
参数解释
|
• 服务器添加客户端证书信任
将.p12格式的证书导出为Cer文件,方便导入证书库中:keytool -export -alias client -keystore C:/client.p12 -storetype PKCS12 -keypass 123456 -file C:/client.cer
将client.cer导入到服务器证书中,添加为一个受信任证书:keytool -import -v -file C:/client.cer -keystore C:/tomcat.keystore -storepass 123456
2、在tomcat的server.xml中配置开启SSL认证
• 在server.xml中加入下面配置
配置项
|
这里说明一下,如果是tomcat7需要将将protocol="HTTP/1.1"改成protocol=” org.apache.coyote.http11.Http11Protocol”,(Tomcat提供了两个SSL实现,一个是JSSE实现,另一个是APR实现,6.0默认使用JSSE实现,而7.0默认使用APR实现,本文中的采用的是jsse的实现)
3、在web.xml中加入配置是http请求重定向到https
配置项
|
通过这样就把tomcat项目从http协议转成了https协议
说明:使用自签名SSL证书是不受浏览器信任的,所以直接将自签名的证书导入受信任跟证书颁发机构浏览器也会提示不安全,所以只有通过浏览器下载证书导入到受信任跟证书颁发机构浏览器才会信任该证书。