1.简介
该文章是自己在项目过程中遇到tomcat配置证书的问题而写的,我也是搞了好久才解决这个问题,每个人遇到的文革都可能大不相同,只是希望能给各位一些参考,本篇文章由以下几位前辈的文章总结而来,详细请自行查看
(1)为了成功配置https,你需要具备以下环境:
java jdk
tomcat
(2)SSL证书简介
要想使用https,首先,我们需要有SSL证书,证书可以通过两个渠道获得:
公开可信认证机构
例如CA,但是申请一般是收费的,一般几百到几千一年.
自己生成
虽然安全性不是那么高,但胜在成本低.
目前证书有以下常用文件格式:JKS(.keystore),微软(.pfx),PEM(.key + .crt)。其中,tomcat使用JKS格式,nginx使用PEM格式.
下面讲解的是JKS格式.
1.创建tomcat证书
(1)1、使用jdk自带的keytool.ext生成证书,进入jdk下bin目录;
(2)在路径栏输入cmd——回车打开dos命令窗口,打开之后当前路径为jdk下bin目录
ps:也可直接win+R打开dos命令窗口再进入jdk下bin目录
(3) 使用keytool命令创建tomcat证书
keytool -genkeypair -alias “tomcat” -keyalg “RSA” -keystore “D:\ProgramTools\tomcatkey\tomcat.keystore” -validity 36500
alias: 别名 这里起名tomcat
keyalg: 证书算法,RSA
证书文件名称是tomcat.keystore ;“-validity 36500”含义是证书有效期,36500表示100年,默认值是90天
keystore:证书生成的目标路径和文件名,替换成你自己的路径即可,我定义的是D:\ProgramTools\tomcatkey\tomcat.keystore
在命令行填写必要参数:
A、 输入keystore密码:此处需要输入大于6个字符的字符串。
B、 “您的名字与姓氏是什么?”这是必填项,并且必须是TOMCAT部署主机的域名或者IP[如:gbcom.com 或者 10.1.25.251](就是你将来要在浏览器中输入的访问地址),否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“localhost”。(这块很重要)
C、 你的组织单位名称是什么?”、“您的组织名称是什么?”、“您所在城市或区域名称是什么?”、“您所在的州或者省份名称是什么?”、“该单位的两字母国家代码是什么?”可以按照需要填写也可以不填写直接回车,在系统询问“正确吗?”时,对照输入信息,如果符合要求则使用键盘输入字母“y”,否则输入“n”重新填写上面的信息。
D、 输入的主密码,这项较为重要,会在tomcat配置文件中使用,建议输入与keystore的密码一致,设置其它密码也可以,完成上述输入后,直接回车则在你在第二步中定义的位置找到生成的文件。
2.配置tomcat服务器
(1)打开tomcat的server.xml配置文件,这里我使用的开发工具是eclipse,所以直接在项目路径下找到
可以直接通过查找关键字Http11NioProtocol,进行修改,该内容默认是被注释掉的
https协议默认端口号为443,可根据自身业务修改端口号,keystorePass为生成证书时所设置的密码
修改为
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\ProgramTools\tomcatkey\tomcat.keystore"
keystorePass="123456" />
port: https的端口,默认8443
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证keystoreFile
keystoreFile: keystore证书的路径
keystorePass: 生成keystore时的口令
这里的port我修改成立自己需要跳转的界面的端口号,如果不需要进行跳转的话应该配置上面的就行了,可以先修改上面的,如果不能访问再来修改下面的
<Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
3.导入证书
这里好像有好几种方法,这里我导入的是自己的证书
通过网站导入自己的证书
不安全-证书无效-详细信息-复制到文件-然后命名文件名称即可,后缀名为cer , 会自行进行拼接
导入证书
导出成功之后,放入“受信任的根证书颁发机构”
谷歌浏览器点击设置-高级-证书管理-受信任的根证书颁发机构-导入
然后导入刚才的证书就可以了
直接转化为.cer格式文件
将tomcat.keystore证书转化为.cer格式文件,然后在浏览器中导入证书即可(没试过)
keytool -export -v -alias tomcat -file D:/tomcat.cer -keystore D:/tomcat.keystore
还有看到一种是通过导入公共证书,比如是导入百度的证书,但我没有试过
4.解决JAVA使用HTTPS协议请求出现证书不信任问题(PKIX PATH BUILDING FAILED)这步必须做,不做好像会报错这个错
按照前面的步骤导出证书,将安全证书复制到java中的cacerts证书库中
进入jdk路径 将tomcat.cer放在D:\ProgramTools\jdk\jre\lib\security中
这个应该要放,或者也可以试试直接导入证书
cmd进入该路径
输入命令:
keytool -import -alias tomcatcer -keystore cacerts -file D:\ProgramTools\tomcatkey\tomcat.cer
-alias:别名,我这边是导入过了证书,如果需要导入多个证书,需要将别名更改。
-file:证书路径
重启tomcat,证书不信任问题就解决了
还有另外的代码生成证书,我的没成功,地址在下方
我晕死哦添加链接描述
本篇文章总结于以下几位博主或网站的文章,请自行参考
程序员大本营
周国良
王绍桦
简书_夜_雪
君临四海
欢迎大家多多交流,如有问题请及时纠正