TomCatのSSL設定

数週間前、私は問題に遭遇しました-TomCatはサーバー(windows 2008)上にあり、私によってインストールされていませんでした。 SSLプロトコルを介して認証を行う必要があります。 以前にWindowsやNixesにウェブサーバーを設定したことはありませんが、最短3日で解決する必要があります。 私はGoogleにYandexで尋ねることにしたが、SSLチャネル暗号化の作成方法に関する記事と「2フェーズ認証」について不明瞭な記事を見つけた。 私は3日間苦しみ、学期の終わりに決断を下しました(いつものように、素晴らしいアイデアは素晴らしい二日酔いから生まれました)。 より詳細に:
TomCatのインストール方法については説明しません。 そのような記事はramp延しています。
まず、キーを使用してキーストアを作成します。
コマンドラインに次のコードを入力してみましょう。
>keytool -genkey -alias tomcat -keyalg RSA -keystore mystore -validity 999 -keysize 512 

ここに:
-tomcat-エイリアス名
-keyalg-鍵生成アルゴリズム
-キーストア-ストレージ名
-有効性-証明書の有効期間
-キーサイズ-キーサイズ
その結果、コンソールに以下が表示されます。
キーストアのパスワードを入力: mystorepassword
あなたの名と姓は何ですか?
[不明]:名
組織単位の名前は何ですか?
[不明]: 組織単位
あなたの組織の名前は何ですか?
[不明]: 組織
あなたの市または地域の名前は何ですか?
[不明]: 都市
州または県の名前は何ですか?
[不明]: 状態
このユニットの2文字の国コードは何ですか?
[不明]: ru
CN =名、姓、OU =組織単位、O =組織、L =都市、ST =州、C = ruは正しいですか?
[いいえ]: はい
キーパスワードを入力します(キーストアのパスワードと同じ場合はRETURN):
太字で強調表示されているものは手動で入力され、要求は行ごとに表示されます。
キーにパスワードが入力されていないことに注意してください(この場合、ストレージパスワードが使用されます)。

SSLコネクターserver.xmlフラグメント)を構成します
記録を見つける
 <!-- Define a SSL HTTP/1.1 Connector on port 443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation --> 

下に追加します
 <Connector port="8443" SSLEnabled="true" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="200" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="mystore" keystorePass="mystorepassword" keystoreType="JKS" keyAlias="tomcat"/> 

行を見つけます:
 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
-デフォルトでは、27行目でコメント化します。
また、この行がある場合:
 <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> 

それについてもコメントします。
ここで、 mystoreファイルをjavaフォルダーからトマトのルートにスローします。ルートにスローしない場合は、行を変更する必要があります
  keystoreFile="mystore" 
  keystoreFile="/ /mystore" 

ひも
 keystorePass="mystorepassword" 
-「mystorepassword」。これは、キーを使用してリポジトリを作成するときに指定したパスワードです。
Tomcatを起動し、SSL暗号化はすでに機能しています。

「2フェーズ」SSL-証明書によるサイトでの承認

検証メカニズムは非常に単純です:サーバーには、サブジェクト識別名がチェック対象のキーの発行者識別名と一致するキーが必要です(この場合、ダイアログモードで信頼を確認できるため、クライアントはそのようなキーを持っている必要はありません)。 認証センターによって発行されたキーを使用する場合、すでにセンターの公開キーと、このセンターによって署名された独自の公開キーがあります。 自己署名鍵の場合(正確にそのような鍵はkeytoolによって作成されます)、クライアントが使用する公開鍵がサーバーのトラストストアにあることが必要です。

上記のサーバーキーを生成しました。クライアントキーを作成します。
コンソールで次のコマンドを入力しましょう
 keytool -genkey -alias client -keyalg RSA -keystore myclientstore -storetype PKCS12 -validity 999 -keysize 512 

コンソールに次が表示されます。
キーストアのパスワードを入力: myclientstorepassword
あなたの名と姓は何ですか?
[不明]: クライアント
組織単位の名前は何ですか?
[不明]: orgunit
あなたの組織の名前は何ですか?
[不明]: org
あなたの市または地域の名前は何ですか?
[不明]: 地域
州または県の名前は何ですか?
[不明]: 状態
このユニットの2文字の国コードは何ですか?
[不明]: RU
CN =クライアント、OU = orgunit、O = org、L =局所性、ST =状態、C = RUは正しいですか?
[いいえ]: はい
キーパスワードを入力します(キーストアのパスワードと同じ場合はRETURN):

サーバーキーの生成と同様に、パラメーターのみが表示されます
  -storetype 
