繁体   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