需求:
公司项目目前是部署在tomcat上用http的形式来访问的,可以通过外网IP和域名加端口号进行访问,然后因为要做个微信小程序的功能,小程序的平台配置里面后台通讯好像又必须是https 的方式访问,于是就准备给tomcat 配置一下https 的访问方式.然后没想到,这个坑整整搞了我三天时间,期间又掉了无数的头发.
环境t : omcat 9.0(http 方式IP和域名都可以正常访问) + 阿里云服务器 + 菜鸟一枚
现象:
根据网络上的配置,配置完成后不管是在服务器上还是在其他机器上用https+域名用IP访问都是失败但是在本机上用https:localhost和https:127.0.0.0.1的方式可以访问,然后用http的方式是IP和域名都是正常可以访问的;防火墙是关闭的,端口也已经开放了,这就很纳闷了!之前一度怀疑是tomcat的配置有问题,各种百度尝试.也猜测过是不是证书有问题不能自己生成的
配置:
配置方法网络上百度了一堆,基本都是类似的也没有问题,都是通过keytool 的命令生成ssl 证书,然后在tomcat 的service.xml 文件里面增加一个https 的配置.只不过,百度上各种版本有几个问题:
- 在生成证书的时候输完密码后有几个问题,有的人说那个姓氏的问题要填你的域名或者IP 不能乱填,但是这个我这边实验是没有影响的.
- 还有生成证书的时候会提示你说:[JKS 密钥库使用专用格式。建议使用]这个有人说要处理我没处理也可以;
- 然后还有些人配置说要生成那些客户端证书,服务端客户端互相信任,我试了如果只是单纯的访问的话只要做到生成SSL证书 然后配置service.xml 即可,但是访问的时候会提示不信任,忽略即可.
生成SSL证书命令(必须): 红色部分可以自己定义下同
keytool -genkey -v -alias tomcat1 -keyalg RSA -keystore E:/web/keyFile/tomcat1.keystore -validity 36500
生成客户端证书:
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore E:/web/keyFile/mykey.p12
通过上面生成的客户端证书导出可安装的证书:(123456是密码)
keytool -export -alias mykey -keystore E:/web/keyFile/mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file E:/web/keyFile/mykey.cer
客户端证书导入到证书库信任列表
keytool -import -v -file E:/web/keyFile/mykey.cer -keystore E:/web/keyFile/tomcat1.keystore
客户端信任服务器证书
keytool -keystore E:/web/keyFile/tomcat1.keystore -export -alias tomcat1 -file E:/web/keyFile/tomcat1.cer
service.xml配置
<Connector port="9081"
protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="150"
URIEncoding="UTF-8"
clientAuth="false"
sslProtocol="TLS"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="E:/web/key/tomcat1.keystore"
keystorePass="123456" />
坑:
按照上面的配置,配置完成后然后尝试通过https+域名+端口/https+外网IP+端口访问.一律失败;
但是通过http+域名+端口/http+外网IP+端口访问正常,然后有人然后各种尝试网上不同的配置差异.然后突然想到试试https+localhost/https+127.0.0.1/方式访问;竟然可以,喜极而泣.虽然没有成功但是至少有希望了.然后开始往这方面查询尝试;关防火墙,开放入站端口,还是不行,最终发现一个阿里云服务器要开通安全组策略配置(端口放行)阿里云服务器(ECS)实战--安全组策略配置(端口放行) - 百度文库
解决:
生成ssl证书 + service配置 + 端口开放 + 服务器端口映射
有个免费证书信任处理https://freessl.org/ 没有操作验证,感觉还挺靠谱的有需要可以了解一下.
反思:
- 这个排版感觉很干巴.都是大段大段文字看起来都不想看了,需要注意提升一下;
- 思路很重要,刚开始在配置上死磕纠结这个配置对不对,证书是不是有问题,一直往这两个方向搜索肯定是没有结果的,从localhost和127.0.0.1的尝试上转变思路去查就可以很快定位到问题
- 基础知识点提升,服务器的一些常识,请求http 的常识.
- 还有些知识点没有弄清楚,像那个互相信任的,证书的导入的.还有证书不信任的处理方式,单向信任双向信任概念,