簡體   English   中英

使用.p12文件執行對休息服務器的請求

[英]Using .p12 file to execute request to rest server

我試圖執行對服務器的請求,該服務器向我提供了.p12文件,以便與其余服務建立安全連接,我正在執行以下操作,以使用密鑰設置HttpClient:

SSLContext sslContext =SSLContextBuilder
                .create().loadKeyMaterial(ResourceUtils.getFile("classpath:keystore/file.p12"), "secret".toCharArray(), "secret".toCharArray())
                .build();

    return HttpClientBuilder
            .create()
            .setConnectionManager(connManager())
            .setSSLContext(sslContext)
            .setDefaultRequestConfig(requestConfig())
            .build();

當我使用OAuth2RestOperations執行請求時,我得到了:

401 , Non existing certificate or invalid 

我最近有一個類似的要求。 這是我使用的代碼:

    KeyStore clientStore = KeyStore.getInstance("PKCS12");
    try {
        clientStore.load(ResourceUtils.getFile("classpath:keystore/file.p12"), "secret".toCharArray());
    } catch (IOException e) {
        //handle exception
    }

    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(clientStore, "secret".toCharArray());
    KeyManager[] kms = kmf.getKeyManagers();

    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(kms, null, new SecureRandom());

    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);

    HttpClientBuilder builder = HttpClientBuilder.create();
    return builder.setSSLSocketFactory(socketFactory).build();

我認為這實際上是一個重復的問題。

有關此問題的Java HTTPS客戶端證書認證,請參閱此答案

在所有示例中,您都需要使用KeyStore調用loadKeyMaterial方法

  public SSLContextBuilder loadKeyMaterial(KeyStore keystore, 

使用文件路徑加載keyStore,例如:

 keyStore = KeyStore.getInstance("PKCS12"); FileInputStream inputStream = new FileInputStream(new File(certPath)); keyStore.load(inputStream, certPassword.toCharArray()); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM