繁体   English   中英

SSL 连接证书问题与 Rest Assured

[英]SSL connect certificate trouble with Rest Assured

有一个问题,我已经打了好几天了——如何通过Rest Assured建立SSL连接? 这是我的尝试,但使用以下代码:

public class ApiTests {
    @BeforeAll
    static void setUp() {
        RestAssured.baseURI = "my host";
    }

    @Test
    void createUserTest() throws Exception {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        String keyStorePass = "my pass";
        try (FileInputStream fis = new FileInputStream("D:\\Idea_projects\\TestApi\\src\\test\\resources\\my_cert.p12")) {
            keyStore.load(fis, keyStorePass.toCharArray());
        }

        given()
                .keyStore(keyStore)
                .trustStore("C:\\Program Files\\Java\\jdk-11.0.13\\lib\\security\\cacerts", "changeit")
                .contentType(JSON)
                .when()
                .post("users")
                .then()
                .statusCode(200)
                .body("name", is("Valentin"))
                .body("job", is("qa"));
    }
}

抛出异常:

No signature of method: io.restassured.config.SSLConfig.keyStore() is applicable for argument types: (java.security.KeyStore) values: [java.security.KeyStore@504497fa]
Possible solutions: keyStore(java.lang.String), keyStore(java.io.File, java.lang.String), keyStore(java.lang.String, java.lang.String), getKeyStore(), trustStore(java.security.KeyStore)
groovy.lang.MissingMethodException: No signature of method: io.restassured.config.SSLConfig.keyStore() is applicable for argument types: (java.security.KeyStore) values: [java.security.KeyStore@504497fa]
Possible solutions: keyStore(java.lang.String), keyStore(java.io.File, java.lang.String), keyStore(java.lang.String, java.lang.String), getKeyStore(), trustStore(java.security.KeyStore)

我尝试使用轻松的HTTPSValidation(),但它说:

Received fatal alert: bad_certificate
javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate

即据我了解,我仍然需要以某种方式添加证书,但是如何? 我已经无法想象了。 如果有人可以告诉我问题是什么或我的代码有什么问题,请帮助:(

如果突然有人面临类似的问题,那么这里就是解决方案。 您必须有 2 个证书:服务器和客户端。 然后使用以下命令将服务器一放在 Java 的 cacerts 存储库中:

keytool -importcert -storetype PKCS12 -keystore trustStore.p12 -storepass 密码 -alias mpzCA -file root.crt -noprompt

然后,在代码中,执行以下操作:

public class DealerProtocolTests {
    
        @Test
        void sendDealerRequest() throws Exception {
            RestAssured.config = RestAssured.config().sslConfig(
                    new SSLConfig()
                            .trustStore("src/test/resources/certificate/SERVER.p12", "password")
                            .keyStore("src/test/resources/certificate/CLIENT.p12", "password"));
            
            Response response = null;
             response =
                    given()
                            .config(config)
                            .spec(xmlSpec)
                            .basePath("/xmlInteface")
                            .body("")
                            .when()
                            .get()
                            .then()
                            .statusCode(200)
                            .log().all()
                            .extract().response();
    
            System.out.println(response.prettyPrint());
        }
    }

暂无
暂无

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

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