Как сделать вызов HTTPS GET с сертификатом в Rest-Assured java

Как я могу сделать вызов GET с помощью Будьте Уверены в java к конечной точке, которая требует сертификата. У меня есть сертификат . В PEM-файле есть сертификат и закрытый ключ.

6 ответов


Он работает со следующим кодом -

KeyStore keyStore = null;
SSLConfig config = null;

try {
        keyStore = KeyStore.getInstance("PKCS12");
        keyStore.load(
                new FileInputStream("certs/client_cert_and_private.p12"),
                password.toCharArray());

    } catch (Exception ex) {
        System.out.println("Error while loading keystore >>>>>>>>>");
        ex.printStackTrace();
    }

    if (keyStore != null) {

        org.apache.http.conn.ssl.SSLSocketFactory clientAuthFactory = new org.apache.http.conn.ssl.SSLSocketFactory(keyStore, password);

        // set the config in rest assured
        config = new SSLConfig().with().sslSocketFactory(clientAuthFactory).and().allowAllHostnames();

RestAssured.config = RestAssured.config().sslConfig(config);
RestAssured.given().when().get("/path").then();

в моем случае с помощью "relaxed HTTPs validation" исправлена моя проблема:

given().relaxedHTTPSValidation().when().post("https://my_server.com")

Я новичок в rest-assured, но я знаю такие проблемы с использованием цифровых сертификатов для аутентификации клиента

в rest-assured doc есть только возможность настроить сертификат: JKS

RestAssured.config = RestAssured.newConfig().sslConfig(new SSLConfig("/truststore_javanet.jks", "test1234");

преобразуйте PEM в JKS. Откройте его с помощью portecle и убедитесь, что пароль правильный, и у вас есть загруженный сертификат и вся цепочка сертификации в корень CA. Portecle упрощает командную строку с помощью GUI, а также позволяет создавать JKS

http://portecle.sourceforge.net/

эта ошибка возникает всегда, когда ваш клиент java не доверяет сертификату сервера

 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

самый простой способ исправить это-включить цепочку сертификатов сервера в хранилище ключей jdk.

сначала загрузите сертификаты сервера, открывающие https-соединение с вашим браузером, например с chrome. Не имеет значения, что он терпит неудачу. Нажмите на зеленую блокировку на панели инструментов>подробно>см. сертификат сервера и загрузите как PEM. Лучше всего скачать сами убедитесь, что вы используете правильный. Загрузить все сертификаты цепочки сертификации enter image description here

затем откройте JDK cacerts в JDK_HOME/jre/lib / security с помощью portecle. Пароль будет "changeit". Добавьте сертификаты сервера как "доверенные"

Теперь, pkix путь здание не удалось исчезнет. Если нет, проверьте сертификаты и JDK, который вы используете


код, упомянутый ниже, просто работает,

public static void getArtifactsHttps(String args) {
    String username = "username";
    String password1 = "password";
    StringBuilder authorization = new StringBuilder();
    authorization.append(username).append(":").append(password);
    String authHeader = "Basic " + Base64.getEncoder().encodeToString(authorization.toString().getBytes());


    String response = RestAssured
            .given()
            .trustStore("D:\workspace\DemoTrust.jks", "DemoTrustKeyStorePassPhrase")
            .when()
            .contentType(MediaType.APPLICATION_JSON)
            .accept(MediaType.APPLICATION_JSON)
            .header("Authorization", authHeader)
            .baseUri("https://server.us.oracle.com:55898")
            .queryParam("name", args)
            .get("/validendpoint").prettyPrint();

    System.out.println("RESPONSE" + response);
}

используя RestAssured 3.0, я взял код @rohitkadam19 и заставил его работать так:

@Before
public void setUp() throws Exception {
    try {
        RestAssured.port = port;
        RestAssured.useRelaxedHTTPSValidation();
        RestAssured.config().getSSLConfig().with().keyStore("classpath:keystore.p12", "password");
    } catch (Exception ex) {
        System.out.println("Error while loading keystore >>>>>>>>>");
        ex.printStackTrace();
    }
}

пожалуйста, используйте последнюю версию 3.0.7, как и в предыдущих версиях rest-assured многие проблемы столкнулись, когда вы тестируете службы с сертификатами