使用阿里云配置Tomcat Https(注意不同tomcat8.5版本配置不同)

使用阿里云Https配置Tomcat(注意tomcat8.5版本配置不同)

前言

我们知道jdk自带的keytool工具可以帮助提供https支持,使用下面命令:

生成服务器证书,有效时间100年、证书别名为serverkey、生成文件名为server.keystore:
  • keytool -genkey -v -alias serverkey -keyalg RSA -keystore server.keystore -validity 36500  

生成客户端证书,有效时间100年、证书别名为clientkey 、生成文件名为client.p12:
  • keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 36500

根据客户端证书(证书别名是clientkey、文件为client.p12)生成客户端p12证书信任文件,生成文件名为client.cer、密码为197347:
  • keytool -export -alias clientkey -keystore client.p12 -storetype PKCS12 -storepass 197347 -rfc -file client.cer

将信任证书导入到服务器server.keystore中:
  • keytool -import -v -file client.cer -keystore server.keystore

修改server.xml:
clientAuth 是否开启客户端证书验证(双向认证) true 开启, false关闭。如果clientAuth 为 true. 那么客户端需有 client.p12文件才能访问tomcat服务器。
但是这种方式访问域名时,浏览器会标识“证书风险”,并且默认不会加载非HTTPS域名下的JavaScript。我们需要正规的证书。


1.申请免费https证书(由Symantec提供

登录控制台,找到证书服务,后面就直接安装指示一步步进行就可以了。


2.配置https

        拿到证书之后,进行下载,选择“下载证书for Tomcat”。因此我们会得到一个压缩文件,需要的证书都在里面了。接下来我们进行https的配置,配置这儿是个大坑,博主在这儿绕了几段弯路。由于tomcat8及以上和以下的https配置完全不同,而且阿里云https证书安装分pfx格式和jks格式两种,因此就存在以下四种配置:

配置情况一(tomcat8以下+pfx):
    • 这种配置是最容易的,按照阿里云https证书安装过程做,一般不会出现什么问题。我的配置:
      Http11Protocol
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
          keystoreFile="cert/你的pfx证书文件.pfx"  keystorePass="你的证书密码(pfx-password.txt文件中)" 
           clientAuth="false" sslProtocol="TLS" 
          ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256, 
                    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 
                    TLS_RSA_WITH_AES_128_CBC_SHA, 
                    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 
                    TLS_RSA_WITH_AES_128_CBC_SHA256, 
                    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 
          SSL_RSA_WITH_3DES_EDE_CBC_SHA, 
          TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />
配置情况二(tomcat8以下+jks):
    • 同上,只是把“你的pfx证书文件.pfx”和密码换成jks相关即可。注意,如果发现配置完成之后,启动tomcat启动443时报“Password verification failed”的错误,有两点原因可以考虑: 1.你的jks证书密码是否和密钥库密码一致(阿里云建议两者一致); 2.使用jdk自带工具keytool生产证书时可能密码会默认成“changeit”,把你的密码换成这个试试。一般使用阿里云上申请的证书时,我尽量不使用keytool来转换jks证书。因为正如上面所说,证书密码可能会默认成“changeit”。而证书密码和密钥库密码不一致又可能出现“Cannot recover key”错误(密钥库密码给你时就已经定好了。因此你会陷入一个进退两难的地步(当然肯定也有解决办法,只是为了避免不必要的麻烦,而且tomcat7以上开始支持pfx证书
配置情况三(tomcat8及以上+jks):
    • Http11NioProtocol" maxThreads="150" SSLEnabled="true"> 
       
       


    • 证书别名是需要的,默认就是“alias”,你也可以在生成jks文件指定别名:keytool -importkeystore -srckeystore 你的pfx证书.pfx -alias 你的证书别名 -destkeystore 你的jks证书名.jks -srcstoretype PKCS12 -deststoretype JKS
    • 你也可以查看你的证书别名:
      keytool -list -keystore jks文件 -storepass jks密码
配置情况四(tomcat8及以上+pfx):
    • 参照上面,略
再访问https域名,就没毛病了:


3.最后

还有一个小坑就是,linux上记得把防火墙443端口或8443端口打开,否则一直都是连接不上的。/etc/sysconfig/iptables 文件加上:
# https default

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

重启防火墙: service iptables restart

当然,如果你正在使用Apache或者Nginx做反向代理或负载均衡,那就可以直接在Apache或Nginx中配置https即可,Tomcat就可以不用管它了。

你可能感兴趣的:(程序员技能)