如何创建仅接受由公共机构签名的证书的信任策略?

时间:2019-04-15 14:31:50

标签: java ssl ssl-certificate apache-httpclient-4.x java-6

当前,我有以下代码段可以接受任何SSL证书(Apache HTTP客户端4.5.7):

CloseableHttpClient client;
final SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(new TLSSocketConnectionFactory(),
        new String[]{"TLSv1.2"}, new String[]{}, new AnyHostnameVerifier(logger));


client = HttpClients
        .custom()
        .setSSLSocketFactory(sf)
        .setSSLHostnameVerifier(new AnyHostnameVerifier(logger))
        .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
            @Override
            public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                return true;
            }
        }).build())
        .build();
return client;

我想创建一个类似的客户端

  • 接受任何由公共机构签署的证书,并且
  • 拒绝自签名证书。

我该怎么办?

我尝试这样做

据我所知,如果使用默认的KeyStore,它将自动验证由公共机构签署的证书的有效性。

所以我写了这个:

final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

但是方法SSLContextBuilder.loadTrustMaterial需要第二个参数-信任策略。

这就是我遇到的问题-我不知道如何实施满足上述条件的信任策略(接受由公共机构签署的所有证书,拒绝所有自签署的证书)。我应该完全实现它还是只通过null

0 个答案:

没有答案