Java HttpClient错误,找不到SSL证书,在代码中使用证书作为String?

里克:

在尝试使用HttpClient调用使用自签名证书的https站点时,我有些困惑。我有如下代码,这使我可以拨打电话,但是随后出现错误,就像javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found我从Web浏览器下载了证书并了解可以将其导入密钥库一样,但我宁愿将其放入代码并以这种方式使用它,有没有办法做到这一点?

    HttpClient client = new HttpClient();

    EasySSLProtocolSocketFactory easySSLProtocolSocketFactory = new EasySSLProtocolSocketFactory();
    Protocol https = new Protocol("https", easySSLProtocolSocketFactory,
            443);
    Protocol.registerProtocol("https", https);

    BufferedReader br = null;

    String responseString = "";

    GetMethod method = new GetMethod(path);

    int returnCode = client.executeMethod(method);
布鲁诺 :

假设您的证书为PEM格式。您可以在代码中嵌入它,并使用BouncyCastle的PEMReader把它变成一个X509Certificate实例。完成此操作后,KeyStore在内存中创建一个实例,并将此X.509证书放入其中。然后,SSLContext使用该实例化新的实例KeyStore作为信任库,并让您的HTTP客户端使用它。

看起来像这样(未尝试过,请记住关闭读者并捕获异常...):

PEMReader pemReader = new PEMReader(new StringReader("----- BEGIN ......");
X509Certificate cert = (X509Certificate) pemReader.readObject();

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null, null);
ks.setCertificateEntry("some name", cert);

TrustManagerFactory tmf = TrustManagerFactory.getInstance(
    TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, tmf.getTrustManagers(), null);

然后,将其SSLContext用于连接。如果使用的是4.x版,则可以使用Apache HttpClient的SSLSocketFactory进行此操作(如果使用的是3.x版,则可以进行此操作)。我建议现在使用Apache HttpClient4.x。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何忽略SSL证书的Java

如何在Rest-Assured Java中使用证书进行HTTPS GET调用

在Java中使用.pfx证书解密文件

如何在Java密钥库中导入现有的X.509证书和私钥以在SSL中使用?

java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。Android 2.3

Java代码签名证书是否与SSL证书相同?

Java SSL证书验证

Java和SSL证书

在Java中使用同一主机使用多个SSL客户端证书

使用自签名证书的Java ssl / https客户端

忽略Java的SSL证书错误

如何使用Java验证证书是EV证书?

AWS Java SDK SSL证书

Java SSL证书吊销检查

具有SSL证书的Java HTTPS连接错误

在Java中使用自签名证书时SSL如何工作

滑行-javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

如何在Java中使用Webclient添加CA证书和客户端证书

java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。在api上少24

如何在Mac上的Java中使用SSL证书

HttpsURLConnection错误:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

如何在HttpClient中使用证书?

同时使用证书和用户/密码从.Net消费Java Web服务

android I / O错误:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

如何在Java SE中使用证书进行加密

Java-使用证书和私钥进行HTTP POST请求

如何使用证书 pkcs7 签署 xml - Java

如何验证 SSL Java 证书

如何在java中使用ndk获取证书值