手记

第十二节 资源服务和认证服务https通信问题

上一节我们分别设置了认证服务为https服务,所以在资源服务器或者其他微服务调用时会需要认证去

  • 如果直接调用会出现如下问题:

Caused by: 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) ~[na:1.8.0_162]
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1964) ~[na:1.8.0_162]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:328) ~[na:1.8.0_162]
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:322) ~[na:1.8.0_162]....

上面这个问题归结起来就是无法验证网站的证书,找不到证书验证链
针对这个问题,Java的证书验证系统与其他不同,将代理工具生成的证书作为可信根证书导入系统证书库,是存在问题的。在java的认证需要使用JRE中证书库,所有必须把代理工具的证书加入到JRE的证书库中。下面解决步骤:

  1. 首先jre证书路径在\jre\lib\security的目录下有个文件名cacerts

2.使用Keytool管理证书,路径在\jdk8\bin\keytool.exe下

F:\softinstall\jdk8\bin>keytool -help
密钥和证书管理工具
命令:
 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令
使用 "keytool -command_name -help" 获取 command_name 的用法
  1. 获取证书
    之前浏览器访问security-service时保存了证书,为了方便我直接导出来,为下一步导入jre准备

图片.png

  1. 执行命令将代理工具的证书加入到cacerts中

keytool -importcert -alias FIDDLER -keystore ../jre/lib/security/cacerts -file ../../record/xzg.crt

提示设置输入口令,java默认口令是changeit,也可以设置其他口令,最后输入y信任此证书,执行成功后

图片.png

  1. 查看是否存在jre证书,密码为上述设置的密码:

keytool -list -keystore ../jre/lib/security/cacerts



作者:勃列日涅夫
链接:https://www.jianshu.com/p/e65b1ec2f447


0人推荐
随时随地看视频
慕课网APP