Edited at

Let's Encrypt + Nginxでhttpsアクセスにする!

More than 3 years have passed since last update.


概要

Let's Encryptを使って、友人に作ってあげた塾のWebページをhttpからhttpsアクセスにした話。

このページはNginxを使っているので、そこをhttpsにする設定も記す。


Let's Encryptとは?

Let's Encryptは、独自ドメインとWebサーバがあれば、誰でも簡単に Let's Encrypt の SSL/TLS 証明書を取得することができるオープンソースの取り組み。

SEO的にもhttpsの方が評価が高いらしいので、検索順位を上げたいなら導入する価値がある。(参考:『HTTPSをSEOで優遇』 SSL化を推奨するアルゴリズム導入をGoogleが公式発表

通常のSSL証明書を導入しようとしたらそこそこ高いので、そこまでセキュアじゃなくてもいいならばこれで充分かと。

もちろん、無料のものと有料のものには差があるので、そこを認識した上で使うこと。

参考:無料SSL/TLS証明書ができないこと


とりあえず、証明書を発行する

Let's Encrypt の使い方に従い、進める。

基本的にはこの通り。

コマンドだけまとめておく。

443ポートの開放と80ポート使っていたらそのプロセスを止めることを忘れずに。


letsencrypt導入


letsencrypt導入

$ git clone https://github.com/letsencrypt/letsencrypt

$ cd letsencrypt/
$ ./letsencrypt-auto --help
$ netstat -na | grep ':80.*LISTEN' # 80ポートを使っているものがないかを探す
$ sudo service nginx stop # あれば止める
$ sudo emacs /etc/sysconfig/iptables #443ポートを開放しないといけないので
$ # /etc/sysconfig/iptablesに下記を追加
$ # -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
$ sudo /etc/init.d/iptables restart # iptableをリスタート
$ ./letsencrypt-auto certonly -a standalone -d 自分のドメイン

※pythonが古いと怒られるので、新しめのpythonを入れる

参考:PyenvによるPython3.x環境構築(CentOS, Ubuntu)


nginxの設定


nginxの設定

$ sudo emacs /etc/nginx/conf.d/default.conf # nginxのconfをいじる


以下、nginx設定サンプル


default.conf

upstream unicorn {

server unix:/tmp/unicorn.sock;
}
# httpをhttpsへリダイレクト
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name www.example.com;

# www.example.comの部分は適宜、自分のドメインに置き換える
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
# www.example.comの部分は適宜、自分のドメインに置き換える
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

access_log /var/log/nginx/sample/sample_access.log;
error_log /var/log/nginx/sample/sample_error.log;

root /var/tmp/sample;

location @unicorn {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://unicorn;
proxy_redirect http:// https://;
}
}



nginxをrestartすれば完了!

$ sudo service nginx restart

スクリーンショット 2016-01-27 16.21.37.png

Let's Encrypt!


自動更新の仕組みを入れる

Why ninety-day lifetimes for certificates?

曰く、90日で期限が切れるため、自動更新の仕組みを入れる。

cronでやることをまず思いつくが、おそらくサーバー1台ならば素直にそれでやればいい。

証明書の自動更新設定を参考に。

※port80を使うので、一瞬nginxを止める必要がある


毎月2日の午前4時に実行

00 04 02 * * root service nginx stop && /home/shengbo-xu/letsencrypt/letsencrypt-auto certonly -d www.adachi-clias.com --renew-by-default && service nginx start