访问Https站点遇到证书问题
问题描述:
在集成CAS 认证时,通过https访问CAS Server进行认证时,系统报错错内容如下:
[2023-07-26 11:52:53] ERROR org.jasig.cas.client.util.CommonUtils 457 getResponseFromServer - SSL error getting response from host: ids.mtxy.edu.cn : Error Message: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[?:1.8.0_221] …
SSLHandshake :
PKIX path:
HTTPS 其实就是 HTTP + SSL/TLS 的合体,它其实还是 HTTP 协议,只是在外面加了一层,SSL 是一种加密安全协议,引入 SSL 的目的是为了解决 HTTP 协议在不可信网络中使用明文传输数据导致的安全性问题。
解决方案:
将我们需要进行https访问的目标服务地址(CAS Server CAS认证服务端)的证书公钥导入到我们运行环境中程序jdk中。详细步骤如下:
1.访问目标地址证书
首先用 360浏览器 访问目标地址,在地址栏处点击锁的图标,然后点击证书信息
2. 导出目标地址的证书:
第二步,我们在查看目标网站证书时进行导出操作。如下图所示。
记录备注:正常情况下可以之间导出cer文件。 不需要如此复杂的步骤!!!!
注:一般我们需要导出两个文件: 即上图中的 RSA目录 和 CA 目录 都分别执行一次导出操作!
点击导出按钮之后,就会选择目录地址,这里就自定义一个目录来保存我们导出的两个证书。导出后的证书就是两个 .crt 文件。
3.导出证书的cer文件
点击第二步导出的证书(右击选择打开),打开证书后,进行证书导出操作:
点击复制到文件…
点击下一步:
备注:
也可以选择Base64 编码格式进行导出!
这里就选择DER编码二进制 X.509(.CER)(D) ,然后点击下一步:
这里需要选择导出的路径和导出文件名称,名字可以自定义随便设置。这一步就会导出 cer类型的证书文件。
第二部导出的两个证书都分别都进行该操作,然后就会得到两个cer类型的证书文件,证书名称可以随意命名。如下图所示:
4. 将cer文件上传到jre中
将第三步生成的两个 cer 文件上传到我们项目的 jdk/jre/lib/security(根据自己项目的具体路径进行调整)文件中:
然后在当前目录下,cmd 进入命令窗口进行接下来的操作:
如果语句 keytool 提示不是内部命令的情况,就之间进入jdk的bin目录(jre\bin)下去执行,对应证书文件的路径需要进行调整!
-
使用如下命令:(红色部分根据自己的证书名字进行实际情况的调整)
keytool -import -trustcacerts -keystore ./cacerts -alias test1 -file ./test1.cer -storepass changeit(密码:默认密码为changeit)
备注:
keytool -import -keystore /usr/local/jdk.1.8/jre/lib/security/cacerts -file /home/ca/baidu.com.crt -alias baidu
正常情况需要将生成的cacerts文件存入 :/jdk.1.8/jre/lib/security/cacerts 路径地址中!!
如有报错:
keytool error: gnu.javax.crypto.keyring.MalformedKeyringException: incorrect magic
用以下命令执行:
/opt/jrockit-jdk1.6/jre/bin/keytool -import -trustcacerts -keystore ./cacerts -alias test1 -file ./test1.cer -storepass changeit
如果出现 keytool 不是内部命令时,我们需要在环境变量中配置jdk的环境变量即可
查看是否导入成功:
keytool -list -keystore ./cacerts -alias test1 -storepass changeit
keytool -list -keystore./cacerts -alias test2 -storepass changeit
TODO:此网站无法提供安全连接 https访问网站的前提条件是需要在Nginx安装证书配置!