Security Socket Layer(SSL)技术是一种在传输层实现的安全技术,其使用public key encryption标准加密方式。
SSL作用:保证在非可靠网络上所连接的主机之间的通信安全。
RSA
RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。
RSA算法包含两个密钥:客户端的公共密钥、服务器的私有密钥。只有两个密钥相匹配的时,才能进行安全通信。
数字证书:作用是让用户确认服务器的公共密钥是真的。
数字证书一般包含如下信息:
1:密钥持有者的标识信息;
2:密钥持有者的公共密钥;
3:数字证书中的数字签名信息,其可从certificate authority(证书授权中心)获得。
使用SSL的方法:
1:生成一个密钥库
JDK为此提供了keytool工具生成密钥库。
简单的使用方法:
keytool -genkey -alias name-ssl keyalg RSA -keystore name.keystore -validity 365
2:把生成的密钥库复制到应用服务器中(如:%JBOSS_HOME%/server/default/conf),
3:在服务器中启动SSL连接(如:JBOSS中修改%JBOSS_HOME%/server/default/deploy/jbossweb.sar/server.xml文件)
4:在web.xml中指定使用SSL连接进行登录:
e.g.
<?xml version="1.0" encoding="GBK"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<!-- 声明安全性角色 -->
<security-role>
<role-name>rolename</role-name>
</security-role>
<security-constraint>
<!-- 指定收保护的Web资源集 -->
<web-resource-collection>
<web-resource-name>resource</web-resource-name>
<url-pattern>/*</url-pattern>
<url-pattern>/context/*</url-pattern>
<!-- http-method子元素用于指定只保护指定请求方式的资源 -->
<!--
<http-method>GET || POST</http-method>
-->
</web-resource-collection>
<auth-constraint>
<!-- 访问受保护资源所需的角色 -->
<role-name>rolename</role-name>
</auth-constraint>
<!-- 指定使用SSL安全连接 -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL | INTEGRAL | NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>myRealm</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_fail.jsp</form-error-page>
</form-login-config>
</login-config>
</web-app>