Rootというルート認証局がIntermediateという中間認証局によって作成された証明書署名要求に署名し、さらに Subjectというサブジェクトによって作成された証明書署名要求に署名するテスト シナリオがあります。
Tomcat を Web サーバーとして使用し、サブジェクトキー ストア (ルート証明書、中間証明書、サブジェクト証明書チェーン、およびサブジェクト秘密鍵を含む) を使用するように構成し、ポート 80 でリッスンするように起動します。 (HTTP) および 443 (HTTPS)。
ルート証明書を (信頼できる証明書として) Firefoxにインストールし、自分のドメインにアクセスすると、次のようになります。
subject.usip.me uses an invalid security certificate.
The certificate is not trusted because no issuer chain was provided.
(Error code: sec_error_unknown_issuer)
明らかに、Firefox はチェーンの信頼性などを検証できませんでした。ここで、構成と実行した手順について詳しく説明する前に、Tomcat の構成を変更して、サブジェクトキー ストアを使用する代わりに中間キー ストアを使用するようにしました (中間キー ストアにはルート証明書が含まれています。中間証明書チェーンと中間秘密鍵)。この構成を使用すると、すべて正常に動作します。
次のツールを使用します。
- Java: 1.7.0_05
- トムキャット: 7.0.29
- ファイアフォックス: 14.0.1
ここに貼り付けた次のスクリプトを使用して、問題のキー ストアを作成します(かなり長いです)。Java キーツールがあれば誰でも実行できます (4096 の RSA キー サイズのため、おそらくそれほど高速な操作ではないでしょう)。
スクリプトの実行後、サブジェクトキー ストアに完全な信頼チェーンが含まれていることを確認できます (私が見たとおり)。
c:\>keytool -list -keystore c:\subject.jks -storepass changeit -rfc
ここに貼り付けられた次の(これも非常に長い)出力が出力されます。私には問題ないように思えます (少なくとも、何時間も格闘した後では、何も問題がないように見えます) 。
このようにserver.xmlを介して(このハウツーに従って) Tomcatをセットアップしました(デフォルトでコメントアウトされているこの単一のタグ以外は何も変更しません)。
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="c:/subject.jks"
keystorePass="changeit"
keystoreType="jks"
keyAlias="subject"
keyPass="changeit" />
(Tomcat を起動した後、Tomcat に接続します。サブジェクトまたは中間キー ストアを使用している間は、ログにエラーは記録されません。)
解決策を探しているときに、opensslを使用して自分のサービスを確認できることがわかりました。このツールの初心者ユーザーとして、自分のドメインに対して (Cygwin を使用して) 次のコマンドを実行しました。
$ openssl s_client -connect subject.usip.me:443 -CAfile /cygdrive/c/root.pem -showcerts &> /cygdrive/c/openssl.log
繰り返しになりますが、ここに長い出力を貼り付けました。
それは、ルート証明書Verify return code: 24 (invalid CA certificate)
を参照しているため(私が見るように)奇妙です。ここで、以前に中間キー ストアを使用するように Tomcat を再構成したと述べたときに、同じコマンドを実行してから、 でチェックアウトしました。したがって、ルート証明書は問題ありません。Verify return code: 0 (ok)
投稿と貼り付けで言及したドメインとサブドメイン名は、http://freedns.afraid.org/に登録されている無料のドメインであり、それぞれが私の現在のアドレスを指しています (言及したいと思いました。それは重要です)。
私が間違っていることはありますか?