繁体   English   中英

Rest 保证,Java - 在发布请求中使用 TLS/SSL 证书

[英]Rest Assured, Java - using TLS/SSL certificate in post request

我可能会在 Rest 中确认所有关于使用 TLS 证书的答案,但不幸的是,我收到了一条错误消息:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

但是让我们从头开始:我从我尝试访问 file.crt(证书文件是 2 路证书 - 2 路证书)和 RSA 私钥(.key)的服务中获得。 一旦我将它们合并到一个带有 openssl 的 PKCS12 文件中:

openssl pkcs12 -export -out keystore.p12 -inkey MY_KEY.key -in MY_FILE.crt 

并导入 POSTMAN 配置postman setting-1postman setting-2 我得到正确的回应。

一旦我尝试在 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"));

您的信任库必须包含您的服务返回的证书或用于签署服务证书的证书链。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM