上一篇已详细说了java 自带工具keytool来对证书操作的过程,本篇将实战TOMCAT 6 中配置HTTPS并能在通过web service及hessian来访问。

一、生成keystore

     keytool -genkey -alias 4sonline -keyalg RSA -keystore 4sonline.keystore -dname “CN=4sonline.cn, OU=4sonline.cn, O=4sonline.cn, L=SH, ST=SH, C=CN” -keypass      4sonline -storepass 4sonline (CN 为域名这样能确保web service及hessian能访问)。

二、 导出证书

    keytool -export -alias 4sonline -keystore 4sonline.keystore -file 4sonline.cer -storepass 4sonline

三、 导入证书

    keytool -import -file 4sonline.cer -storepass 4sonline -keystore 4sonline.truststore -alias serverkey -noprompt

四、将所访问的https站点的证书加入jre的信任证书中 

    keytool -import -alias 4sonline -keystore “%JAVA_HOME%/JRE/LIB/SECURITY/cacerts”  -trustcacerts -file 4sonline.cer -storepass 4sonline

    如果出现 keytool错误: java.io.IOException: Keystore was tampered with, or password was incorrect 则把%JAVA_HOME%/JRE/LIB/SECURITY的cacerts文件删除就可以了。

五、 TOMCAT 6中server.xml文件配置

    <Connector port=”443″  protocol=”org.apache.coyote.http11.Http11Protocol” 

               maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
               enableLookups=”true” disableUploadTimeout=”true”
               acceptCount=”100″ scheme=”https” secure=”true”
      SSLEnabled=”true” clientAuth=”false”
      keystoreFile=”c:4sonline.keystore” keystorePass=”4sonline”
      truststoreFile=”c:4sonline.truststore” truststorePass=”4sonline”/>
属性说明:
 port:     这个port属性(默认值是8443)是 TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过               ,在许多操 作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。redirectPort: 如 果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制               页面的用户,指明根据 Servlet 2.4 Specification要求,SSL是必需的。clientAuth: 如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认               证书也可以, 就把这个值设定为want 。keystoreFile: 如 果你产生的keystore文件不在Tomcat期望的默认地方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名               称, 或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。keystorePass: 如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码 (就是changeit),添加这个元素。keystoreType: 如果使用一个PKCS12 keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12。sslProtocol: 要在这个socket上被使用的加密/解密协定。如果你在使用Sun的JVM,我们不提倡更改 这个值。据报道,TLS协定的IBM’s 1.4.1 实现与一些通用的浏览器不               兼容。 如果是这样,就使用value SSL。ciphers: 这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。algorithm: 可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。truststoreFile: 用来验证用户认证书的TrustStore文件。truststorePass: 访问TrustStore的密码。默认值就是keystorePass的值。truststoreType: 如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。 合法的值是JKS和PKCS12keyAlias: 如果 keystore 里面有多个 key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用。

记住该记住的,忘记该忘记的,改变能改变的,接受不能改变的!