SSL(Secure Sockets Layer 加密套接字协议层)
SSL是一个安全协议,它提供使用TCP/IP的通信应用程序间的隐私与完整性。因特网的超文本传输协议(HTTP)使用SSL来实现安全的通信。
基本逻辑:
1、生成服务端密钥库并导出证书;( 生成server.jks文件服务器需要识别)
2、生成客户端密钥库并导出证书;( 生成custom.p12文件)
3、根据客户端密钥库生成客户端信任的证书;( 将custom.p12文件生成custom.cer文件)
4、将客户端证书导入服务端密钥库;( 将custom.cer文件导入server.jks文件)
5、将服务端证书导入浏览器。( 将server.jks文件生成server.cer文件浏览器需要识别)
一.tomcat6配置双向认证
1、生成服务器端证书
强调:服务端的CN值必须为域名,不然客户端认证时为非法。
2、生成客户端证书
客户端的CN可以是任意值。
3、由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,我们
(1)必须先把客户端证书导出为一个单独的CER文件,使用如下命令,先把客户端证书导出为一个单独的cer文件:
(2)然后,添加客户端证书到服务器中(将已签名数字证书导入密钥库) 将客户端cer文件导入到tomcat可以识别的文件.jks文件
(3)从服务器证书库中导出服务器证书 (把server.cer文件导入到浏览器中才不会报证书错误)浏览器需要识别服务器cer文件
4、查看证书详细(-v)内容
5、配置Tomcat service.xml文件
不设置truststoreFile,truststorePass属性,即默认指向"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS"文件(JKS类型),则在双向认证中,需把客户端认证导入到此
文件中.
clientAuth=”true”表示双向认证 浏览器必须导入p12文件否则看不到登录页面
将tomcat的protocol参数由"HTTP/1.1"改成"org.apache.coyote.http11.Http11Protocol"
6、导入客户端证书到浏览器
双向认证需要强制验证客户端证书。 双击“custom.p12”即可将证书导入至IE中。 在生成服务器端证书中的cn=127.0.0.1必须用这个ip不然会说证书错误。
安装证书时需要选择 将证书放入下列存储 然后点击 受信任的根证书
访问时必须:hppts://127.0.0.1:80/xxxx的形式 即使是80也需要加上而不能去掉
二.tomcat6配置单向认证
1、生成服务器端证书
2、从服务器证书库中导出服务器证书(把server.cer文件导入到浏览器中才不会报证书错误)
3、由于是单向认证,没有必要生成客户端的证书,直接进入配置tomcat service.xml文件,Xml代码
clientAuth="false"表示单向认证,同时去掉服务端的可信任认证,即:truststoreFile="D:/server.jks" truststorePass="password"这2个属性。
单向认证只需要把服务端的认证导入浏览器即可,而双向认证则需要安装用户的.p12文件和服务端认证。
当使用双向认证时可以在后台获得证书(注意是双向认证clientAuth=”true”时才能得到):
参考: http://www.blogjava.net/algz/articles/345601.html
http://www.blogjava.net/icewee/archive/2012/06/04/379947.html
SSL是一个安全协议,它提供使用TCP/IP的通信应用程序间的隐私与完整性。因特网的超文本传输协议(HTTP)使用SSL来实现安全的通信。
基本逻辑:
1、生成服务端密钥库并导出证书;( 生成server.jks文件服务器需要识别)
2、生成客户端密钥库并导出证书;( 生成custom.p12文件)
3、根据客户端密钥库生成客户端信任的证书;( 将custom.p12文件生成custom.cer文件)
4、将客户端证书导入服务端密钥库;( 将custom.cer文件导入server.jks文件)
5、将服务端证书导入浏览器。( 将server.jks文件生成server.cer文件浏览器需要识别)
一.tomcat6配置双向认证
1、生成服务器端证书
X:\>keytool -genkey -keyalg RSA -dname "cn=127.0.0.1,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore d:\server.jks -storepass password -validity 3650
强调:服务端的CN值必须为域名,不然客户端认证时为非法。
2、生成客户端证书
X:\>keytool -genkey -keyalg RSA -dname "cn=sango,ou=sango,o=none,l=china,st=beijing,c=cn" -alias custom -storetype PKCS12 -keypass password -keystore d:\custom.p12 -storepass password -validity 3650
客户端的CN可以是任意值。
3、由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,我们
(1)必须先把客户端证书导出为一个单独的CER文件,使用如下命令,先把客户端证书导出为一个单独的cer文件:
X:\>keytool -export -alias custom -file d:\custom.cer -keystore d:\custom.p12 -storepass password -storetype PKCS12 -rfc
(2)然后,添加客户端证书到服务器中(将已签名数字证书导入密钥库) 将客户端cer文件导入到tomcat可以识别的文件.jks文件
X:\>keytool -import -v -alias custom -file d:\custom.cer -keystore d:\server.jks -storepass password
(3)从服务器证书库中导出服务器证书 (把server.cer文件导入到浏览器中才不会报证书错误)浏览器需要识别服务器cer文件
keytool -export -v -alias server -keystore d:\server.jks -storepass password -rfc -file d:server.cer
4、查看证书详细(-v)内容
keytool -list -v -keystore d:\server.jks -storepass password
5、配置Tomcat service.xml文件
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:/server.jks" keystorePass="password" truststoreFile="D:/server.jks" truststorePass="password" />
不设置truststoreFile,truststorePass属性,即默认指向"%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS"文件(JKS类型),则在双向认证中,需把客户端认证导入到此
文件中.
clientAuth=”true”表示双向认证 浏览器必须导入p12文件否则看不到登录页面
将tomcat的protocol参数由"HTTP/1.1"改成"org.apache.coyote.http11.Http11Protocol"
6、导入客户端证书到浏览器
双向认证需要强制验证客户端证书。 双击“custom.p12”即可将证书导入至IE中。 在生成服务器端证书中的cn=127.0.0.1必须用这个ip不然会说证书错误。
安装证书时需要选择 将证书放入下列存储 然后点击 受信任的根证书
![](https://i-blog.csdnimg.cn/blog_migrate/6a8516306d327eea6c6f656aaca691cf.jpeg)
访问时必须:hppts://127.0.0.1:80/xxxx的形式 即使是80也需要加上而不能去掉
二.tomcat6配置单向认证
1、生成服务器端证书
X:\>keytool -genkey -keyalg RSA -dname “cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn” -alias server -keypass password -keystore d:\server.jks -storepass password -validity 3650
2、从服务器证书库中导出服务器证书(把server.cer文件导入到浏览器中才不会报证书错误)
keytool -export -v -alias server -keystore d:\server.jks -storepass 123456 -rfc -file d:server.cer
3、由于是单向认证,没有必要生成客户端的证书,直接进入配置tomcat service.xml文件,Xml代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:/server.jks" keystorePass="password"/>
clientAuth="false"表示单向认证,同时去掉服务端的可信任认证,即:truststoreFile="D:/server.jks" truststorePass="password"这2个属性。
单向认证只需要把服务端的认证导入浏览器即可,而双向认证则需要安装用户的.p12文件和服务端认证。
当使用双向认证时可以在后台获得证书(注意是双向认证clientAuth=”true”时才能得到):
X509Certificate[] certs = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
System.out.println(certs[0].getSigAlgName());
参考: http://www.blogjava.net/algz/articles/345601.html
http://www.blogjava.net/icewee/archive/2012/06/04/379947.html