概要
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導入
$ 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の設定
$ sudo emacs /etc/nginx/conf.d/default.conf # nginxのconfをいじる
以下、nginx設定サンプル
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
Let's Encrypt!
自動更新の仕組みを入れる
Why ninety-day lifetimes for certificates?
曰く、90日で期限が切れるため、自動更新の仕組みを入れる。
cronでやることをまず思いつくが、おそらくサーバー1台ならば素直にそれでやればいい。
証明書の自動更新設定を参考に。
※port80を使うので、一瞬nginxを止める必要がある
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