この質問は重複しているように見えるかもしれませんが、私が閲覧したスレッドはどれも私の状況に対処したり助けたりしていないようです。
私は何日もの間、自己署名SSL証明書を作成しようとしています。証明書は、HTTPSを介してWSDLファイルを提供する必要があるGlassfishドメインにアクセスするために必要です。デフォルトのSSLポート(443)を使用しないSolaris10でGlassfish3.1.1を使用しています。現在、8181を使用しています。
SSL証明書は、SSL証明書へのアクセスに使用されるホスト名に非常に細心の注意を払っています。証明書は、複数のネットワークゾーンで有効である必要があります。したがって、glassfishドメインには複数の異なるIPが関連付けられています。ホスト名(これをfoobarと呼びましょう)は、私が見る限り、サーバー自体の外部からはアクセスできません。
多くの調査の結果、これらのIPを示すサブジェクト代替名を使用して自己署名証明書を生成する必要があると判断しました。以下は私が取ったステップです。
SANを使用して証明書を生成する最も簡単な方法は、この機能を備えたkeytoolユーティリティを含むJava7をダウンロードすることです。OracleWebサイトからJDK1.7.0_04をダウンロードし、foobarにインストールします。
glassfish domain1構成ディレクトリに移動します(例:/ opt / glassfish3 / glassfish / domains / domain1 / config)。
(以下は、Oracle Glassfish 3.1のドキュメントから変更されています:http://docs.oracle.com/cd/E18930_01/html/821-2435/ablqz.html)
キーストアで証明書を生成します。注:各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
生成された証明書をファイル(この場合はfoobar.cer)にエクスポートします
keytool -export -alias foobar -storepass changeit -file foobar.cer -keystore keystore.jks
証明書を信頼できる証明書として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
念のため、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
glassfishdomain1を再起動します。
asadmin restart-domain domain1
再起動が完了したら、接続をテストします。私の場合、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必要に応じてアプリケーションコードを提供できます。