centos下tomcat的ssl配置

最近因为用CAS做单点登录,需要配置SSL,过程是比较简单的,记录下各个步骤的含义,以免日后忘记。

需求场景:CAS单点登录,要求必须是SSL,服务器操作系统为CentOS,web容器为tomcat。

如果你作为服务提供方,那你需要看完全文

如果你作为需求客户方,那只需要看第三部分就可以了

步骤:

假设我们tomcat的路径为/opt/tomcat,在此目录下新建ssl目录用于存放证书:

cd /opt/tomcat/ssl

一、首先,我们需要生成SSL证书,用到keytool工具,关键有三步:

①生成keystone,用以下命令

#keytool -genkey -alias ssologin -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3650

注:changeit是jdk中证书默认的密码

②从keysotre中导出别名为tomcat-cas-server的证书,生成server.crt文件

#keytool -export -trustcacerts -alias ssologin -file server.crt -keystore server.keystore -storepass changeit

③将server.crt导入到jre的可信任证书仓库

#keytool -import -trustcacerts -alias ssologin -file server.crt -keystore “$JAVA_HOME/jre/lib/security/cacerts” -storepass changeit

注意:如果是windows主机,使用%JAVA_HOME%,如果是linux就使用$JAVA_HOME

二、配置好证书之后,我们需要配置tomcat支持SSL

修改conf/server.xml文件,其中SSL部分如下,其它不用动:

修改后之后,重启tomcat即可生效

关于这段,有一个严重的安全问题,在《修复firefox下ssl_error_weak_server_ephemeral_dh_key的错误》这篇文章中做了纠正

再正式访问之前,记得把防火墙的443端口打开,centos的iptables配置如下:

#vi /etc/sysconfig/iptables

添加以下配置:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT

配置完之后记得重启iptables:

#service iptables restart

iptables重启之后,你就可以通过浏览器访问了https://your.domain.com

三、tomcat作为SSL的客户端

如果我们的应用作为客户端需要与开启SSL的服务器进行通信,那我们必须将服务器证书安装在jre的可信列表中.

具体步骤是:将上述第一步中的第②小步生成的server.crt分发给需要使用的客户端,然后在客户端用keytool工具导入到jre的可信列表,如下命令:

#keytool -import -trustcacerts -alias ssologin -file server.crt -keystore “%JAVA_HOME%/jre/lib/security/cacerts” -storepass changeit

注意:我这里的机器是windows机器,所以使用%JAVA_HOME%,其实这个导入过程和一.③是一样的

四、其它可能会用到的证书相关命令

①列出系统仓库中存在的证书名称:

#keytool -list -keystore “$JAVA_HOME/jre/lib/security/cacerts” -storepass changeit

如本文中添加的证书,会找到这么一行

ssologin, 2014-9-4, trustedCertEntry,
认证指纹 (MD5): 12:3B:02:6F:78:6E:A6:D3:AB:96:CA:63:7D:7B:55:04

②消除系统中存在的名为ssologin的证书

#keytool -delete -alias ssologin -keystore “$JAVA_HOME/jre/lib/security/cacerts” -storepass changeit
#keytool -delete -alias ssologin -storepass changeit