web-dev-qa-db-ja.com

Tomcatが正しいSSL証明書を提供しないのはなぜですか

SSLを使用してTomcatを正常に構成し、自己署名証明書を使用していました。最近、クライアントに私たちの証明書を「承認/信頼」させるだけでは簡単ではないという問題が発生しました。そのサーバーのverisigin証明書を購入しました。

証明書に新しい証明書をキーストアに追加しました。 Tomcatのserver.xmlファイルを更新して、新しい証明書のエイリアスを使用します。 Tomcatとサーバーの両方を再起動しました。サーバーに接続するたびに、古い証明書を取得します。

環境:

  • Windows 2008 R2-64ビット
  • Tomcat 6.0.29-サービスとしてインストール
  • Java 1.6.0_23

Connectorfrom server.xml:

<Connector port="443" maxThreads="150" 
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore.keys" keyalias="webapps2013"
           keystorePass="Redacted"             
           clientAuth="false" sslProtocol="TLS" protocol="HTTP/1.1" />

古い証明書を別のエイリアスに移動し、古いエイリアス名と同じ場所に新しい証明書を追加して、キーストアを変更しようとしました。

複数のブラウザやワークステーションから試してみました。 (キャッシュもクリアしました。)

では、Tomcatが新しい証明書を取得して提供するにはどうすればよいですか?

更新:
コメントの1つでtomcatsキャッシュをクリアするよう提案された後。
Tomcatを停止し、$ {CATALINA_HOME}/workを削除して、Tomcatを再起動しました。
まだ古い証明書を提供しています。

更新2:
jakarta_service_date.logcatalina.date.logmanagerを調べました.date.logstdout.date.logおよびstderr.date.log何も表示されません証明書エラー。セッションのシリアル化に関して奇妙なエラーが表示されますが。

Dec 11, 2013 10:46:27 AM org.Apache.catalina.session.StandardManager doUnload
SEVERE: IOException while saving persisted sessions: Java.io.FileNotFoundException: 
C:\Tomcat6.0\work\Catalina\localhost\RCSLIBRRunner\SESSIONS.ser (Access is denied)
Java.io.FileNotFoundException: C:\Tomcat6.0\work\Catalina\localhost\RCSLIBRRunner\SESSIONS.ser (Access is denied)

その後にスタックトレースが続きます。他のアプリケーションも同様の例外を投げました。それは数時間で起こっていません、それはtomcatsキャッシュをクリアすることによる副作用であったと思います。

次に、別のシリアライゼーションエラーを示します。

Dec 11, 2013 10:46:27 AM org.Apache.catalina.session.StandardManager stop
SEVERE: Exception unloading sessions to persistent storage
Java.io.FileNotFoundException: C:\Tomcat6.0\work\Catalina\localhost\RCSLIBRRunner\SESSIONS.ser (Access is denied)
5
Raystorm

ログにエラーがあり、protocol="HTTP/1.1"で問題が発生しました。私たちのエラーは

指定された証明書ファイルまたは無効なファイル形式

" google research "に基づいて、代わりにこれをprotocolに使用しました:

protocol="org.Apache.coyote.http11.Http11NioProtocol"

Connectorは次のとおりです。

<Connector port="8443" protocol="org.Apache.coyote.http11.Http11NioProtocol"
    SSLEnabled="true"
    maxThreads="150" 
    scheme="https" 
    secure="true"
    keystoreFile="/path/to/keystore"
    keystorePass="******"
    clientAuth="false" 
    sslProtocol="TLS" />
2
KM.

Connectorにタイプミスがあったことがわかりました

そのはず:

<Connector port="443" maxThreads="150" 
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore.keys" keyAlias="webapps2013"
           keystorePass="Redacted"             
           clientAuth="false" sslProtocol="TLS" protocol="HTTP/1.1" />

注:keyAliasの最初のaは大文字です。

エイリアスがリストされていない場合は、キーストアで見つかった最初のキーを単に黙って提供することがわかります。

1
Raystorm