0

この質問は重複しているように見えるかもしれませんが、私が閲覧したスレッドはどれも私の状況に対処したり助けたりしていないようです。

私は何日もの間、自己署名SSL証明書を作成しようとしています。証明書は、HTTPSを介してWSDLファイルを提供する必要があるGlassfishドメインにアクセスするために必要です。デフォルトのSSLポート(443)を使用しないSolaris10でGlassfish3.1.1を使用しています。現在、8181を使用しています。

SSL証明書は、SSL証明書へのアクセスに使用されるホスト名に非常に細心の注意を払っています。証明書は、複数のネットワークゾーンで有効である必要があります。したがって、glassfishドメインには複数の異なるIPが関連付けられています。ホスト名(これをfoobarと呼びましょう)は、私が見る限り、サーバー自体の外部からはアクセスできません。

多くの調査の結果、これらのIPを示すサブジェクト代替名を使用して自己署名証明書を生成する必要があると判断しました。以下は私が取ったステップです。

  1. SANを使用して証明書を生成する最も簡単な方法は、この機能を備えたkeytoolユーティリティを含むJava7をダウンロードすることです。OracleWebサイトからJDK1.7.0_04をダウンロードし、foobarにインストールします。

  2. glassfish domain1構成ディレクトリに移動します(例:/ opt / glassfish3 / glassfish / domains / domain1 / config)。

(以下は、Oracle Glassfish 3.1のドキュメントから変更されています:http://docs.oracle.com/cd/E18930_01/html/821-2435/ablqz.html

  1. キーストアで証明書を生成します。注:各glassfishドメインには独自のキーストアがあります。以下の証明書は、HTTPSポート8181に関連付けられているdomain1に対して生成されます。

    keytool -genkey -alias foobar -keyalg RSA -dname "CN=foobar, OU=xxxxxxx xxxx, O=xxxxxxxxxx, L=xxxxx xxx, S=xx, C=xx" -ext "SAN=IP:12.34.56.78,IP:99.88.77.66" -keypass changeit -storepass changeit -validity 3650 -keystore keystore.jks

  2. 生成された証明書をファイル(この場合はfoobar.cer)にエクスポートします

    keytool -export -alias foobar -storepass changeit -file foobar.cer -keystore keystore.jks

  3. 証明書を信頼できる証明書としてcacertsにインポートします。これを2回行います。1回はGlassfishcacertsファイル用で、もう1回はfoobarのJavaJREcacertsファイル用です。

    keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts.jks

    / usr / java / jre / lib / security: keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts

  4. 念のため、HTTPSにアクセスするWindowsワークステーションのJava JRE cacertsファイルにも証明書をダウンロードしてインポートしました(おそらく必要ありません)。

    C:\ Program Files \ Java \ jre \ lib \ security: keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts

  5. glassfishdomain1を再起動します。

    asadmin restart-domain domain1

  6. 再起動が完了したら、接続をテストします。私の場合、JavaアプリをNetbeansにロードしているWindowsワークステーションに移動します。HTTPSを介してWSDLが必要な場所でテストを実行https://12.34.56.78:8181し、ソースとして入力します。

これにより、次のエラーが発生します。

2012-06-05 10:25:32,132  WARN utilities.ConnectionManager - Could not connect to url https://12.34.56.78:8181/foobar/WebService?wsdl: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

代わりに、domain1にデフォルトのGlassfish SSL証明書を使用すると、サブジェクト代替名が存在しないことを示すエラーが発生します。そのため、そもそも証明書を再生成するという問題を経験しました。

私の知る限り、信頼できるCA証明書として証明書をインポートすると、この「有効な証明書パスが見つかりません」というエラーを解決できるはずです。私はネットワークの専門家ではないことを認めますが、これまでの私の調査はすべて、そうなることを示しています。ここでの問題が非標準のSSLポートを使用しているためかどうかはわかりません(:8181を追加する必要があると、SAN IPとの不一致が発生する可能性があります)。まだ試していません。しかし、CNまたはSANのいずれかで、IP:ポートの組み合わせに対して自己署名証明書を生成する方法はありませんか?

ありがとう...助けていただければ幸いです!

PS必要に応じてアプリケーションコードを提供できます。

4

2 に答える 2

1

私がこの問題を抱えてからかなりの時間が経ちました。

上記のように解決できなかったため、パブリックCAにSSL証明書を注文することになりました。

Glassfish(3.1.1)とSSLに関する1つの注目すべき癖に遭遇しました。何らかの理由で、ドメインごとに少なくとも1つの非SSL対応ネットワークリスナーが存在する必要があります。存在しない場合、SSL対応のWebサービスURLにアクセスするときに証明書エラーが発生します。

つまり、8080と8181にリスナーがあるとします。両方がSSL対応の場合、証明書は機能しません。SSLが8080から削除された場合、リスナー8181に添付された証明書が機能します。

于 2012-10-03T22:44:22.243 に答える
0

問題は、cacertsに送られる証明書が非常に特定のエイリアスを持っている必要があることだと思います(3.1.1.2ではglassfish-instanceです)

于 2013-02-08T17:06:32.130 に答える