最近在搞http证书问题,搜了很多帖子,总结一下
会附上原帖链接,必要时请移步查看
注:原理也不是很懂,反正最后搞定了,仅供参考
背景:linux环境,新申请了一台服务器,证书需要加密处理,在安装必要的软件后,启动项目,开始报错PKIX buiding failed : sun.security.provider.certpath.SunCertPathBuilderException : unable to find vaild certification path to request target
本项目会进行http访问请求,查了下报错信息,结果显示证书问题
参考链接,可以先看大佬们之前的总结
https://www.cnblogs.com/cuiyongchao007/p/12820491.html
https://www.cnblogs.com/wupher/archive/2012/08/05/2623561.html
https://blog.youkuaiyun.com/u014026324/article/details/132342082
https://blog.youkuaiyun.com/huang007guo/article/details/106856917
解决过程:
公司自己有一个chain.crt文件,哪来的不清楚,应该也能自己生成吧😂
创建私钥
openssl genrsa 2048 >server.key
保存私钥
openssl genrsa -out server.key 2048
生成证书请求文件(cer文件也可以是crt文件,我们的是cer,,会填写很多信息,按需填写即可)
openssl req -new -x509 -key server.key -out server.cer -days 36500
生成PKCS12格式的证书文件(此操作会两次输入密码password,自己设置)
openssl pkcs12 -export -in server.cer -inkey server.key -CAfile chain.crt -name server -out serverall.p12
生成newjks.jks文件(此操作会三次输入密码password,密码跟上一步一样),最后将文件放到tomcat部署目录的配置文件夹下,conf文件夹
keytool -importkeystore -srckeystore serverall.p12 -srcstoretype PKCS12 -deststoretype PKCS12 -alias server -destkeystore newjks.jks
用keytool工具导入jks证书(此操作输入cacerts的原始密码changeit,看到提示是否信任此证书,写y,需要查看java的jre路径填写)
keytool -import -alias newjks.jks -keystore $JAVA_HOME/jre/lib/security/cacerts -file chain.crt
我们是tomcat项目,在tomcat的conf文件夹下,修改server.xml文件
<Connector port ="8080" protool="prg.apache.coyote.http11.Http11.NioProtocol"
maxThreads="150" SSLEnabled="true"
relaxedQueryChars="{,}">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/newjks"
certificateKeystorePassword="自己填写的password"
type="RSA" />
</SSLHostConfig>
</Connector>