4

Web サービスを公開するために wso2 esb (バージョン 4.0.3) を使用しました。wso2 の管理コンソールを使用して、Web サービスをプロキシ サービスとして追加します。https 経由でのみ Web サービスを公開/使用したいと考えています。スタブを生成した後、次のことを行いました

  1. java keytool を使用して jks ファイルを作成します。
  2. wso2 証明書をエクスポートし、jks ファイルにインポートしました。
  3. 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;
          }});

しかし、これはセキュリティ上の問題を引き起こす可能性があります。この問題を解決する方法を提案してください。

4

1 に答える 1

2

このエラーは、ホスト名が証明書のCNと一致しない場合に発生します。私はあなたに2つの解決策を提供することができます。

  • IPアドレスを使用してサービスにアクセスするだけでよい場合は、サーバー証明書のCN値の値として正しいIPアドレスを持つ証明書を生成するだけです。JavaKeytoolを使用できます。
  • IPアドレスとホスト名の両方を使用してサービスをアドレス指定する場合は、サブジェクト代替名(SAN)を含む証明書を生成します。Java7に同梱されているJavaKeytoolは、SANを使用して証明書を生成できます。それ以外の場合は、OpenSSLなどの他のツールを使用するか、SANを使用してCAによって発行された証明書を使用します。
于 2012-06-22T12:21:57.690 に答える