我可能在Rest Assured中查看了所有关于使用TLS证书的答案,不幸的是,所有这些答案都显示了错误消息:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:安全性提供者证书路径生成器异常:找不到所请求目标的有效证书路径
但让我们从头说起:我从服务中得到了我试图达到文件.crt(证书文件是双向证书-two way certificate)和RSA私钥(.key).一旦我把它们合并到一个PKCS 12文件与openssl:
openssl pkcs12 -export -out keystore.p12 -inkey MY_KEY.key -in MY_FILE.crt
并导入到配置为postman setting-1,postman setting-2的POSTMAN中。我得到了正确的响应。
一旦我尝试在Java代码中使用它:
RestAssured.config = RestAssured.config().sslConfig(new SSLConfig()
.keyStore("src/test/resources/testdata/sslCerts/keystore.p12", "PASSWORD"));
或
.given()
.spec(new RequestSpecBuilder()
.setAuth(RestAssured
.certificate("src/test/resources/testdata/sslCerts/keystore.p12","PASSWORD",
CertificateAuthSettings
.certAuthSettings()
.keyStoreType("pkcs12")
)).build())
我从上面得到的错误。当我尝试使用例如宽松的HTTP/允许所有主机名或禁用SSL验证时,我得到响应:
RestAssured.config = RestAssured.config().sslConfig(new SSLConfig()
.allowAllHostnames()
.relaxedHTTPSValidation());
我从服务器得到响应:
496 -客户端TLS证书丢失-请提供有效的TLS客户端证书以访问此服务
你有任何信息,我如何使用提供的证书作为服务器和客户端站点验证证书,并从服务器获得正确的响应?
1条答案
按热度按时间iszxjhcz1#
我认为这可能是因为您只配置了密钥存储库,而没有配置信任存储库。
密钥库通常用于保存要提供给第三方的密钥或证书。但在验证所提供的证书时,则使用信任库。
尝试执行以下操作:
信任存储区必须包含由服务返回的证书或用于签署服务证书的证书链。