应用场景
将服务器端看作是CAS服务器,而客户端怎是web应用。web应用要通过CAS服务器实现单点登录等功能
1、具体步骤
前提:安装jdk以及tomcat,并且配置好jdk的环境变量(JAVA_HOME和PATH)
a. 使用javatool生成keystore
运行——cmd——进入jdk的安装目录——bin目录,使用命令如下图
tips:名字和姓氏所输入的是网站的域名或者ip,这里测试所使用的是localhost
b. 修改tomcat配置文件server.xml
打开x:\x\Apache Software Foundation\tomcat 7.0.54\conf文件夹中的server.xml
将 Connector port="8443" 这个节点取消注释并替换成
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" enableLookups="false" acceptCount="100" disableUploadTimeout="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:/Program Files/Java/keystore-file" keystorePass="123456" />
tips:keystoreFile是指keystore的存放地址,keytool生成的keystore文件默认是存放在jdk的bin目录下,可自行拷贝到任一目录。
2、测试
启动tomcat。双击tomcat/bin文件夹中的startup.bat
在浏览器中输入 https://localhost:8443 出现如下界面,则表示https 8443端口配置成功
Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议:
1.用JDK自带的Keytool生成服务器证书:
1) 打开终端控制台,转向tomcat主目录,执行生成keystore文件命令:
keytool -genkey -alias tomcat -keyalg RSA -keypass tomcat -storepass tomcat -keystore server.keystore -validity 3600
——在tomcat主目录下生成server.keystore文件;
2) 根据keystore文件产生的证书请求,向CA申请服务器数字证书:
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass tomcat
——在tomcat主目录下生成server.cer文件;
3) 将信息中心签发的服务器证书server.cer导入到server.keystore文件:
keytool -import -trustcacerts -alias tomcat -file server.cer -keystoreserver.keystore -storepass tomcat
2.用JDK自带的Keytool生成客户端证书:
1) 为支持证书顺利导入到IE和Firefor,证书格式为PKCS12,命令如下:
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -validity 3600 -keystore client.p12 -storepass client -keypass client
——在tomcat主目录下生成client.p12文件;
2) 让服务器信任客户端证书:
双向SSL认证,服务器要信任客户端证书,因此要把客户端证书添加为服务器的信任认证,由于不能直接将PKCS12格式的证书导入,要先把客户端证书导出为一个单独的CER文件,命令:
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass client -rfc -file client.cer
——在tomcat主目录下生成client.cer文件;
将client.cer导入到服务器的证书库server.keystore,添加为一个信任证书:
keytool -import -v -file client.cer -keystore server.keystore -storepass tomcat
——认证已添加至keystore中
3) 通过list命令查看服务器的证书库,可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:
keytool -list -keystore server.keystore -storepass tomcat
4) 删除命令:
keytool -delete -alias myKey -keystore server.keystore -storepass tomcat
3.修改tomcat配置:conf/server.xml
<!-- Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation --> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="server.keystore" keystorePass="tomcat" truststoreFile="server.keystore" truststorePass="client" />
1) clientAuth="true",双向认证;
2) clientAuth="false",单向认证;
4.重新启动tomcat,执行./bin/startup.sh命令,访问https://127.0.0.1:8443
1) clientAuth="false",单向认证,成功打开tomcat首页;
2) clientAuth="true",双向认证,打开Firefox菜单:编辑->首选项->高级->加密->查看证书->你的证书,将client.p12导入到IE中,按照Firefox提示完成登录tomcat首页;
5.服务器SSl证书获取代码
//如果是SSL通信 if(request.isSecure()) { Java.security.cert.X509Certificate[] certs=(java.security.cert.X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate"); if(certs!=null && certs.lengtt>0) { subjectDN="Certificates found"; } }
使用Java解析证书可获取证书中用户信息
issue=certs.getIssuerDN().toString(); //证书签发者 subject=certs.getSubjectDN().getName(); //证书所有者 after=certs.getNotAfter().toString(); //证书起效时间 before=certs.getNotBefore().toString(); //证书到期时间 version=Integer.toString(certs.getVersion()); //证书版本 serialno=certs.getSerialNumber().toString(); //证书序列号
参考文献
http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html