真是艹蛋的一次经历,jdk6上面去访问别人的https,还好有百度搞定了问题.现在写下随笔,记录下;

首先要自己重写SSLSocketFactory这个类,

下面是自己重写的这个类:TLSSocketConnectionFactory

package cn.cbsw.tools;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyStore;
import java.security.Principal;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateFactory;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List; import javax.net.ssl.HandshakeCompletedListener;
import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSessionContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.security.cert.X509Certificate; import org.bouncycastle.crypto.tls.Certificate;
import org.bouncycastle.crypto.tls.CertificateRequest;
import org.bouncycastle.crypto.tls.DefaultTlsClient;
import org.bouncycastle.crypto.tls.ExtensionType;
import org.bouncycastle.crypto.tls.TlsAuthentication;
import org.bouncycastle.crypto.tls.TlsClientProtocol;
import org.bouncycastle.crypto.tls.TlsCredentials;
import org.bouncycastle.jce.provider.BouncyCastleProvider; /**
* 建立一个自己的ssl类
*/
public class TLSSocketConnectionFactory extends SSLSocketFactory{ static {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
} @Override
public Socket createSocket(Socket socket, final String host, int port,
boolean arg3) throws IOException {
if (socket == null) {
socket = new Socket();
}
if (!socket.isConnected()) {
socket.connect(new InetSocketAddress(host, port));
} final TlsClientProtocol tlsClientProtocol = new TlsClientProtocol(socket.getInputStream(), socket.getOutputStream(), new SecureRandom()); return _createSSLSocket(host, tlsClientProtocol);
} @Override public String[] getDefaultCipherSuites() { return null; }
@Override public String[] getSupportedCipherSuites() { return null; }
@Override public Socket createSocket(String host, int port) throws IOException, UnknownHostException { return null; }
@Override public Socket createSocket(InetAddress host, int port) throws IOException { return null; }
@Override public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { return null; }
@Override public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { return null; } private SSLSocket _createSSLSocket(final String host, final TlsClientProtocol tlsClientProtocol) {
return new SSLSocket() {
private java.security.cert.Certificate[] peertCerts; @Override public InputStream getInputStream() throws IOException { return tlsClientProtocol.getInputStream(); }
@Override public OutputStream getOutputStream() throws IOException { return tlsClientProtocol.getOutputStream(); }
@Override public synchronized void close() throws IOException { tlsClientProtocol.close(); }
@Override public void addHandshakeCompletedListener( HandshakeCompletedListener arg0) { }
@Override public boolean getEnableSessionCreation() { return false; }
@Override public String[] getEnabledCipherSuites() { return null; }
@Override public String[] getEnabledProtocols() { return null; }
@Override public boolean getNeedClientAuth() { return false; } @Override
public SSLSession getSession() {
return new SSLSession() { /*原本这些方法都是直接throw UnsupportedOperationException 导致看不到真实异常*/
@Override
public int getApplicationBufferSize() {
return 0;
}
@Override public String getCipherSuite() { return null; }
@Override public long getCreationTime() { return 0; }
@Override public byte[] getId() { return null; }
@Override public long getLastAccessedTime() { return 0; }
@Override public java.security.cert.Certificate[] getLocalCertificates() { return null; }
@Override public Principal getLocalPrincipal() { return null; }
@Override public int getPacketBufferSize() { return 0; }
@Override public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException { return null; }
@Override public java.security.cert.Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException { return peertCerts; }
@Override public String getPeerHost() { return null; }
@Override public int getPeerPort() { return 0; }
@Override public Principal getPeerPrincipal() throws SSLPeerUnverifiedException { return null; }
@Override public String getProtocol() { return null; }
@Override public SSLSessionContext getSessionContext() { return null; }
@Override public Object getValue(String arg0) { return null; }
@Override public String[] getValueNames() { return null; }
@Override public void invalidate() { return; }
@Override public boolean isValid() { return true; }
@Override public void putValue(String arg0, Object arg1) { return; }
@Override
public void removeValue(String arg0) {
return;
}
};
} @Override public String[] getSupportedProtocols() { return null; }
@Override public boolean getUseClientMode() { return false; }
@Override public boolean getWantClientAuth() { return false; }
@Override public void removeHandshakeCompletedListener(HandshakeCompletedListener arg0) { }
@Override public void setEnableSessionCreation(boolean arg0) { }
@Override public void setEnabledCipherSuites(String[] arg0) { }
@Override public void setEnabledProtocols(String[] arg0) { }
@Override public void setNeedClientAuth(boolean arg0) { }
@Override public void setUseClientMode(boolean arg0) { }
@Override public void setWantClientAuth(boolean arg0) { }
@Override public String[] getSupportedCipherSuites() { return null; } @Override
public void startHandshake() throws IOException {
tlsClientProtocol.connect(new DefaultTlsClient() { @SuppressWarnings("unchecked")
@Override
public Hashtable<Integer, byte[]> getClientExtensions() throws IOException {
Hashtable<Integer, byte[]> clientExtensions = super.getClientExtensions();
if (clientExtensions == null) {
clientExtensions = new Hashtable<Integer, byte[]>();
} //Add host_name
byte[] host_name = host.getBytes(); final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final DataOutputStream dos = new DataOutputStream(baos);
dos.writeShort(host_name.length + 3);
dos.writeByte(0);
dos.writeShort(host_name.length);
dos.write(host_name);
dos.close();
clientExtensions.put(ExtensionType.server_name, baos.toByteArray());
return clientExtensions;
} @Override
public TlsAuthentication getAuthentication() throws IOException {
return new TlsAuthentication() { @Override
public void notifyServerCertificate(Certificate serverCertificate) throws IOException {
try {
KeyStore ks = _loadKeyStore(); CertificateFactory cf = CertificateFactory.getInstance("X.509");
List<java.security.cert.Certificate> certs = new LinkedList<java.security.cert.Certificate>();
boolean trustedCertificate = false;
for ( org.bouncycastle.asn1.x509.Certificate c : serverCertificate.getCertificateList()) {
java.security.cert.Certificate cert = cf.generateCertificate(new ByteArrayInputStream(c.getEncoded()));
certs.add(cert); String alias = ks.getCertificateAlias(cert);
if(alias != null) {
if (cert instanceof java.security.cert.X509Certificate) {
try {
( (java.security.cert.X509Certificate) cert).checkValidity();
trustedCertificate = true;
} catch(CertificateExpiredException cee) {
// Accept all the certs!
}
}
} else {
// Accept all the certs!
} }
if (!trustedCertificate) {
// Accept all the certs!
}
peertCerts = certs.toArray(new java.security.cert.Certificate[0]);
} catch (Exception ex) {
ex.printStackTrace();
throw new IOException(ex);
}
} @Override
public TlsCredentials getClientCredentials(CertificateRequest certificateRequest) throws IOException {
return null;
} private KeyStore _loadKeyStore() throws Exception {
FileInputStream trustStoreFis = null;
try {
KeyStore localKeyStore = null; String trustStoreType = System.getProperty("javax.net.ssl.trustStoreType")!=null?System.getProperty("javax.net.ssl.trustStoreType"):KeyStore.getDefaultType();
String trustStoreProvider = System.getProperty("javax.net.ssl.trustStoreProvider")!=null?System.getProperty("javax.net.ssl.trustStoreProvider"):""; if (trustStoreType.length() != 0) {
if (trustStoreProvider.length() == 0) {
localKeyStore = KeyStore.getInstance(trustStoreType);
} else {
localKeyStore = KeyStore.getInstance(trustStoreType, trustStoreProvider);
} char[] keyStorePass = null;
String str5 = System.getProperty("javax.net.ssl.trustStorePassword")!=null?System.getProperty("javax.net.ssl.trustStorePassword"):""; if (str5.length() != 0) {
keyStorePass = str5.toCharArray();
} localKeyStore.load(trustStoreFis, keyStorePass); if (keyStorePass != null) {
for (int i = 0; i < keyStorePass.length; i++) {
keyStorePass[i] = 0;
}
}
}
return localKeyStore;
} finally {
if (trustStoreFis != null) {
trustStoreFis.close();
}
}
}
};
} });
} // startHandshake
};
}
}

依赖jar包:

bcpkix-jdk15on-1.60.jar

bcprov-jdk15on-1.60.jar

然后再写一个httpsConnectionUtils工具类:

package cn.cbsw.tools;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import org.apache.commons.lang.StringUtils; /**
* 本类是解决https访问问题
* @author sun
*
*/
public class HttpsConnectUtils { /**
* 获取url内容
*/
public static String getQuery(String desUrl,String method,Map<String,String> params) throws Throwable{
if(!"POST".equalsIgnoreCase(method)){
method="GET";//如果不是POST就认为是GET,至于PUT很少用到,暂时用不到
}
String paramStr="";
if(params!=null && !params.isEmpty()){
List<String> list=new ArrayList<String>();//存放参数
Iterator<String> it=params.keySet().iterator();
while(it.hasNext()){
String key=it.next();
list.add(key+"="+URLEncoder.encode(params.get(key), "utf-8"));
}
paramStr=StringUtils.join(list,"&");
}
//如果是get请求且带有参数
if(!"".equals(paramStr) && "GET".equalsIgnoreCase(method)){
desUrl+="?"+paramStr;
}
URL url = new URL(null,desUrl,new sun.net.www.protocol.https.Handler());
SSLContext sslContext=SSLContext.getInstance("TLS");
TrustManager x509TrustManager=new X509TrustManager() { @Override
public X509Certificate[] getAcceptedIssuers() {
return null;
} @Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException { } @Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException { }
};
sslContext.init(null, new TrustManager[]{x509TrustManager}, null);
HttpsURLConnection httpsConn=(HttpsURLConnection) url.openConnection();
httpsConn.setSSLSocketFactory(new TLSSocketConnectionFactory());
httpsConn.setRequestProperty("accept", "*/*");
httpsConn.setRequestProperty("connection", "Keep-Alive");
httpsConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows xp)");
httpsConn.setDoOutput(true);
httpsConn.setDoInput(true);
httpsConn.setRequestMethod(method!=null?method:"GET");//默认get
//忽略证书设置
httpsConn.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
//下面的方法会自动修改请求方式为POST
if(!"".equals(paramStr) && "POST".equalsIgnoreCase(method)){
DataOutputStream out = new DataOutputStream(httpsConn.getOutputStream());
out.writeBytes(paramStr);
out.flush();
out.close();
} InputStreamReader isr = new InputStreamReader(httpsConn.getInputStream(), "utf-8");
BufferedReader inReader = new BufferedReader(isr);
StringBuffer result = new StringBuffer();
String inputLine;
while ((inputLine = inReader.readLine()) != null) {
result.append(inputLine);
}
// 关闭输入流
inReader.close();
isr.close();
httpsConn.disconnect();//每次请求完毕后关闭链接
return result.toString();
}
}

然后调用的时候直接按httpsConnectionUtils.getQuery(String desUrl,String method,Map<String,String> params)调用即可.

通过百度整整坑了一个星期总算搞定.另外jdk1.8版的工具类也发下httpsConnectionUtils

package cn.cbsw.tools;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; import org.apache.commons.lang.StringUtils; /**
* 本类是解决https访问问题
* @author sun
*
*/
public class HttpsConnectUtils { /**
* 获取url内容
*/
public static String getQuery(String desUrl,String method,Map<String,String> params) throws Throwable{
if(!"POST".equalsIgnoreCase(method)){
method="GET";//如果不是POST就认为是GET,至于PUT很少用到,暂时用不到
}
String paramStr="";
if(params!=null && !params.isEmpty()){
List<String> list=new ArrayList<String>();//存放参数
Iterator<String> it=params.keySet().iterator();
while(it.hasNext()){
String key=it.next();
list.add(key+"="+URLEncoder.encode(params.get(key), "utf-8"));
}
paramStr=StringUtils.join(list,"&");
}
//如果是get请求且带有参数
if(!"".equals(paramStr) && "GET".equalsIgnoreCase(method)){
desUrl+="?"+paramStr;
}
URL url = new URL(null,desUrl,new sun.net.www.protocol.https.Handler());
SSLContext sslContext=SSLContext.getInstance("TLSv1.2");//jdk8支持1.2版本
TrustManager x509TrustManager=new X509TrustManager() { @Override
public X509Certificate[] getAcceptedIssuers() {
return null;
} @Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException { } @Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException { }
};
sslContext.init(null, new TrustManager[]{x509TrustManager}, null);
HttpsURLConnection httpsConn=(HttpsURLConnection) url.openConnection();
httpsConn.setSSLSocketFactory(sslContext.getSocketFactory());
httpsConn.setRequestProperty("accept", "*/*");
httpsConn.setRequestProperty("connection", "Keep-Alive");
httpsConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows xp)");
httpsConn.setDoOutput(true);
httpsConn.setDoInput(true);
httpsConn.setRequestMethod(method!=null?method:"GET");//默认get
//忽略证书设置
httpsConn.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
//下面的方法会自动修改请求方式为POST
if(!"".equals(paramStr) && "POST".equalsIgnoreCase(method)){
DataOutputStream out = new DataOutputStream(httpsConn.getOutputStream());
out.writeBytes(paramStr);
out.flush();
out.close();
} InputStreamReader isr = new InputStreamReader(httpsConn.getInputStream(), "utf-8");
BufferedReader inReader = new BufferedReader(isr);
StringBuffer result = new StringBuffer();
String inputLine;
while ((inputLine = inReader.readLine()) != null) {
result.append(inputLine);
}
// 关闭输入流
inReader.close();
isr.close();
httpsConn.disconnect();//每次请求完毕后关闭链接
return result.toString();
}
}

