メリークリスマス、鯨井貴博@opensourcetechです。
今回は、Nginxの Advent Calendar 2015のラスト(第25日)を兼ねた記事となります。
Let's EncryptでNginx1.9.9をSSL化
今回は12月3日にPublic BetaとなったLet's Encryptを使ったみたかったので、
NginxのSSL証明書として使用することにしてみることにしました。
いつも通り、手元のPC上の仮想マシンで試そうと思っていたのですが、
以下の条件を満たす必要があることが分かりました。
①独自ドメインを取得している
②証明書取得時に、Let's EncryptからWebサーバのTCP80にアクセス可能
まず①への対応としては、
今年のOSC徳島2015のブースで知り合ったMyDNSさんで独自ドメインを取得することにしました。
(opensourcetech.mydns.jpをゲット!!)
ドメインの取得については、
トップページのJOIN USからアカウント登録をすれば、
ドメイン情報の登録も出来、後工程で確保するグルーバルIPアドレスを
DNSのレコードとして追加できるようになります。
また、②への対応としては事務所等のルータのFW設定を変更し、
外部からTPC80へアクセス出来るようにするか、
クラウドサービスを利用するか考えましたが、
せっかくの機会なので後者でやってみることにしました。
そして、選択したのは、AWS!
こちらも登録の必要がありますが、今ならクリスマスサービスや
条件付ですが12か月無料利用可能とのことでしたので、
登録し、CentOS7(64bits)のインスタンスを使用することにしました。
AWS(Amazon Web Service)
ここからはAWS上に作成したCentOS7へSSHでリモートアクセスし 、
作業を行います。
とりあえず、現在の状況を確認しておきます。
cat /etc/redhat-release
rpm -q python
間違いなく、CentOS7であり、pythonも2.7です。
※使用するOSによっては、pythonが2.6の事がありますが、
let's encryptを使用する為には2.7へバージョンアップする必要があります。
let's encryptクライアントをGithubから取得する為、
gitをインストールします。
yum -y install git
rpm -q git
git clone https://github.com/letsencrypt/letsencrypt
これでカレントディレクトリにletsencryptクライアントがコピーされます。
手に入れたletsencrpytディレクトリ内にある、
letsencrypt-autoスクリプトを実行します。
cd letsencrypt
./letsencrypt-auto --help
上記を実施することで必要なソフトウェアなどが全て入手出来ます。
なんて楽なんでしょう、ある意味怖いですがw
環境構築の最後にはusageも表示荒れますが、
nginxについては実験的なサポートとのことですので、
今後のバージョンアップ等に期待し、
今回は証明書のみ作成し、nginxのSSL設定で使用することにしました。
./letsencrypt-auto certonly --standalone -d www.opensourcetech.mydns.jp
なお、上記を実行した際に、
Let's Encryptから今回構築するWebサーバのTCP80へアクセスがあるようで、
webサーバソフトウェアが起動している場合、
以下のようにエラーとなりますので、あらかじめ停止しておいて下さい。
※Fw設定などもお忘れなく。
正常に動作した場合、
以下のようにE-mailアドレスの入力を求められます。
特に、今回使用するドメインに関係するものでなくていいようです。
Agreeを選択すれば、完了!
/etc/letsencrypt/live/www.opensourcetech.mydns.jpディレクトリ配下に、
cert.pem、chain.pem、fullchain.pem、privkey.pemという4つのファイルが出来ました。
cert.pemは証明書、chain.pemは中間証明書、fullchain.pemは証明書と中間証明を含んだもの、privkey.pemは秘密鍵となります。
nginxにつては/etc/yum.repos.dに公式レポジトリファイルを追加し、
インストールします。
nginx.repo
-------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
現在の最新版であるnginx1.9.9をインストールし、設定を追加します。
yum -y install nginx-1.9.9
nginx -V
以前は、デフォルトで有効かされていなかったと思うのですが、
sslモジュールがデフォルトで有効化されていたことを発見しました。
※どのバージョンからだろう??
/etc/nginx/conf.d/default.confのserverディレクティブに、
以下を追加します。
listen 443;
server_name www.opensourcetech.mydns.jp;
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/www.opensourcetech.mydns.jp/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.opensourcetech.mydns.jp/privkey.pem;
systemctl start nginx.serviceでnginxを起動後、
lsof -i:80でnginxの起動確認をします。
あとは、クライアントのブラウザから、
https://www.opensourcetech.mydns.jpへアクセスすれば、
Let's Encryptの証明書にて動作していることが確認できます。
90日間の有効期間となっていますが、
正式版となった場合自動で期間の更新がされるようなので今後に期待です。
2015年のNginx と HTTPの動き
今年一年も、約1ヶ月のインターバルでのリリースがされました。
また、更新内容を見ると、
HTTP/2.0(旧SPDY)やSSLに関する部分が頻繁に追加・修正されておりますね。
2015 02 09 Hello HTTP/2, Goodbye SPDY
http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html
2015 02 10 1.7.10(mainline version)
2015 03 24 1.7.11(mainline version)
2015 04 07 1.7.12(mainline version)
1.6.3 (stable version)
2015 04 21 1.8.0(stable version)
2015 04 28 1.9.0(mainline version)
2015 05 15 HTTP/2.0(RFC7540)文書化
http://www.rfc-editor.org/rfc/rfc7540.txt
2015 05 25 1.9.1(mainline version)
2015 06 16 1.9.2(mainline version)
2015 07 14 1.9.3(mainline version)
2015 08 18 1.9.4(mainline version)
2015 09 22 1.9.5(mainline version) (spdy → http_v2)
2015 09 22-24 nginx.conf at San Francisco
https://www.nginx.com/nginxconf/
https://www.nginx.com/category/events/nginxconf/
2015 10 27 1.9.6(mainline version)
2015 11 17 1.9.7(mainline version)
2015 12 08 1.9.8(mainline version)
2015 12 09 1.9.9(mainline version)
最後まで読んで頂き、ありがとうございます!
来年もどのような動きが、Web周り・nginxであるか、
楽しみにしておきましょう!
We Love Nginx!
See you again!!