簡體   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