0

https wsdl から wsimport を使用して Web サービス クライアントを生成しようとしています。

call wsimport -d bin -s src -p mypackage.ws https://x.x.x.x:8181/services/SomeService?wsdl

セキュリティ エラーを解決するために、サーバーの証明書を Java のキーストアに追加しました。

keytool -import -keystore c:\Java\jdk1.6.0_38\jre\lib\security\cacerts -file c:\ca-dev.crt

しかし、wsimport エラーが表示されます。

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

WSDL ドキュメントの読み取りに失敗しました: https://xxxx:8181/services/SomeService?wsdl。1) ドキュメントが見つからないため。/2) ドキュメントを読み取ることができませんでした。3) ドキュメントのルート要素は ではありません。

[エラー] failed.noservice=提供された WSDL に wsdl:service が見つかりませんでした:

少なくとも 1 つのサービス定義を持つ WSDL を少なくとも 1 つ指定する必要があります

    Failed to parse the WSDL.

解決しました! 証明書の CN と同じ名前のエントリをホスト ファイルに追加しました。

4

1 に答える 1

1

SSL 証明書はホスト名に基づいています。証明書の CN は、アクセスしようとしているホスト名である必要があります。または、アクセスしようとしているホスト名と正確に一致するオプションのサブジェクト代替名エントリが含まれている必要があります。

可能であれば、https URL のホスト名が証明書の CN またはサブジェクトの別名の 1 つと正確に一致していることを確認してください。多くの証明書にはサブジェクトの別名がないため、証明書を調べたときに何も見つからなくても心配する必要はありません。

ポート 8181 が LAN 内でのみアクセス可能であり、完全かつ適切なホスト名でマシンを参照すると、インターネット ルートを使用して到達する場合など、この方法でホスト名を参照できない場合があります。私の知る限り、証明書のチェックを無効にするコマンドラインの手段はありません。1 つの (明らかに移植性のない) 回避策は、hosts通常%SystemRoot%\system32\drivers\etc\hostsは Windows にあるファイルにエントリを追加することです。これにより、証明書にあるホスト名でサーバーを参照できます。

于 2013-01-22T12:03:34.753 に答える