解决思路:
1. 调用接口前加载导入服务器证书的truststore(启动命令引入或代码里加载),这样只信任这个服务器证书(证书更新后,也不会信任,不推荐)
2. 调用接口前加载导入服务器证书根证书的truststore,这样就会信任这个根证书签发的服务器证书,服务器证书更新也会信任(推荐)
3. 调用接口前忽略证书信任,也就是相当于信任所有证书(不推荐)
4. 调用接口前,获取到服务器证书,然后信任该证书(相当于第3条,但可以在过程中对证书的信息进行自定义验证)
1.2. 思路可使用以下方式:
1. 代码方式:
System.setProperty("javax.net.ssl.keyStore", "d:/client.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "123456"); System.setProperty("javax.net.ssl.keyStoreType", "JKS"); System.setProperty("javax.net.ssl.trustStore", "d:/trust.jks"); // 将服务器证书或服务器证书的根证书添加至trust.jks System.setProperty("javax.net.ssl.trustStorePassword", "123123"); System.setProperty("javax.net.ssl.trustStoreType", "JKS");
2. JAVA运行命令中配置:
java -Djavax.net.ssl.keyStore=clientKeys -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=clientTrust -Djavax.net.ssl.trustStorePassword=password
3 思路解决方法:
1. Axis1.x使用方式
1.1 创建类MySocketFactory.java
import org.apache.axis.components.net.JSSESocketFactory; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.util.Hashtable; public class MySocketFactory extends JSSESocketFactory { public MySocketFactory(Hashtable attributes) { super(attributes); } protected void initFactory() throws IOException { TrustManager[] myTrustManager = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; SSLContext sc = null; try { sc = SSLContext.getInstance("SSL"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String arg0, SSLSession arg1) { return true; } }; try { sc.init(null, myTrustManager, new SecureRandom()); } catch (KeyManagementException e) { e.printStackTrace(); } sslFactory = sc.getSocketFactory(); } }1.2 调用接口之前进行以下axis设置
AxisProperties.setProperty("axis.socketSecureFactory", "MySocketFactory"); //参数为类路径2. http方式
import javax.net.ssl.*; import java.net.URL; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class Test { public static void main(String[] args) { try { URL myURL = new URL(""); TrustManager[] tm = {new MyX509TrustManager()}; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new java.security.SecureRandom()); //从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); //创建HttpsURLConnection对象,并设置其SSLSocketFactory对象 HttpsURLConnection httpsConn = (HttpsURLConnection) myURL.openConnection(); httpsConn.setSSLSocketFactory(ssf); // 调用接口 } catch (Exception e) { e.printStackTrace(); } } } class MyX509TrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } public boolean isClientTrusted(X509Certificate[] arg0) { // TODO Auto-generated method stub return true; } public boolean isServerTrusted(X509Certificate[] arg0) { // TODO Auto-generated method stub return true; } }
相关推荐
java实现读取证书访问https接口并获取返回数据.证书格式cer,der,crt等。
java的get和post请求,获取json的工具类,https时会存在ssl校验的问题,工具会自动去除ssl校验。
Java Https请求,跳过证书,直接访问 相关jar包全有 直接下载就能调试
JAVA访问HTTPS和WEBLOGIC配置SSL
ssl自制全套证书(包含服务器端、客户端、ca端的证书,格式有.crt,.key,.truststore,.keystore,.p12,.cer,.pem等类型),当时要配置webservice接口、tomca、nginx通过ssl访问的证书,弄了好久才生成了一套能使用的。...
自己封装的SSLClient,用https访问外部API接口
用于 SQL Server 的 Microsoft JDBC 驱动程序是 Type 4 JDBC 驱动程序,通过 Java 平台企业版中提供的标准 JDBC 应用程序接口(API)提供数据库连接。 驱动程序提供从任何 Java 应用程序、应用程序服务器或启用 Java...
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和...
用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系结构、开发工具和...
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和...
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...
Java HTTP / HTTPS代理服务器代理服务器代理服务器是位于客户端和客户端希望从中检索文件的远程服务器之间的服务器。 来自客户端的所有流量都被发送到代理服务器,并且代理服务器代表客户端向远程服务器发出请求。 ...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
在界面添加控件TIdSSLIOHandlerSocketOpenSSL和TIdHTTP idslhndlrscktpnsl1: TIdSSLIOHandlerSocketOpenSSL; idhtp1: TIdHTTP; 设置idhtp1.IOHandler属性为idslhndlrscktpnsl1 将openssl-1.0.1j-i386-win32.zip...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...