。 このパラメーターは、ブラウザでサポートされているストレージのタイプを示します。使用しているタイプが正確にわからない場合は、変更しないでください。これはすべてのユーザーに適しています(電子機器でチェック!!!
  -keystore 
-ここでは、すでに顧客証明書の倉庫です。
次のステップは、サーバーの信頼できるストア(truststore)に公開鍵を配置することです。 これを行うには、結果のストア(myclientstore)からclientcertファイルにエクスポートします。
コンソールで次のコマンドを入力します。

 keytool -export -alias client -keyalg RSA -keystore myclientstore -storetype PKCS12 -file clientcert 


応答として、以下が表示されます。

キーストアのパスワードを入力: myclientstorepassword
ファイル「clientcert」に保存されている証明書

ここでは、「キーストアのパスワードを入力してください」という質問は新しいパスワードを要求しませんが、「myclientstore」を作成するときに入力したパスワードを要求します
ここで私はすべてが明確だと思う、なぜなら 上記のすべてのパラメーターについて説明します。 そして、結果はclientcertファイルです。
結果のファイルをサーバーの新しいストレージ(これはトラストストアになります)にインポートします。
コンソールにコマンドを入力しましょう
 keytool -import -alias client -keyalg RSA -keystore mytruststore -storetype JKS -file clientcert 


彼らは私たちに尋ねます

キーストアのパスワードを入力: mytruststorepassword

正解すると、表示されます

所有者:CN =クライアント、OU = orgunit、O = org、L =ローカリティ、ST =状態、C = RU
発行者:CN =クライアント、OU = orgunit、O = org、L =局所性、ST =状態、C = RU
シリアル番号:462a2361
有効期限:2007年4月21日(土)18:44:49 MSD 2007年7月20日(金)18:44:49 MSD 2007
証明書の指紋:
MD5:78:55:83:13:3A:4F:DB:CA:1A:60:5E:A4:87:1D:EC:93
SHA1:7A:A7:7C:C6:71:2B:82:74:9C:4F:C7:3D:FA:14:AD:2A:E5:BF:39:2F

最後の質問

この証明書を信頼しますか? [いいえ]: はい

そしてそれに応じて

証明書がキ​​ーストアに追加されました

ここでは、「キーストアのパスワードを入力してください」という質問は新しいパスワードを要求しませんが、「mytruststore」の形成中に入力したパスワードを要求します
さて、すべての証明書が生成され、信頼できるリポジトリに配置されます。
次に、サーバーを使用する必要があることをサーバーに伝える必要があります。サーバー構成を補足します。 これで、SSLコネクターの構成は次のようになります。
 <Connector port="8443" SSLEnabled="true" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="200" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="mystore" keystorePass="123456" keystoreType="JKS" keyAlias="tomcat" truststoreFile="mytruststore" truststorePass="123456" truststoreType="JKS"/> 

すでに述べたように、mytruststore、mystoreへのパスは変更できますが、同時にパスワード値を変更することを忘れないでください:-)

サードパーティの証明書をtrustedstoreに追加する必要がある場合は、次のコードを使用します。
 keytool -import -mytruststore -keystore mystore -alias tomcat -file clientcert 


trustedstoreの証明書を削除する必要がある場合は、次のコードを使用します。
 keytool -delete -mytruststore -keystore mystore -alias tomcat -file clientcert 


ファイルmytruststoreおよびmystoreをトマトのルート、または変更した場合はコネクターパラメーター(keystoreFileおよびtruststoreFile)で指定されたフォルダーにコピーします。
myclientstoreを使用するブラウザーに証明書にインポートします。 つまり たとえば、IE:
「ツール」->「インターネットオプション」->「コンテンツ」->「証明書」->「インポート」->「次へ」->「参照」->「すべてのファイル」->デフォルトで新しいマニフェストが保存されているフォルダーを見つけ、myclientstoreを選択し、->次->入力myclientstoreを生成するときに設定したパスワード、それだけです!
サーバーを再起動します。
https:// localhost:8443と入力すると、サーバーは証明書を要求しますが、入力すると
http:// localhost:8080最初の場合と同じページが開きますが、保護はありません。 すべてのリクエストがweb.xmlで httpからhttpsにリダイレクトされるようにするには追加します
Webアプリを閉じる前に:
 <security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <!—     --> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> 


サーバーを再起動します、出来上がり-すべてが機能します!
この記事が他の記事よりも理解しやすいものになることを願っています。 ここで、インターネットで見つけたすべての知識と、SSLとTomCatを一生懸命愛したときに受けた経験を収集しました。

Source: https://habr.com/ru/post/J134453/


All Articles