繁体   English   中英

放心用 pfx 文件总是返回 401

[英]rest-assured with pfx file always returns 401

从这个来源: RESTAssured - use.pfx certificate for https call我在下面创建。

    @Test
    void testPfxKey() {
        // Source: https://stackoverflow.com/questions/42235588/restassured-use-pfx-certificate-for-https-call

        FileInputStream instream1=null;
        KeyStore keyStore=null;
        org.apache.http.conn.ssl.SSLSocketFactory lSchemeSocketFactory=null;
        try {
            instream1 = new FileInputStream(new File("C:/Path/To/pfxfile.pfx"));
            keyStore = KeyStore.getInstance("PKCS12");
            keyStore.load(instream1, "pfxfilepwd".toCharArray());
            X509HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
            lSchemeSocketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(keyStore, "pfxfilepwd");
            lSchemeSocketFactory.setHostnameVerifier(hostnameVerifier);
        } catch (Exception e) {
            e.printStackTrace();
        }
        RestAssured.config = RestAssured.config().sslConfig(new SSLConfig().with().sslSocketFactory(lSchemeSocketFactory).and().allowAllHostnames().relaxedHTTPSValidation());
        RestAssured.given().
                contentType("application/json").
                headers(
                        "Subscription-Key", "key-value",
                        "Accept-Encoding", "gzip,deflate"
                );
        Response response = RestAssured.get("https://endpoint.net/resource/path");
        System.out.println(response.getStatusCode());
    }

response.getStatusCode() 总是返回 401。我期待 200。我已经检查了密钥文件路径、密码和 enpoint。 一切似乎都还好。 当我运行 use ReadyAPI 时,我会得到响应。 请建议如何解决此问题。 谢谢大家!

我发现了这个问题。 我需要在每个请求中发送标头。 Also.relaxedHTTPSValidation() 不应在这种情况下使用:我们实际上提供的证书应该经过身份验证! 下面的代码有效:

@Test
void testPfxKey() {
    FileInputStream instream1 = null;
    KeyStore keyStore = null;
    org.apache.http.conn.ssl.SSLSocketFactory lSchemeSocketFactory = null;
    try {
        instream1 = new FileInputStream(new File("C:/Path/To/pfxfile.pfx"));
        keyStore = KeyStore.getInstance("PKCS12");
        keyStore.load(instream1, "pfxfilepwd".toCharArray());
        X509HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
        lSchemeSocketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(keyStore, "pfxfilepwd");
        lSchemeSocketFactory.setHostnameVerifier(hostnameVerifier);
    } catch (Exception e) {
        e.printStackTrace();
    }
    RestAssured.config = RestAssured.config().sslConfig(new SSLConfig().with().sslSocketFactory(lSchemeSocketFactory).and().allowAllHostnames());
        System.out.println(
    RestAssured.given().
            contentType("application/json").
            headers(
                    "Subscription-Key", "key-value",
                    "Accept-Encoding", "gzip,deflate"
            )
            .get("https://endpoint.net/resource/path")
            .getStatusCode()
            );
}

暂无
暂无

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

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