仅供备忘。 



在 Tomcat 5.0 中启用 HTTPS 的连接。 

重要提示:两种容易出错的情况 
1、keystore的密码与tomcat的主密码不一致;在接下来的步骤中,请把这两个密码输入成相同的; 
2、用来生成keystore的java版本与运行tomcat的java版本不一致;运行下面的命令之前,先检查一下。 
wakan@wakan:~/tomcat2/bin>which java 
/home/jdk150/bin/java 
在启动tomcat时,看看所用的JAVA_HOME是不是上面的/home/jdk150,如果不是,请修改用户的profile文件,或者修改tomcat的启动文件。 
最简单的做法是在/etc/profile文件中加入下面几行,然后重新登录,再进行后续操作: 
JAVA_HOME=/home/jdk150 
PATH=$JAVA_HOME/bin:$PATH 
export JAVA_HOME PATH 

一、生成 KeyStore 

这一步比较简单,利用 JDK 自带的 keytool 即可完成。命令如下: 

wakan@wakan:~/tomcat2/bin>  keytool -genkey -alias tomcat -keyalg RSA 
输入keystore密码:  ************ 
您的名字与姓氏是什么? 
  [Unknown]:  aaa 
您的组织单位名称是什么? 
  [Unknown]:  bbb 
您的组织名称是什么? 
  [Unknown]:  ccc 
您所在的城市或区域名称是什么? 
  [Unknown]:  BeiJing 
您所在的州或省份名称是什么? 
  [Unknown]:  BeiJing 
该单位的两字母国家代码是什么 
  [Unknown]:  CN 
CN=aaa, OU=bbb, O=ccc, L=BeiJing, ST=BeiJing, C=CN 正确吗? 
  [否]:  是 

输入<tomcat>的主密码 
        (如果和 keystore 密码相同,按回车): 

特别说明:上边输入的“<tomcat>的主密码”,与keystore密码一定要相同,否则TOMCAT起不来。至少我试了几次都不行。报错如下: 
2007-3-26 17:07:01 org.apache.coyote.http11.Http11BaseProtocol init 
严重: Error initializing endpoint 
java.io.IOException: Cannot recover key 
        at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14Socket Factory.java:125) 

二、修改 server.xml 

在 TOMCAT/conf/server.xml 中,修改与 SSL 相关的那一段,我改成下面这样: 
    <!-- Define a SSL HTTP/1.1 Connector on port 8443 --> 
    <Connector port="8443" maxHttpHeaderSize="8192" 
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
               enableLookups="false" disableUploadTimeout="true" 
               acceptCount="100"  scheme="https" secure="true" keystorePass="******" 
               clientAuth="false" sslProtocol="TLS" /> 

这里要指定keystorePass,如果写错了,会出现下边的错误: 
严重: Error initializing endpoint 
java.io.IOException: Keystore was tampered with, or password was incorrect 
        at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:768) 

三、启动 Tomcat 

这一步比较简单,就不多说了。启动完成后,在浏览器中输入: https://localhost:8443,即可看到TOMCAT的主页面。 

wakan@wakan:~/tomcat2/bin> ./startup.sh 
Using CATALINA_BASE:   /home/wakan/tomcat2 
Using CATALINA_HOME:   /home/wakan/tomcat2 
Using CATALINA_TMPDIR: /home/wakan/tomcat2/temp 
Using JRE_HOME:       /home/jdk150/jre 
2007-3-26 17:09:39 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 










利用keytool产生自签证书的步骤2如下: 

第一步,用-genkey命令选项,产生公私密钥对。在控制台界面输入:keytool -genkey -alias testkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA。这里的-alias表示使用这对公私密钥产生新的keystore入口的别名(keystore是用来存放管理密钥对和证书链的,缺省位置是在使用者主目录下,以.keystore为名的隐藏文件,当然也可指定某个路径存放.keystore文件);-keyalg是产生公私钥对所用的算法,这里是RSA;-keysize定义密钥的长度;-sigalg是签名算法,选择MD5withRSA,即用RSA签名,然后用MD5哈希算法摘要。接下来,系统会提示进行一些输入: 

输入keystore密码:  abc123 
            您的名字与姓氏是什么? 
            [Unknown]:  Li 
            您的组织单位名称是什么? 
            [Unknown]:  InfosecLab 
            您的组织名称是什么? 
            [Unknown]:  InfosecLab Group 
            您所在的城市或区域名称是什么? 
            [Unknown]:  Beijing 
            您所在的州或省份名称是什么? 
            [Unknown]:  Beijing 
            该单位的两字母国家代码是什么 
            [Unknown]:  CN 
            CN=Li, OU=InfosecLab, O=InfosecLab Group, L=Beijing, ST=Beijing, C=CN 正确吗? 
            [否]:  y 
            输入 <testkeypair>的主密码 (如果和 keystore 密码相同,按回车): 



第二步,产生自签证书,输入以下命令: 

keytool -selfcert -alias testkeypair -dname "CN=Li, OU=InfosecLab, O=InfosecLab 
            Group, L=Beijing, ST=Beijing, C=CN" 
            输入keystore密码:  abc123 



第三步,导出自签证书,由上面两步产生的证书,已经存放在以“testkeypair”为别名的keystore入口了,如果使用其文件,必须导出证书。输入: 

keytool -export -rfc -alias testkeypair -file mycert.crt 
            输入keystore密码:  abc123 
            保存在文件中的认证 <mycert.crt> 



这样,就得到了一个自签的证书mycert.crt。注意,选项rfc是把证书输出为RFC1421定义的、用Base64最终编码的格式。