我可能列出了关于在Rest Assured中使用TLS证书的所有答案,不幸的是,我收到了一条错误消息:
javax.net.ssl.ssl握手异常:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法查找到请求的目标的有效认证路径
但让我们从头开始:我从服务中得到了我试图访问的文件.crt(证书文件是双向证书-双向证书(和RSA私钥(.key(。一旦我将它们合并到一个带有openssl:的PKCS12文件中
openssl pkcs12 -export -out keystore.p12 -inkey MY_KEY.key -in MY_FILE.crt
并通过配置poster setting-1、poster settings-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())
我从上面得到错误。例如,当我尝试使用宽松的HTTPs/允许所有主机名或禁用SSL验证时,我会得到响应:
RestAssured.config = RestAssured.config().sslConfig(new SSLConfig()
.allowAllHostnames()
.relaxedHTTPSValidation());
我收到服务器的回复:
496-客户端TLS证书丢失-请提供有效的访问此服务的TLS客户端证书
您有任何信息吗?我如何使用提供的证书作为服务器和客户端站点验证证书,并从服务器获得正确的响应?
我认为这可能是因为您只配置了一个密钥库,而没有配置信任库。
密钥存储通常用于保存要提供给第三方的密钥或证书。但是为了验证所提供的证书,使用了信任存储。
试着做一些类似的事情:
RestAssured.config = RestAssured.config().sslConfig(new SSLConfig()
.keyStore("src/test/resources/testdata/sslCerts/keystore.p12", "PASSWORD")
.trustStore("src/test/resources/testdata/sslCerts/keystore.p12", "PASSWORD"));
您的信任存储必须包含服务返回的证书或用于签署服务证书的证书链。