收到客户咨询,在红旗DC Server 5.0 for x86_64上部署Tomcat的时候,运行http监听正常,但https监听启动后,不能连接。特找个环境测试了一下,以下是操作步骤。
一、系统环境
应用软件:Tomcat 5.5、jdk 1.5.0_04(系统自带)
Tomcat 官方网站:http://tomcat.apache.org/
二、部署Tomcat
1、下载
从官方网站上下载二进制代码包,我选择的是:Binary Distributions – Core:
# tar xzvf apache-tomcat-5.5.27.tar.gz
# mv mv apache-tomcat-5.5.27/ /usr/loca/tomcat5.5.27
2、查看系统自带java版本和路径
执行:
java version "1.5.0_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_04-b05, mixed mode)
# type -a java
java is /usr/bin/java
java is /usr/lib/jdk/bin/java
# ll /usr/bin/java
lrwxrwxrwx 1 root root 26 Dec 30 00:01 /usr/bin/java -> /usr/java/default/bin/java
# ll /usr/java/
total 8
lrwxrwxrwx 1 root root 16 Dec 30 00:01 default -> /usr/java/latest
drwxr-xr-x 9 root root 4096 Sep 20 2007 jdk1.5.0_04
lrwxrwxrwx 1 root root 21 Dec 30 00:01 latest -> /usr/java/jdk1.5.0_04
# rpm -qf /usr/java/latest/bin/java
jdk-1.5.0_04-fcs
可见,系统中默认使用的java是在/usr/java目录,/usr/java/latest是个链接。(系统中/usr/lib/jdk也是个链接)
3、设置环境变量
在/root/.bashrc中增加:
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$HOME/bin:$ORACLE_HOME:$PATH
4、启动Tomcat
执行:
# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat5.5.27
Using CATALINA_HOME: /usr/local/tomcat5.5.27
Using CATALINA_TMPDIR: /usr/local/tomcat5.5.27/temp
Using JRE_HOME: /usr/java/latest/jre
# netstat -ln|grep 8080
tcp 0 0 :::8080 :::* LISTEN
默认界面:
三、部署https
Tomcat可以不需要依赖第三方的Web服务端,可直接支持OpenSSL或JSSE的证书,提供https加密链接访问支持。
以下内容,参考Tomcat官方网站上的:SSL Configuration HOW-TO
1、快速部署
使用jdk提供的keytool工具常见证书:
/root
# keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password: changeit ←需提供一个访问keystore的密码,默认是changeit
What is your first and last name?
[Unknown]: eportal.gz.gd.cpn ←若需要部署CAS等应用,这需和今后使用的域名相同
What is the name of your organizational unit? ←下面的信息会写入证书中供用户获取证书时参考,根据实际情况填写
[Unknown]: redflag
What is the name of your organization?
[Unknown]: redflag
What is the name of your City or Locality?
[Unknown]: GuangZhou
What is the name of your State or Province?
[Unknown]: GuangDong
What is the two-letter country code for this unit?
[Unknown]: GZ
Is CN=eportal.gz.gd.cpn, OU=redflag, O=redflag, L=GuangZhou, ST=GuangDong, C=GZ correct?
[no]: yes
Enter key password for <tomcat>
(RETURN if same as keystore password): changeit ←这需要填入访问key的密码,该密码用于区别存在于keystore中的其他证书。但按照Tomcat上的说明,必须和前面keystore密码相同
完成后,会在用户主目录/root/下生成证书文件.keystore:
-rw-r–r– 1 root root 1376 Dec 30 13:42 /root/.keystore
※ 注意:根据文档及屏幕的提示,在键入key密码时,可以直接回车表示和keystore的密码相同。但经测试,我直接回车后,在启动Tomcat https服务时,日志中报错:
SEVERE: Catalina.start:
LifecycleException: service.getName(): "Catalina"; Protocol handler start failed: java.io.IOException: Keystore was tampered with, or password was incorrect
所以,建议您还是老老实实的再敲一次keystore的密码吧。
2、启动tomcat https监听
然后,修改/usr/local/tomcat5.5.27/conf/server.xml文件,把原来已经注释SSL的部分取消,也就是激活:
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
注意修改配置文件中keystorePass为keystore的密码,如果密钥不是存放在/root/.keystore,或使用了另外的文件名。可在配置文件中定义keystoreFile="/path/.keystore"。
(Tomcat的配置文件,使用<!– xxxxx –>的方式注释的)
重启tomcat:
[root@vmhost bin]# ./startup.sh
[root@vmhost bin]# netstat -ln|grep 8443
tcp 0 0 :::8443 :::* LISTEN
访问https://ip:8443/,结果:
# keytool –export -file server.crt -alias tomcat
Enter keystore password: changit ←输入keystore的密码
Certificate stored in file <server.crt>