1.概要
HTTPS プロトコルを有効にするには、有効な SSL 証明書を用意する必要があります。この証明書には、使用者が暗号化通信するための認証情報が含まれています。シングルサインオン認証システムを有効にするためには、証明書が重要な鍵です。クライアントとサーバとの通信も、証明書がセキュリティを保障しています。
本マニュアルでは、Tomcat サーバーで HTTPS アクセス用の SSL 証明書を設定する方法について説明します。証明書を設定する前に、まず証明書を申請しておかなければなりません。利用者が公式環境で使用するためには、証明書プロバイダから購入する必要があります。一般では、VeriSign や GlobalSign などの国際的に認められている CA によって認証されています。
本マニュアルでは証明書設定プロセスのデモンストレーションのため、JDK独自の keytool ツールから生成された証明書を使っています。だから、正式な環境では使用することができません。
注:正式な環境では、本マニュアルの「2.1.証明書を作成する」で生成された証明書は使用できません。証明書は、プロバイダから申請する必要があります。正式な環境で独自の証明書を使用すると、アクセスする時にセキュリティ警告が表示されるため、組み込みサードパーティ・プラットフォームにアクセスできなくなります。
2.手順
1.証明書を作成する
1.JRE をインストールし、Administrator として cmd または Windows Powershell を実行します。cd D:\javasoft\java\jre\binを入力して、JRE の bin ディレクトリに入り、証明書作成のコマンドを実行します。下の画像の通りです。
注:Tomcatの設定に使用されているJRE に入ります。
keytool -genkey -alias tomcat-servers -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
2.業界標準のフォーマットである PKCS12 に移行する場合、次のコマンドを実行します。
keytool -importkeystore -srckeystore server.keystore -destkeystore server.keystore -deststoretype pkcs12
以下の画像のように、キーストアのパスフレーズ:changeitを入力します。
注:「姓名は何ですか」では、ドメイン名を入力します。ドメイン名に代わって、IP アドレスを入力できません。
ここでは、「姓名は何ですか」の問題ではroxyを入力しています。実際には存在しないドメイン名のため、テストのために hosts ファイルでこの仮想のドメイン名を記入します。下の画像の通りです。
こうすることで、roxy にアクセスする時、実際にはローカルマシンである 127.0.0.1 にアクセスします。
2.証明書をエクスポートする
以下のコマンドを実行します。
keytool -export -alias tomcat-servers -storepass changeit -file server.cer -keystore server.keystore
以下の画像のように、証明書をエクスポートします。
3.JDK証明書キーストアへ証明書をインポートする
以下のコマンドを実行します。
keytool -import -trustcacerts -alias servers -file server.cer -keystore cacerts -storepass changeit
システムは、この証明書を信頼するか聞きます。次の画像のように、yと答えます。
4.証明書を Tomcat のインストールディレクトリにコピーする
1.%JRE_HOME%\binディレクトリに入り、新しく生成したserver.keystore、server.cer、cacertsを Tomcat インストールディレクトリの%TOMCAT_HOME%にコピーします。以下の画像の通りです。
2.%JRE_HOME%\binディレクトリのファイルcacertsを、JREのsecurityディレクトリ、つまり%JRE_HOME%\lib\securityディレクトリに上書きします。以下の画像の通りです。
5.Webサーバーに証明書を適用する
1.server.xmlファイルを設定します。管理者としてテキストエディタを起動し、%TOMCAT_HOME%\conf\server.xmlを開きます。SSLに証明書のパスとkeystoreFile及びkeystorePassを探します。以下の画像の通りです。
注:パスは、絶対パスまたはTomcatの相対パスを入力できます。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" keystoreFile="D:\tomcat\apache-tomcat-8.5.50\server.keystore" keystorePass="changeit"/>
2.Tomcatのサービスを再起動し、https://roxy:8443/ にアクセスします。以下の画像の通りです。
上記の画面が表示されれば、TomcatのSSL設定が成功しています。
3.注意事項
1.その他の注意事項
1.設定しても Tomcat サービスが起動できないのは、「5.Webサーバーに証明書を適用する」の設定の誤りが原因です。上記の手順をきちんと完成したか確認してください。
2.ブラウザでは警告:潜在的なセキュリティリスクありのヒントが表示されます。それは、Java で生成された証明書を利用して https でアクセスする時の危険性を示しています。
無料の証明書を申請することもできます。
2.HTTPS の設定
Tomcat で SSL 証明書を設定して HTTPS アクセスを実現した後、Websocket 接続を有効にするためには、システム-システム管理-標準で HTTPS の設定を行う必要があります。
注1:HTTPS の設定は、「標準管理」をご参照ください。
注2:ポータルでHTTPS設定が表示されない場合、Websocket 接続が正しく設定されているため、修正の必要はありません。
3.リモート接続ができない
問題の概要
デザイナーからhttpsによるFineReport プロジェクトへのリモート接続ができない。
エラーメッセージ:invalid keystore format
分析
設定された https プロジェクトは証明書の形式が PKCS12 ですが、デザイナーズクライアントはデフォルトの jks 形式しかサポートしていません。
解決方法
Tomcat フォルダに新しい key フォルダを作成し、jks ファイル形式の server.keystore を配置します。
リモートで接続する場合は、key フォルダの server.keystore を選択します。