ローカルでの開発でもURLをHTTPSにしたいケースがあります。DinghyはHTTPSもサポートしているので、比較的簡単にHTTPSの開発環境を用意できます。この記事では、Dinghy上のDockerコンテナにHTTPSで接続する方法を紹介します。
まずはHTTPサーバを立ててみる
まず、自己証明書を作ってHTTPSでの通信をする前に、HTTPでの通信ができるかを確かめておきます。ここではホスト名をmyapp.docker
とします。
docker run --rm -e VIRTUAL_HOST=myapp.docker httpd:alpine
http://myapp.docker にアクセスしてみてウェブページが表示されることを確認しておきます。
自己証明書を作成する
次に自己証明書を作成します。Dinghy HTTP ProxyはVIRTUAL_HOST
名に.key
や.crt
を加えたファイルをそのホストの証明書として認識するのでホスト名に合わせます。証明書の配置場所は~/.dingh/certs
です。このディレクトリがない場合は作成します。
この例ではVIRTUAL_HOST
がmyapp.docker
なので、myapp.docker.key
とmyapp.docker.crt
を作ります。
mkdir -p ~/.dinghy/certs
cd ~/.dinghy/certs
# 証明書の作成
openssl req \
-x509 \
-newkey rsa:2048 \
-keyout myapp.docker.key \
-out myapp.docker.crt \
-days 365 \
-nodes \
-subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=myapp.docker"
証明書を配置したら、対象のコンテナを起動し直します。
docker run --rm -e VIRTUAL_HOST=myapp.docker httpd:alpine
# docker-composeを使っている場合はdocker-compose restartします。
https://myapp.docker にアクセスすると、SSL通信になります。自己証明書なので、ブラウザでアクセスすると警告が出ますが、これは期待通りの振る舞いなので気にしなくてOKです。
自己証明書を信頼できる証明書に追加する
Finderやopen
コマンドでmyapp.docker.crt
を開きます。
open ~/.dinghy/certs/myapp.docker.crt
開くと、証明書をKeychainに追加するか聞かれるので、パスワードを入力して許可します。
Keychainを開いて、追加した証明書を探します。
追加した証明書をダブルクリックして「Always Trust」に変更し、証明書のウィンドウ閉じます。
http://myapp.docker にアクセスしてみて警告が出なくなっていれば成功です。場合によってはブラウザの再起動が必要になることがあります。
HTTPも活かす場合
SSL証明書を作ると、Dinghy HTTP ProxyはデフォルトでHTTPSのみを使うようになります。つまり、HTTPのアクセスはHTTPSにリダイレクトされます。この振る舞いはコンテナの環境変数HTTPS_METHOD
で変更できます。
-
HTTPS_METHOD=noredirect
: HTTPとHTTPSどちらも使う -
HTTPS_METHOD=redirect
: HTTPSのみ使う(デフォルト) -
HTTPS_METHOD=nohttp
: HTTPSのみ使う。HTTPでの疎通を行わない。HTTPからのリダイレクトはしない
docker run --rm -e VIRTUAL_HOST=myapp.docker -e HTTPS_METHOD=noredirect httpd:alpine
おわり
Dockerのローカル開発環境DinghyでSSL証明書を使う方法を紹介しました。