之前写过一篇配置 tomcat ssl 证书的文章 tomcat配置https(ssl证书),当时没有经过实操,是我找的证书格式转换工具,Java 同事实操的。也是有段波折才配置成功的。但因为我没有参与,所以并不知道会遇到什么样的问题。

前一家任职公司老板找我说,之前的项目出现问题,让我帮忙维护一下。开始是不愿意的,后来给我画饼,说后面有外包项目,可以介绍给我。晾了他一段时间(跟他有仇,离职扣我大半月工资),觉得手痒,就去看了问题。

发现并不是 bug,浏览器提示 “Mix content”,意思就是 https 页面不能请求 http 内容,请求被浏览器阻拦了。查了一堆方法,都是屁话,最终还是得回归到请求 schame 上。就是将请求由 http 改成 https。

之前请求是 Java 做的,她们默认不会去解析子域名,而是通过 ip 地址 + 路径的方式访问项目。我不太确定客户申请的 通域 ssl 是否能够使用。但还是按照之前的教程配了:

在 server.xml 中找到 Connector 属性 port 为 8443 的配置项(默认被注释了),添加以下属性

#pfx 证书存放地址,相对地址为 apache-tomcat 安装目录
keystoreFile="cert/star.jasonli.com.pfx"
# pfx的证书标准 为PKCS12 ,后面是生成证书时填写的密码
keystoreType="PKCS12" keystorePass="123456"

pfx 格式证书在线转化:SSL证书格式转换工具

复制一份 Host,添加到 Host 同级别的位置,修改 name 属性为 ip 地址

重启一下 tomcat(就是执行 bin 下面的 shutdown.sh 和 startup.sh 文件),页面访问有点慢,因为每次 tomcat 重启都会重新 解压一遍 webapps 下的 war 包。然后就报错了,说当前链接不安全,查看证书是存在的,但提示无效。

兜兜转转查了一圈资料,有的教程是自己生成的证书和秘钥,末了直接忽视证书无效的问题,pass掉!最后看到有一哥们说 tomcat 不能配置 ip 地址 的 https 访问。大概如此吧,但我确实配置过 httpd (apache 的 缩减版)的 ip 地址 ssl。有点矛盾,想到客户申请的就是 *.jasonli.com 的 通域证书,所以对 ip 无效应该也不太难理解吧!

解析一个子域名,将 Host 中的 name 属性该成子域名,重启 tomcat, ok!