zoukankan      html  css  js  c++  java
  • 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去掉注释后留下的那个就行了。

  • 相关阅读:
    VMware克隆虚拟机,克隆机网卡启动不了解决方案
    实现列表双击可编辑,异步更新;实现删除的即时移除;
    HTTP请求之:PHP函数header常用功能
    MySQL Innodb的两种表空间方式
    MySQL表分区技术
    [java]实体类(VO,DO,DTO,PO)的划分
    [java]框架中为什么用到反射?
    [java]springboot集成mybatis
    [java]servlet乱码问题解决
    [sql]mysql部署
  • 原文地址:https://www.cnblogs.com/sonofelice/p/5073690.html
Copyright © 2011-2022 走看看