suin.io

Dockerのローカル開発環境DinghyでSSL自己証明書を使う方法

suin2016年11月25日

ローカルでの開発でも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_HOSTmyapp.dockerなので、myapp.docker.keymyapp.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からのリダイレクトはしない
HTTPとHTTPS両方を使う例
docker run --rm -e VIRTUAL_HOST=myapp.docker -e HTTPS_METHOD=noredirect httpd:alpine

おわり

Dockerのローカル開発環境DinghyでSSL証明書を使う方法を紹介しました。

RELATED POSTS