尝试获取 https 资源时,我总是遇到同样的错误:
org.springframework.web.client.ResourceAccessException: I/O error: No peer certificate; nested exception is javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
我有一个运行我的应用程序的自签名虚拟主机,该应用程序运行良好,http
但我需要https
.
这是我在android应用程序中的代码:
mRestTemplate = new RestTemplate();
mRestTemplate.getMessageConverters().add(new GsonHttpMessageConverter());
mRestTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
final ResponseObject responseObject = mRestTemplate.postForObject(APP_URL, requestObject, ResponseObject.class);
更新 1
我尝试了@nilesh 提出的解决方案,但没有奏效。
我用同样的错误尝试了这个解决方案
HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET); HttpProtocolParams.setUseExpectContinue(params, true); SchemeRegistry schReg = new SchemeRegistry(); schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg); client = DefaultHttpClient(conMgr, params); final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setHttpClient(client); mRestTemplate = new RestTemplate(); mRestTemplate.setRequestFactory(factory);
我尝试了这个解决方案但没有成功并且同样的错误
- 获取所有必需的证书(根证书和任何中间 CA)
- 使用 keytool 和 BouncyCastle 提供程序创建密钥库并导入证书
- 在您的 android 应用程序中加载密钥库并将其用于安全连接 不要将标准 java.net.ssl.HttpsURLConnection 用于安全连接。使用 Apache HttpClient(第 4 版 atm)库,它已经内置在 android 中。它建立在 java 连接库之上,在我看来,它更快、更好的模块化和更容易理解。