Tomcat开启SSL8443端口的方法

应用场景

将服务器端看作是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


赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