Mac下tomcat配置ssl

最近在搞单点登录CAS,第一步就是需要给tomcat配置证书。但是,第一次配置就遇到了个问题排插了一下午。下面来存一份文档,以备以后遇到。

一、首先准备好环境

  java环境:配置好环境变量,找到jdk路径,后面会用到。我的存放在/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

  tomcat相关配置:主要修改server.xml文件

二、按照教程操作

http://blog.csdn.net/frinder/article/details/7969925

http://blog.csdn.net/xiexl/article/details/6411496

按照这两个教程来操作。但是在mac下略有不同。

三、创建证书

1. 服务器中生成证书:

(注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost)

keytool -genkey -alias tomcat -keyalg RSA -keystore /Users/baidu/Documents/work/keys/mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit

2. 导出证书,由客户端安装:

 keytool -export -alias tomcat -keystore /Users/baidu/Documents/work/keys/mykeystore -file /Users/baidu/Documents/work/keys/mycerts.cer -storepass changeit

3. 客户端配置:为客户端的JVM导入密钥(将服务器下发的证书导入到JVM中)

 keytool -import -trustcacerts -alias tomcat -keystore "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/security/cacerts" -file /Users/baidu/Documents/work/keys/mycerts.cer -storepass changeit

4. 查看jvm中是否有别名为tomcat的证书:

keytool -list -alias tomcat -keystore "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/security/cacerts" -storepass changeit

直接上图:

四、修改tomcat的server.xml配置

<Connector SSLEnabled="true" clientAuth="false" keystoreFile="/Users/baidu/Documents/work/keys/mykeystore" keystorePass="changeit" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/>

五、配置host:

vi /etc/hosts

127.0.0.1   localhost

六、访问链接:https://localhost:8443

 

七、遇到的问题

访问https://localhost:8443

firefox提示:连接 localhost:8443 时发生错误。 SSL 接收到一个超出最大准许长度的记录。 (错误码: ssl_error_rx_record_too_long)

chrome提示:ERR_SSL_PROTOCOL_ERROR (Chrome) 

于是就在谷歌上搜,看到以下几种解决方案:

1.修改apache2的httpd.conf配置文件,在

Listen 80  后面加上  Listen 443 https:

Listen 80
Listen 443 https

2.确保JVM中有刚刚生成的证书:

keytool -list -alias tomcat -keystore "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/security/cacerts" -storepass changeit

3.修改apache的<VirtualHost>配置

我3种方式都试了不行。

4.那我用 openssl s_client -connect yourdomain.tld:*port*这个命令试试:

来看下连接有啥问题:

MacBook-Pro-2:other baidu$ openssl s_client -connect localhost:8443

CONNECTED(00000003)

11989:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.30.1/src/ssl/s23_lib.c:185:

看错误信息,建立链接就失败了。

那究竟是什么原因呢。我实在是搞不定了。就从同事哪里拷贝过来一份server.xml的配置:

就是上面第四步提到的。而我出错的配置是长得下面这个样子的:

<Connector port="8443" maxHttpHeaderSize="8192" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="server.keystore" keystorePass="changeit"/>

最根本的错误原因是配置搞错了。

首先,server.keystore没有找到,没有找到我存放证书的那个文件。要改成最初的那个密钥文件/Users/baidu/Documents/work/keys/mykeystore。

其次,密码要对。

然后呢,protocal,就用server.xml去掉注释后留下的那个就行了。

posted @ 2015-12-24 17:06  SonoFelice  阅读(1805)  评论(0编辑  收藏  举报