JAVAアクセスHTTPS/SSLインタフェース

5094 ワード

解決方法:
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クラスの作成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;
	}
}