2

wsdl2java ユーティリティを使用して Web サービス クライアントを作成したいと考えています。SSL経由でこのサーバーに接続する必要があります

この wsdl は次のようになります。

https://xxx.xx.xx.xx:8443/api/wsdl/xxxxxxx.wsdl

以下を使用して証明書を生成しました。

openssl s_client -connect xxx.xx.xx.x:8443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > abcCertificate.pem

次を使用してキーストアに追加しました。

keytool -import -noprompt -trustcacerts -alias testcert -file abcCertificate.pem -keystore /usr/java/jdk1.7.0_06/jre/lib/security/cacerts -ext san=ip:xxx.xx.xx.xx

を使用してWeb サービスクライアントwsdl2javaを作成しようとすると、例外がスローされます。

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present

このリンクからこれらの情報を使用します 。

4

1 に答える 1

2

証明書の「インポート」と「生成」を混同しているようです。

コマンドは証明書を生成しませんopenssl s_client。そのサーバーで使用されている証明書を取得します。

後で使用するコマンドは、そのkeytool -import証明書をそのままトラストストアにインポートします。そこで使用する意味はありませ-ext san=ip:xxx.xx.xx.xxん。証明書を生成しているのではなく、インポートしているだけです。

そのサーバーを管理している場合は、IP アドレス SAN を使用して生成 (または別の場所から証明書を取得) する必要があります ( Java はこの仕様に厳密に従っているため)。

そのサーバーを制御できない場合は、そのホスト名を使用します (既存の証明書にそのホスト名と一致する CN が少なくとも存在する場合)。

一般に、このようなサーバーからのみ取得した証明書をトラスト ストアに直接インポートするのは適切ではありません。これは、特定の接続が改ざんされていないと想定しているためです。

于 2012-10-09T10:44:50.810 に答える