java.security.cert.CertificateException: サブジェクトの代替名が存在しません

問題の説明:

サービスはサードパーティを呼び出す必要があり、本番環境でのみ呼び出すことができます

本番テスト関連のロジックで、サードパーティ インターフェイスを呼び出してエラーを報告します。エラー メッセージは次のとおりです。

ava.security.cert.CertificateException: サブジェクトの代替名が存在しません

HttpURL 接続の使用

問題が解決しました

次のコードを追加します


	static {
		try {
			trustAllHttpsCertificates();
			HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
				public boolean verify(String urlHostName, SSLSession session) {
					return true;
				}
			});
		} catch (Exception e) {
		}
	}

	private static void trustAllHttpsCertificates() throws NoSuchAlgorithmException,     KeyManagementException {
		TrustManager[] trustAllCerts = new TrustManager[1];
		trustAllCerts[0] = new TrustAllManager();
		SSLContext sc = SSLContext.getInstance("SSL");
		sc.init(null, trustAllCerts, null);
		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
	}

	private static class TrustAllManager implements X509TrustManager {

		public X509Certificate[] getAcceptedIssuers() {
			return null;
		}

		public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
		}

		public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
		}
	}

おすすめ

転載: blog.csdn.net/wangwenzhe222/article/details/130149576