Web サービスを公開するために wso2 esb (バージョン 4.0.3) を使用しました。wso2 の管理コンソールを使用して、Web サービスをプロキシ サービスとして追加します。https 経由でのみ Web サービスを公開/使用したいと考えています。スタブを生成した後、次のことを行いました
- java keytool を使用して jks ファイルを作成します。
- wso2 証明書をエクスポートし、jks ファイルにインポートしました。
- Web サービスの呼び出し中に、コードに以下を追加しました。
System.setProperty("javax.net.ssl.trustStore", "ファイル名"); System.setProperty("javax.net.ssl.trustStorePassword", "パスワード");
これらすべてを行った後、Java コードから Web サービスを呼び出そうとすると、URL が localhost で指定された場合にのみ機能します。ホスト ファイルに適切なマッピングがあるにもかかわらず、127.0.0.1 またはマシンの IP アドレスでは機能しません。IP アドレスを使用しているときに、次のようなエラーが発生し
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
ます。このエラーは、wso2 が提供するデフォルトの証明書に共通名として「localhost」が含まれているために発生します。次のコードを追加することで、この問題を取り除くことができます
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String string, SSLSession ssls) {
return true;
}});
しかし、これはセキュリティ上の問題を引き起こす可能性があります。この問題を解決する方法を提案してください。