在尝试使用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。
null 但我想知道有没有办法解决这个问题...
当我想要在cPanel上安装证书时,我会看到以下错误: 错误证书验证失败! 已执行/usr/bin/openssl verify-capath/var/cpanel/ssl/installed/cabundles: stdin:CN=example.com 0深度查找时错误20:无法获取本地颁发者证书
我快被这个问题弄疯了。我在Laravel上有两个站点在https上互相调用(用OAUTH2登录,passport/sociate)。两者都安装在我的本地开发服务器上,在MAMP,MAMP自动签名的证书。 我到处都能找到这个解决方案:把cacert.pem文件放在某个地方,把路径写在php.ini中 完成,Apache重新启动,设置正确地出现在两个站点的phpinfo()中。然而,错误依然存在。有人
问题内容: 我尝试将带有正确APP_ID,APP_SECRET等的curl请求发送到 我需要从中获取access_token,但需要返回FALSE并打印下一条消息: 我的代码是: 当我手动移动到上面的链接时,我会很好地获得access_token。为什么卷曲不起作用?请帮助。 问题答案: 建议禁用的答案不被接受。问题是“为什么它不适用于cURL”,正如Martijn Hols正确指出的那样,这很危
我尝试将带有正确应用程序ID、应用程序机密等的curl请求发送到 我需要从中获取访问令牌,但获取FALSE和print next message,否则: 我的代码是: 当我手动移动到上面的链接时,我很好地获得了访问权。为什么卷曲不起作用?请帮忙。
误差 PHP警告:stream_socket_client():SSL操作失败,代码为1。OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_Server_Certifice:证书验证失败