3

keytool を使用して証明書を作成しました。

keytool -genkey -alias tomcat -keyalg RSA

それをエクスポートしてキーストアにインポートしました:

keytool -export -alias tomcat name.crt
keytool -import -file name.crt

keytool -list を実行すると、2 つのエントリがあります。

tomcat, Sept 15, 2010, keyEntry,
Certificate fingerprint (MD5): ...
mykey, Sept 17, 2010, trustedCertEntry
Certificate fingerprint (MD5):...

両方のエントリのフィンガープリントが同じであることに注意してください。

.keystore ファイルを指すように server.xml を構成しました

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       keystoreFile="${user.home}/.keystore" keystorePass="changeit"
       clientAuth="false" sslProtocol="TLS" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

しかし、Java アプリでアクションを実行すると、Tomcat ログに次のように表示されます。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
...
sun.security.validator.ValidatorException: No trusted certificate found

実行する必要がある他の構成はありますか?

4

1 に答える 1

1

サーバーの証明書を信頼するには、クライアント (ブラウザなど) が必要です。

このためには、サーバーの証明書を信頼できる証明書としてブラウザーにインポートします。これは、ブラウザーが制御下にある場合にのみ機能します。または、信頼できる機関によって署名された証明書を取得しますが、これには費用がかかります。

別の名前でエクスポートおよび再インポートしても意味がありません。

アップデート:

私はあなたが何をしようとしているのか理解し始めていると思います。Java クライアントが https 経由で webapp にアクセスする必要があります。はい?

この場合、「トラストストア」、つまり信頼できる証明書を含むキーストアを提供する必要があります。システム プロパティ javax.net.ssl.trustStore を、使用するトラストストアの名前に設定する必要があります。

おそらく、手作りの TrustManager も使用できます。このサイトはそれに関する情報を提供しているようです: http://download.oracle.com/javase/1.4.2/docs/guide/security/jsse/JSSERefGuide.html

この簡単な例も役立つかもしれません: http://stilius.net/java/java_ssl.php

于 2010-09-19T16:33:55.227 に答える