次のコマンドを使用してキーペアを作成しました。
"%Java_HOME%\bin\keytool" -genkeypair -keysize 2048 -alias Tomcat -keyalg RSA -sigalg SHA256withRSA
Jdk/lib/securityフォルダーにキーストアがあり、jre/lib/securityフォルダーに別のキーストアがあることに気付きました。保存されたこれらの1つが、作成したばかりのキーペアを保持すると想定しました。キーペアは、ログインしたユーザーディレクトリに作成されたデフォルトのキーストアに作成されました。
私の最初の質問は、なぜユーザーディレクトリにデフォルトのキーストアがあるのかということです。これは奇妙に思えます。そのキーストアを移動できますか?
2番目の質問は、なぜこれほど多くのキーストアがあるのかということです。
私の最後の質問は、私のキーペアがデフォルトストア内の唯一のキーであるため、別の場所に移動/コピーする必要があるかどうかです。 ICAによる署名が必要になるので、それ自体が正しくないようです。
Javaは、更新のたびにデフォルトのキーストアを上書きするため(ほとんどの場合、新しい場所にインストールして前のキーストアを消去します)、パッケージを更新するたびに、ユーザーが作成した秘密鍵が削除されます(更新の場合と同様)。また、信頼できないCAを削除するためのデフォルトのトラストストアの変更なども含まれているため、デフォルトの(そして最も適切な方法)のは、ユーザーのフォルダーに保存することです。そうすれば、更新から分離されます。また、同じマシン上のすべてのユーザーが他のユーザーの秘密鍵にアクセスしたり、デフォルトのトラストストアを操作してカスタムCAを許可したりすると、セキュリティの問題になります。
Windows証明書も同様に動作します。デフォルトでは、現在のユーザーの個人用ストレージが表示されます。新しい秘密鍵または信頼できる証明書は現在のユーザーにのみ影響しますが、マシンには引き続きWindowsに付属のデフォルトがあります(更新のたびに、新しいCAや信頼できないCAなどのデフォルトが変更されます)。
ユーザーが行うことは、同じマシン上の他のユーザーに影響を与えるべきではありません。
JREとJDKに関しては、前者はrunning
環境用(つまり、アプリケーションの標準使用用)ですが、後者はdevelopment
用であり、さまざまなニーズがあります。アプリケーションサーバーは、*.jsp
などのページをその場で「コンパイル」する必要があるため、JDKが必要になります。 JDKには独自のJREが含まれているため、JREが機能するために必要なすべてのものの独自のコピーがあります。サーバーとは異なる方法でクライアント(ユーザー)にサポートを提供する必要がある場合があるため(つまり、JREとJDKが異なるバージョンを使用している可能性がある)、共通の部分を共有すると干渉する可能性があります。
入力したのと同じコマンドで-keystore file.jks
を使用してキーストア(名前と場所)を変更できますが、Javaを実行するには、他のコマンドまたは構成で同じファイルを参照する必要があります。同じキーストアを使用します。エイリアスにTomcat
という名前を付けたので、アプリケーションサーバーのキーストアとして使用すると想定しているため、server.xml(またはcatalina.xml)ファイルでキーストアの場所を構成する必要があります。
サーバーのキーストアは、/etc/ssl/
などのアクセスが制限された(サーバーを実行しているユーザーのみが読み取り可能)ディレクトリに配置する必要があります。
ファイル自体の内容については、署名が必要な場合、最初に自己署名キーペアを作成し(これまでどおり)、次にCSR(証明書署名要求)を作成してCAに送信します。その後、チェーン全体(新しく署名された証明書とCAの証明書のチェーン)を同じキーストアの同じエイリアスにインポートする必要があります。それでもキーストア内の単一のエントリになりますが、そのエイリアスの下にいくつかの証明書(および秘密鍵)があります。
サーバーが別のサーバーに接続する必要がない場合、そのキーストアには他の証明書が含まれていてはなりません。また、必要な場合でも、代わりに別のトラストストア(2番目のキーストアですが、cacertsファイルと同様にCAのみが含まれます)を使用する必要があります(またはJREのデフォルトのトラストストアに依存するか、CAを同じキーストア)。