web-dev-qa-db-ja.com

Rest-Assuredで証明書を使用してHTTPS GET呼び出しを行う方法java

Rest-Assured in Java証明書を必要とするエンドポイントに対して。.pem形式の証明書があります。PEMファイルで証明書と秘密鍵があります。

13
rohitkadam19

次のコードで動作しました-

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();
9
rohitkadam19

私の場合、「緩和されたHTTPS検証」を使用して私の問題を修正しました:

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

私は安心して初めてですが、クライアント認証にデジタル証明書を使用するこの種の問題を知っています

安心のドキュメントでは、証明書を構成するための唯一のオプションです: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キーストアにサーバー証明書チェーンを含めることです。

まず、ブラウザ(たとえばchrome)でhttps接続を開くサーバー証明書をダウンロードします。失敗しても構いません。ツールバーの緑色のロックをクリックします>詳細>サーバー証明書を参照し、PEMとしてダウンロードします。正しいものを使用していることを確認するには、自分でダウンロードすることをお勧めします。証明書チェーンのすべての証明書をダウンロード enter image description here

次に、portecleでJDK_HOME/jre/lib/securityのjdk cacertsを開きます。パスワードは「changeit」になります。サーバー証明書を「信頼済み」として追加します

これで、PKIXパスの構築に失敗すると消えます。そうでない場合は、使用している証明書とJDKを確認してください

3
pedrofb

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();
    }
}
2
Jacques Koorts

下記のコードは機能しますが、

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);
}
1
forkdbloke