はじめに
ローカルのwebサーバにhttpsで接続する場合、よくある方法がオレオレ証明書の発行です。
リモート環境ならLet’s Encryptでサクッと終わるのですが、ローカルでも同じくらい簡単な方法は無いかと探したら、mkcertなるツールが見つかりました。
実際に試して数分で完了でき、とても手軽でしたので紹介・共有しようと思います。
前提
- masOS High Sierra 10.13.6
- Vagrant+CentOS7+nginx
- ローカルの
/etc/hosts
に設定したドメインで、ブラウザからhttp接続できるようになっている
mkcert
概要
ブラウザに警告が出ないように自己証明書を作るのは本来複雑な手順が必要ですが、そのへんを自動でやってくれるのがmkcertです。golang製のツールで、開発環境用の証明書をお手軽に発行する目的で作られました。
It requires no configuration.
と謳ってる通り、本当にあっさり終わります。
WindowsやLinuxでも動作するようですが、対応ブラウザはFirefoxとChromeだけです。
インストール
homebrewで簡単に入ります。インストール後も手間要らず。
1 2 3 4 5 6 7 | $ brew install mkcert # Firefoxを使うならこちらも要インストール $ brew install nss # ローカルに認証局を作成する $ mkcert -install |
証明書作成
ドメインを指定してmkcertを実行します。下記の例では
sample.local
としています。
1 2 3 4 5 6 7 8 9 10 11 12 | $ mkcert sample.local Using the local CA at "/Users/nomura/Library/Application Support/mkcert" Created a new certificate valid for the following names - "sample.local" The certificate is at "./sample.local.pem" and the key at "./sample.local-key.pem" # コマンド実行時のカレントディレクトリに証明書が生成されます $ ls -l ./*.pem -rw------- 1 nomura staff 1704 2 27 20:03 ./sample.local-key.pem -rw-r--r-- 1 nomura staff 1529 2 27 20:03 ./sample.local.pem |
証明書設置と設定
webサーバにログインして、先ほど作った証明書を設置します。また、https接続の設定を記述します。以下は
nginx.conf
の一部抜粋です。
1 2 3 4 5 6 7 8 9 | $ sudo vi /etc/nginx/conf.d/default.conf ssl_protocols TLSv1.2; server { listen 443 ssl; server_name sample.local; ssl_certificate /etc/nginx/conf.d/sample.local.pem; ssl_certificate_key /etc/nginx/conf.d/sample.local-key.pem; } |
設定が終わったら
$ systemctl reload nginx
でnginxをリロードしましょう。
接続確認
ブラウザで
https://sample.local
に接続できればOKです。接続成功した場合、証明書の詳細情報がこんな感じで確認できます。
さいごに
Dockerで動かしているnginxやApacheでもmkcertは問題なく使えるはずですが、Dockerではhttps-portalなるLet’s Encrypt全自動コンテナがあるようです。開発環境をチームに配布することを考えると、
docker-compose up
だけで何も意識せずhttps接続環境が整うのは素晴らしいですね。こちらも調べてみようと思います。