Vert.x SSL服务端客户端健康检测测试报SSLHandshakeException如何解决
解决方案
错误原因
你给WebClient配置的PemKeyCertOptions是用于双向SSL认证时客户端提交自身身份证书的配置,并非指定客户端需要信任的服务端自签名证书,因此客户端依旧使用JVM默认信任库校验服务端的自签名证书,自然会触发PKIX路径校验失败的错误。
可选方案
方案1:测试环境直接跳过证书校验(最便捷,单元测试优先推荐)
单元测试场景不需要严格的证书校验,直接在WebClient配置中开启信任所有证书即可,无需修改任何JVM配置,所有拉取代码的开发者可以直接运行:
WebClientOptions options = new WebClientOptions() .setSsl(true) .setTrustAll(true); // 仅测试环境使用,生产环境禁止开启 WebClient client = WebClient.create(vertx, options);
方案2:显式配置客户端信任指定自签名证书(无需修改全局JVM配置)
如果需要保留证书校验逻辑,可以通过PemTrustOptions指定客户端信任你的自签名证书,不需要修改JVM全局信任库,只要将cert.pem放在项目中随代码提交,所有开发者拉取后即可直接运行:
WebClientOptions options = new WebClientOptions() .setSsl(true) .setPemTrustOptions(new PemTrustOptions() .addCertPath("cert.pem")); // 仅信任你指定的自签名证书 WebClient client = WebClient.create(vertx, options);
方案3:导入证书到JVM全局信任库(不推荐用于单元测试)
该方案确实可以解决问题,但操作成本极高:每个开发者都需要手动将证书导入到自己本地JDK的jre/lib/security/cacerts信任库中,更换JDK版本后还需要重新操作,完全不适合单元测试场景,仅在生产环境客户端对接固定自签名证书服务端时可以考虑使用。
内容的提问来源于stack exchange,提问作者tehDeveloper
相关产品推荐
相关产品推荐

