最初我希望我的程序忽略ssl证书验证,因为我的程序将通过HTTPS联系暴露的Web服务。我已经在StackOverFlow中阅读了很多可用的解决方案并修改了我的程序,直到这个阶段。
This是我测试的第一个解决方案
This是我测试的第二个解决方案
SSLContext sslContext = SSLContext.getInstance("SSL");
// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers =============");
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkClientTrusted =============");
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkServerTrusted =============");
}
} }, new SecureRandom());
SSLSocketFactory sf = new SSLSocketFactory(sslContext);
Scheme httpsScheme = new Scheme("https", 443, sf);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(httpsScheme);
// apache HttpClient version >4.2 should use BasicClientConnectionManager
ClientConnectionManager cm = new SingleClientConnManager(schemeRegistry);
HttpClient HttpClient1 = new DefaultHttpClient(cm);
HttpPost httpPost = new HttpPost("https://<ServerIP>:<Port>");
当我执行代码时,它向我展示了很多已弃用的类,你可以在本节中看到这一点
test1.java:27: warning: [deprecation] ClientConnectionManager in org.apache.http.conn has been deprecated
import org.apache.http.conn.ClientConnectionManager;
^
test1.java:28: warning: [deprecation] SingleClientConnManager in org.apache.http.impl.conn has been deprecated
import org.apache.http.impl.conn.SingleClientConnManager;
^
test1.java:29: warning: [deprecation] DefaultHttpClient in org.apache.http.impl.client has been deprecated
import org.apache.http.impl.client.DefaultHttpClient;
^
test1.java:260: error: SSLSocketFactory is abstract; cannot be instantiated
SSLSocketFactory sf = new SSLSocketFactory(sslContext);
^
test1.java:261: warning: [deprecation] Scheme in org.apache.http.conn.scheme has been deprecated
Scheme httpsScheme = new Scheme("https", 443, sf);
^
test1.java:261: warning: [deprecation] Scheme in org.apache.http.conn.scheme has been deprecated
Scheme httpsScheme = new Scheme("https", 443, sf);
^
test1.java:261: error: no suitable constructor found for Scheme(String,int,SSLSocketFactory)
Scheme httpsScheme = new Scheme("https", 443, sf);
^
constructor Scheme.Scheme(String,int,SchemeSocketFactory) is not applicable
(argument mismatch; SSLSocketFactory cannot be converted to SchemeSocketFactory)
constructor Scheme.Scheme(String,SocketFactory,int) is not applicable
(argument mismatch; int cannot be converted to SocketFactory)
test1.java:262: warning: [deprecation] SchemeRegistry in org.apache.http.conn.scheme has been deprecated
SchemeRegistry schemeRegistry = new SchemeRegistry();
^
test1.java:262: warning: [deprecation] SchemeRegistry in org.apache.http.conn.scheme has been deprecated
SchemeRegistry schemeRegistry = new SchemeRegistry();
^
test1.java:266: warning: [deprecation] ClientConnectionManager in org.apache.http.conn has been deprecated
ClientConnectionManager cm = new SingleClientConnManager(schemeRegistry);
^
test1.java:266: warning: [deprecation] SingleClientConnManager in org.apache.http.impl.conn has been deprecated
ClientConnectionManager cm = new SingleClientConnManager(schemeRegistry);
^
test1.java:267: warning: [deprecation] DefaultHttpClient in org.apache.http.impl.client has been deprecated
HttpClient HttpClient1 = new DefaultHttpClient(cm);
到目前为止,我没有任何CA证书和自签名证书来解决这个问题,我试图让我的程序忽略ssl验证,因为Web服务只会使用HTTPS
,因为我测试了开源使用HTTP
的API软件无法正常工作,但如果我在没有任何ssl验证的情况下尝试HTTPS请求,它的工作就像预期的那样。请指导我这个问题。这些是我使用的jar文件: