真是艹蛋的一次经历,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. 感知机(perceptron)原理总结

    目录 1. 感知机原理 2. 损失函数 3. 优化方法 4. 感知机的原始算法 5. 感知机的对偶算法 6. 从图形中理解感知机的原始算法 7. 感知机算法(PLA)的收敛性 8. 应用场景与缺陷 9 ...

  2. 题解 洛谷 P5385 【[Cnoi2019]须臾幻境】

    首先我们知道 \(n\) 个点的树有 \(n-1\) 条边,因此对于森林来说,其点数减边数即为树的个数.那么对于普通的图,求出其任意一个生成树森林,森林中树的个数即为原图中连通块的个数,也就是点数减边 ...

  3. 深入理解 EF Core:使用查询过滤器实现数据软删除

    原文:https://bit.ly/2Cy3J5f 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能会去除一些本人实在不知道如何组织 ...

  4. LaTeX公式学习

    简介 本文公式较多可能有加载较慢. 使用 LaTeX 的主要原因之一是它可以方便地排版公式.我们使用数学模式来排版公式. 公式 插入公式 可以用一对$来启用数学模式. 行中公式可以用如下方法: $数学 ...

  5. Squeeze-and-Excitation Networks(SENet)详解

    一.SENet简介 Squeeze-and-Excitation Networks(SENet)是由自动驾驶公司Momenta在2017年公布的一种全新的图像识别结构,它通过对特征通道间的相关性进行建 ...

  6. hostapd阅读(openwrt)-4

    接下来,咱们来看看hostapd的源码目录之hostapd,今天我们先分析整体功能,然后从main.c开始注释 hostapd下代码主要作用有:配置解析,环境初始化,控制接口建立,AP接口管理模块. ...

  7. Alink漫谈(十四) :多层感知机 之 总体架构

    Alink漫谈(十四) :多层感知机 之 总体架构 目录 Alink漫谈(十四) :多层感知机 之 总体架构 0x00 摘要 0x01 背景概念 1.1 前馈神经网络 1.2 反向传播 1.3 代价函 ...

  8. mongo安装和cmd运行命令

    一.安装方式 安装mongodb :www.mongodb.com next-->complete-->Instal MongoD as Service 不勾选 --> Instal ...

  9. Java 添加、删除、替换、格式化Word中的文本(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRang ...

  10. string类型 C++

    (C++递归预习到了string类型,这个是处理字符串的一个非常好用的东西,在C里面没有.今天来学习一下) 顺便推荐一个很不错的网站:http://c.biancheng.net/view/400.h ...