DockerのLiferay環境にHTTPSを設定する - DockerのLiferay環境にHTTPSを設定する - aegif Labo Blog Liferay
null DockerのLiferay環境にHTTPSを設定する
以前のブログ にて、Dockerを利用したLiferay環境の構築方法を紹介しました。今回は、この環境にhttpsを設定する手法をご紹介します。
目標
- ローカルからhttps://liferaytest.local にアクセスすることで、Dockerで起動しているliferay画面が表示されるようにする
- ローカルからhttp://liferaytest.localにアクセスした場合、https://liferaytest.local にリダイレクトするようにする
注: ローカル環境の80ポートや443ポートを別の用途で使用している場合、競合してしまいます。本手順を試す際にそれらのポートを使用しているサービスやアプリケーションを停止させるか、今回使用するポートを別ポートとしてください(その場合はhttps://liferaytest.local:8443 などにアクセスすることとなります)
準備
hostsの設定
hostsファイルを開き、127.0.0.1 liferaytest.local
を追加します。ファイルの場所はOSにより異なります。
- MacやLinuxの場合:
/etc/hosts
- Windowsの場合:
C:\windows\system32\drivers\etc\hosts
Dockerコンテナの起動
Liferay社提供のDockerイメージを用いてコンテナを作成し、起動します。このとき、以下のようにhttps用のポートとして443も開けておきます。また、本記事ではコンテナ名をliferay_test_httpsとします。
$ docker run -d -p 80:8080 -p 443:8443 --name liferay_test_https liferay/dxp:latest
設定
自己署名証明書の作成とインポート
本記事では、httpsの証明書として自己署名証明書を使用します。
- ルート権限のユーザとして、コンテナでBashシェルを開きます
$ docker exec -it -u root liferay_test_https bash
- tomcatディレクトリに移動し、以下のコマンドを使用します。
$ cd tomcat $ keytool -genkey -alias tomcat -keyalg RSA -keystore keystore
- パスワードの設定を求められるため、適当な値を入力します(本記事ではchangeit)
Enter keystore password: Re-enter new password:
- 続けて名前や組織などの入力を求められますが、今回はテスト用の自己証明書なので空欄のまま進めます。最後に入力値が問題ないか確認されるため、yと回答します。
What is your first and last name? [Unknown]: What is the name of your organizational unit? [Unknown]: What is the name of your organization? [Unknown]: What is the name of your City or Locality? [Unknown]: What is the name of your State or Province? [Unknown]: What is the two-letter country code for this unit? [Unknown]: Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct? [no]: y
- サーバーの証明書をエクスポートするため、続けて以下のコマンドを実行します。コマンド実行時にパスワードを尋ねられるので、先ほど設定した値を入力します。実行後、tomcatディレクトリに証明書(server.crt)が作成されます。
$ keytool -export -alias tomcat -keypass changeit -file server.crt -keystore keystore Enter keystore password:
- 次に、以下のコマンドによりJDKのcacertsにインポートします。パスワードと、証明書を信用するかの確認を求められるので、それぞれ入力します。
$ keytool -importcert -alias tomcat -file server.crt -keypass changeit -cacerts Enter keystore password: ... 中略(作成した証明書の情報) ... Trust this certificate? [no]: y Certificate was added to keystore
TomcatへのSSL設定
前項目に引き続き、ルート権限のユーザとして、コンテナでBashシェルを開いている状態で作業を行います。
- コンテナ内にテキストエディタが入っていないので、vimをインストールします
$ apt-get update $ apt-get install -y vim
/opt/liferay/tomcat/conf/server.xml
ファイルを開き、以下の2点を書き換えます$ vi /opt/liferay/tomcat/conf/server.xml
- 8443ポートに関するConnectorを記載します
- 修正前の内容(8443ポートに関する内容がコメントアウトされている)
<!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> -->
- 修正後の内容(keystorePassの値は、keystore作成時に設定したパスワード)
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="/opt/liferay/tomcat/keystore" keystorePass="changeit" clientAuth="false" sslProtocol="TLS"/>
- 修正前の内容(8443ポートに関する内容がコメントアウトされている)
- httpで8080ポートにアクセスできない場合に8443ポートにリダイレクトするという設定を、443ポートへのリダイレクトに修正します。
- 修正前の内容(redirectPort="8443")
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
- 修正後の内容(redirectPort="443")
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" URIEncoding="UTF-8" />
- 修正前の内容(redirectPort="8443")
- 8443ポートに関するConnectorを記載します
/opt/liferay/tomcat/conf/web.xml
ファイルを開き、最後の行(</web-app>
)の上に、以下の内容を書き加え、httpでのアクセスを禁止します。<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>
- 変更した設定を反映するため、dockerコンテナを再起動します
$exit #dockerコンテナから抜ける $docker exec liferay_test_https /opt/liferay/tomcat/bin/shutdown.sh #dockerコンテナ停止 $docker ps #コンテナ停止を確認 $docker start liferay_test_https #dockerコンテナ再開
動作確認
ローカルからhttps://liferaytest.local、http://liferaytest.localにアクセスし、どちらでもhttps://liferaytest.localのURLでLiferayのTOP画面が表示されることを確認します。なお、自己署名証明書はほとんどのブラウザーで信頼されないため、警告メッセージが表示される場合があります。
今回の内容は以上となります。近年では本番環境ではhttpsがほぼ必須となっております。手元で簡単にhttpsでの挙動を確認したい際などにぜひお試しください。