希望能帮到后来人!

package cn.cbsw.tools;
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;import java.net.UnknownHostException;import java.security.KeyStore;import java.security.Principal;import java.security.SecureRandom;import java.security.Security;import java.security.cert.CertificateExpiredException;import java.security.cert.CertificateFactory;import java.util.Hashtable;import java.util.LinkedList;import java.util.List;
import javax.net.ssl.HandshakeCompletedListener;import javax.net.ssl.SSLPeerUnverifiedException;import javax.net.ssl.SSLSession;import javax.net.ssl.SSLSessionContext;import javax.net.ssl.SSLSocket;import javax.net.ssl.SSLSocketFactory;import javax.security.cert.X509Certificate;
import org.bouncycastle.crypto.tls.Certificate;import org.bouncycastle.crypto.tls.CertificateRequest;import org.bouncycastle.crypto.tls.DefaultTlsClient;import org.bouncycastle.crypto.tls.ExtensionType;import org.bouncycastle.crypto.tls.TlsAuthentication;import org.bouncycastle.crypto.tls.TlsClientProtocol;import org.bouncycastle.crypto.tls.TlsCredentials;import org.bouncycastle.jce.provider.BouncyCastleProvider; /** * 建立一个自己的ssl类 */public class TLSSocketConnectionFactory extends SSLSocketFactory{ static {        if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {            Security.addProvider(new BouncyCastleProvider());        }    }
    @Override    public Socket createSocket(Socket socket, final String host, int port,                               boolean arg3) throws IOException {        if (socket == null) {            socket = new Socket();        }        if (!socket.isConnected()) {            socket.connect(new InetSocketAddress(host, port));        }
        final TlsClientProtocol tlsClientProtocol = new     TlsClientProtocol(socket.getInputStream(), socket.getOutputStream(), new     SecureRandom());
        return _createSSLSocket(host, tlsClientProtocol);    }
    @Override public String[] getDefaultCipherSuites() { return null; }    @Override public String[] getSupportedCipherSuites() { return null; }    @Override public Socket createSocket(String host, int port) throws IOException, UnknownHostException { return null; }    @Override public Socket createSocket(InetAddress host, int port) throws IOException { return null; }    @Override public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { return null; }    @Override public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { return null; }
    private SSLSocket _createSSLSocket(final String host, final TlsClientProtocol tlsClientProtocol) {        return new SSLSocket() {            private java.security.cert.Certificate[] peertCerts;
            @Override public InputStream getInputStream() throws IOException { return tlsClientProtocol.getInputStream(); }            @Override public OutputStream getOutputStream() throws IOException { return tlsClientProtocol.getOutputStream(); }            @Override public synchronized void close() throws IOException { tlsClientProtocol.close(); }            @Override public void addHandshakeCompletedListener( HandshakeCompletedListener arg0) { }            @Override public boolean getEnableSessionCreation() { return false; }            @Override public String[] getEnabledCipherSuites() { return null; }            @Override public String[] getEnabledProtocols() { return null; }            @Override public boolean getNeedClientAuth() { return false; }
            @Override            public SSLSession getSession() {                return new SSLSession() {
                    /*原本这些方法都是直接throw UnsupportedOperationException 导致看不到真实异常*/                    @Override                    public int getApplicationBufferSize() {                        return 0;                    }                    @Override public String getCipherSuite() { return null; }                    @Override public long getCreationTime() { return 0; }                    @Override public byte[] getId() { return null; }                    @Override public long getLastAccessedTime() { return 0; }                    @Override public java.security.cert.Certificate[] getLocalCertificates() { return null; }                    @Override public Principal getLocalPrincipal() { return null; }                    @Override public int getPacketBufferSize() { return 0; }                    @Override public X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException { return null; }                    @Override public java.security.cert.Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException { return peertCerts; }                    @Override public String getPeerHost() { return null; }                    @Override public int getPeerPort() { return 0; }                    @Override public Principal getPeerPrincipal() throws SSLPeerUnverifiedException { return null; }                    @Override public String getProtocol() { return null; }                    @Override public SSLSessionContext getSessionContext() { return null; }                    @Override public Object getValue(String arg0) { return null; }                    @Override public String[] getValueNames() { return null; }                    @Override public void invalidate() { return; }                    @Override public boolean isValid() { return true; }                    @Override public void putValue(String arg0, Object arg1) { return; }                    @Override                    public void removeValue(String arg0) {                        return;                    }                };            }
            @Override public String[] getSupportedProtocols() { return null; }            @Override public boolean getUseClientMode() { return false; }            @Override public boolean getWantClientAuth() { return false; }            @Override public void removeHandshakeCompletedListener(HandshakeCompletedListener arg0) { }            @Override public void setEnableSessionCreation(boolean arg0) { }            @Override public void setEnabledCipherSuites(String[] arg0) { }            @Override public void setEnabledProtocols(String[] arg0) { }            @Override public void setNeedClientAuth(boolean arg0) { }            @Override public void setUseClientMode(boolean arg0) { }            @Override public void setWantClientAuth(boolean arg0) { }            @Override public String[] getSupportedCipherSuites() { return null; }
            @Override            public void startHandshake() throws IOException {                tlsClientProtocol.connect(new DefaultTlsClient() {
                    @SuppressWarnings("unchecked")                    @Override                    public Hashtable<Integer, byte[]> getClientExtensions() throws IOException {                        Hashtable<Integer, byte[]> clientExtensions = super.getClientExtensions();                        if (clientExtensions == null) {                            clientExtensions = new Hashtable<Integer, byte[]>();                        }
                        //Add host_name                        byte[] host_name = host.getBytes();
                        final ByteArrayOutputStream baos = new ByteArrayOutputStream();                        final DataOutputStream dos = new DataOutputStream(baos);                        dos.writeShort(host_name.length + 3);                        dos.writeByte(0);                        dos.writeShort(host_name.length);                        dos.write(host_name);                        dos.close();                        clientExtensions.put(ExtensionType.server_name, baos.toByteArray());                        return clientExtensions;                    }
                    @Override                    public TlsAuthentication getAuthentication() throws IOException {                        return new TlsAuthentication() {
                            @Override                            public void notifyServerCertificate(Certificate serverCertificate) throws IOException {                                try {                                    KeyStore ks = _loadKeyStore();
                                    CertificateFactory cf = CertificateFactory.getInstance("X.509");                                    List<java.security.cert.Certificate> certs = new LinkedList<java.security.cert.Certificate>();                                    boolean trustedCertificate = false;                                    for ( org.bouncycastle.asn1.x509.Certificate c : serverCertificate.getCertificateList()) {                                        java.security.cert.Certificate cert = cf.generateCertificate(new ByteArrayInputStream(c.getEncoded()));                                        certs.add(cert);
                                        String alias = ks.getCertificateAlias(cert);                                        if(alias != null) {                                            if (cert instanceof java.security.cert.X509Certificate) {                                                try {                                                    ( (java.security.cert.X509Certificate) cert).checkValidity();                                                    trustedCertificate = true;                                                } catch(CertificateExpiredException cee) {                                                    // Accept all the certs!                                                }                                            }                                        } else {                                            // Accept all the certs!                                        }
                                    }                                    if (!trustedCertificate) {                                        // Accept all the certs!                                    }                                    peertCerts = certs.toArray(new java.security.cert.Certificate[0]);                                } catch (Exception ex) {                                    ex.printStackTrace();                                    throw new IOException(ex);                                }                            }
                            @Override                            public TlsCredentials getClientCredentials(CertificateRequest certificateRequest) throws IOException {                                return null;                            }
                            private KeyStore _loadKeyStore() throws Exception {                                FileInputStream trustStoreFis = null;                                try {                                    KeyStore localKeyStore = null;
                                    String trustStoreType = System.getProperty("javax.net.ssl.trustStoreType")!=null?System.getProperty("javax.net.ssl.trustStoreType"):KeyStore.getDefaultType();                                    String trustStoreProvider = System.getProperty("javax.net.ssl.trustStoreProvider")!=null?System.getProperty("javax.net.ssl.trustStoreProvider"):"";
                                    if (trustStoreType.length() != 0) {                                        if (trustStoreProvider.length() == 0) {                                            localKeyStore = KeyStore.getInstance(trustStoreType);                                        } else {                                            localKeyStore = KeyStore.getInstance(trustStoreType, trustStoreProvider);                                        }
                                        char[] keyStorePass = null;                                        String str5 = System.getProperty("javax.net.ssl.trustStorePassword")!=null?System.getProperty("javax.net.ssl.trustStorePassword"):"";
                                        if (str5.length() != 0) {                                            keyStorePass = str5.toCharArray();                                        }
                                        localKeyStore.load(trustStoreFis, keyStorePass);
                                        if (keyStorePass != null) {                                            for (int i = 0; i < keyStorePass.length; i++) {                                                keyStorePass[i] = 0;                                            }                                        }                                    }                                    return localKeyStore;                                } finally {                                    if (trustStoreFis != null) {                                        trustStoreFis.close();                                    }                                }                            }                        };                    }
                });            } // startHandshake        };    }}

Jdk1.6 HTTPS访问问题解决办法的更多相关文章

  1. web项目中url-pattern改成'/'后,js、css、图片等静态资源(404)无法访问问题解决办法

    感谢http://blog.csdn.net/this_super/article/details/7884383的文章 1.增加静态资源url映射 如Tomcat, Jetty, JBoss, Gl ...

  2. web项目中url-pattern改成'/'后,js、css、图片等静态资源(404)无法访问问题解决办法

    感谢http://blog.csdn.net/this_super/article/details/7884383的文章 1.增加静态资源url映射 如Tomcat, Jetty, JBoss, Gl ...

  3. Discuz x3.2利用阿里云cdn处理https访问亲测教程

    第一步配置cdn和https 1.首先去阿里云.腾讯云.七牛云等申请免费https证书 2.虚拟主机是不能直接支持https的,需要cdn处理后才可以,并且端口是80 3.开启cdn加速处理,(买一个 ...

  4. Tomcat创建HTTPS访问,java访问https

    一 https和ssL HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的 ...

  5. Windows XP系统下添加任务计划常出现问题解决办法

    Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...

  6. 记一次https访问握手失败(handshake failure)

    文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6239518.html  转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...

  7. ASP+Access UTF-8 网页乱码问题解决办法

    用ACCESS数据库和ASP做网站时用UTF-8编码有时会出现乱码,再者网页出错或者刷新页面后就是乱码,如果数据库取值乱码在开头加上<%@LANGUAGE="VBSCRIPT" ...

  8. 小程序后端项目【Springboot框架】部署到阿里云服务器【支持https访问】

    前言: 我的后端项目是Java写的,用的Springboot框架.在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功. 不成功具体点说就是:域名地址可以正 ...

  9. Gitbook 生成 pdf 中文字体错乱问题解决办法

    Gitbook 生成 pdf 中文字体错乱问题解决办法   用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, ...

随机推荐

  1. spring boot 整合 ehcache

    1. 该说的话 每个人都应当学会独立地去思考.去寻找答案,而不是一味地伸手向他人索取所谓的标准答案. 首先,别成为"拿来主义"者,其次远离"拿来主义"的人. 2 ...

  2. SQL order by语句

    关于order by: order by 语句用于根据指定的列对结果集进行排序,默认按照升序排列. 1.  select 字段名 from 表名 where 条件 order by 字段名1 asc/ ...

  3. async基本使用

    async函数在使用上很简单,我们来看一下下面的例子 async function add(a,b){ return a+b } add(1,2).then((res) =>{ consoel. ...

  4. 学Python入门应该先学什么?看完本文你就知道了

    学Python应先从Python开发基础部分入手:1.如学习Python语言介绍2.环境安装3.Python基本语法4.基本数据类型5.二进制运算6.来流程控制.7.字符编码.文件处理8.数据类型9. ...

  5. BUUCTF-web EasySearch (服务端包含注入ssi)

    一打开就是登录页面 存在index.php.swp...(反正我是没有扫出来,题目没给提示),分析一波源码 <?php ob_start(); function get_hash(){ $cha ...

  6. Ionic 移动端

    <body ng-app="testApp"> <ion-header-bar align-title="left" class=" ...

  7. Button基本用语

    1.self.btn2 = Button(root,image = photo,command = self.login) 使用 image 图片作为按钮,command 作为响应 2.self.bt ...

  8. MySQL数据库常见命令

    数据库的操作 MySQL服务器的常见命令 开启:sudo service mysql start关闭:sudo service mysql stop重启:sudo service mysql rest ...

  9. 5.21 省选模拟赛 luogu P4207 [NOI2005]月下柠檬树 解析几何 自适应辛普森积分法

    LINK:月下柠檬树 之前感觉这道题很鬼畜 实际上 也就想到辛普森积分后就很好做了. 辛普森积分法的式子不再赘述 网上多的是.值得一提的是 这道题利用辛普森积分法的话就是一个解析几何的问题 而并非计算 ...

  10. dsu on tree详解

    这个算法还是挺人性化的,没有什么难度 就是可能看起来有点晕什么的. 大体 思想是 利用重链刨分来优化子树内部的查询. 考虑一个问题要对每个子树都要询问一次.我们暴力显然是\(n^2\)的. 考虑一下优 ...