JAVAアクセスHTTPS/SSLインタフェース
5094 ワード
解決方法:
1.インタフェースを呼び出す前にサーバ証明書をインポートするtruststore(コマンドのインポートまたはコードのロードを開始)をロードし、このサーバ証明書のみを信頼します(証明書が更新されても信頼できません.推奨しません).
2.インタフェースを呼び出す前に、サーバ証明書のルート証明書をインポートするtruststoreをロードします.これにより、このルート証明書が発行したサーバ証明書が信頼され、サーバ証明書の更新も信頼されます(推奨)
3.インタフェースを呼び出す前に証明書の信頼を無視します.つまり、すべての証明書を信頼することに相当します(推奨しません)
4.インタフェースを呼び出す前に、サーバ証明書を取得し、その証明書を信頼します(3条に相当しますが、プロセス中に証明書の情報をカスタマイズして検証できます).
1.2. アイデアは以下の方法で使用できます.
1.コード方式:
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
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;
}
}