Vagrant の仮想マシンに Nginx を入れてエラーの出ない SSL アクセスが出来るようにします。
自己署名証明書の作成
自己署名証明書(オレオレ証明書)を作成していきます。
opensslコマンドではデフォルトPEM形式エンコードされます。秘密鍵の生成で指定してる-des3
は暗号化方式で、他にも-des, -des3, -aes128, -aes192, -aes256
などが使用できます。
# RSA秘密鍵の生成 openssl genrsa -des3 -out private.key 2048 # RSA秘密鍵のパスフレーズ解除 cp private.key private.key.org openssl rsa -in private.key.org -out private.key # CSRの作成 openssl req -new -key private.key -out public.csr # CRTの作成 openssl x509 -req -in public.csr -signkey private.key -out public.crt -days 3650 # rootのみ読み取り可能に変更 chmod 400 private.* public.*
CSRの作成では国や組織などの入力を求められますがオレオレ証明書の場合は適当でも問題ありません。ただし以下の箇所については使用するドメインを指定しておきましょう。省略したりドメインが違うと警告有りでのアクセスしかできません。
Common Name (e.g. server FQDN or YOUR name) []:*.example.com
秘密鍵のパスフレーズを解除する理由はサーバ起動の度にパスフレーズの入力を求められるからで、暗号化された秘密鍵は復号化して使うのが一般的です。そのためオレオレ証明書に関しては最初から暗号化しないで作成してもいいと思います。
# 暗号化しないRSA秘密鍵の生成 openssl genrsa -out private.key 2048 # ついでに秘密鍵から公開鍵を生成する方法 openssl rsa -in private.key -pubout -out public.key
CSR と CRT については以下参照。
拡張子 | 概要 |
---|---|
*.csr | Certificate Signing Request (証明書署名要求) の略。公開鍵に署名を施して証明書を発行するために使用し、CSRの作成には秘密鍵が必要。ただしCSRに秘密鍵は含まれない (公開鍵のみ) |
*.crt | Certificate (証明書) の略。CSRから証明書を発行する。公開鍵に自分の秘密鍵で署名を施して証明書を作るため自己署名 (オレオレ証明書) という。 |
RSA鍵、証明書のファイルフォーマットについて - Qiita
opensslで秘密鍵のパスフレーズを解除する方法
Nginxの設定
Nginxをインストールしてない場合はしてください。
$ sudo apt-get install nginx
/etc/nginx/sites-enabled/default
に SSL の記述と証明書、秘密鍵を追加します。
server { listen 443 ssl; server_name dev.example.com; ssl_certificate /etc/ssl/private/public.crt; ssl_certificate_key /etc/ssl/private/private.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; }
ファイルが編集できたら Nginx を再起動します。
$ sudo service nginx restart * Restarting nginx nginx
ブラウザでアクセス
Vagrant 上の仮想マシンの IP が192.168.33.10
の場合は、ローカルの/etc/hosts
に192.168.33.10 dev.example.com
を追加しておきます。
ブラウザでhttps://dev.example.com
にアクセスすると以下のようにエラーが表示されるかと思います。詳細設定からアクセスするを選択すると一応アクセスは可能です。
次はこのエラーを出さないようにして保護された通信にしたいと思います。
仮想マシン内で作成した証明書public.crt
をローカルに持ってきてください。キーチェーンアクセスを開いてログインの証明書にドラッグアンドドロップして移動させます。名前の欄に作成時に指定した Common Name の名前で表示されるはずです。ダブルクリックして開き常に信頼に変更します。
もう一度https://dev.example.com
にアクセスするとエラーが表示されなくなりました。証明書はワイルドカードで作成したので hosts ファイルに追加すればhttps://test.example.com
などでもアクセス可能です。