Let's Encryptによるhttps環境の構築

2018-11-28 23:20:31

 Webコンテンツに対するアクセスを行う場合使われるプロトコルはhttpかhttpsである。httpsは暗号化されているため、セキュリティ面で使用が推奨されている。

 ただしhttpsを使うためには、認証局(CA)に証明書を登録しなければならない。有料のCAを使うと年間に数万円の費用が発生する。これを無料で行ってくれるのがLet's Encryptである。

 Let's Encryptで発行した証明書は、ドメインに関する操作権限は確認するものの、発行先の身元の証明は一切無い。ドメイン所有者との通信を保証することだけが目的となる。

必要なものをインストールする

2018-11-28 23:20:50

apt -y install certbot

VirtualHostのデータを削除

2018-11-28 23:25:53

前回の設定ファイルが残っているのなら削除する

rm -f /etc/nginx/sites-enabled/www /etc/nginx/sites-enabled/www2 
systemctl reload nginx

証明書の作成

2018-11-28 23:23:17

以下の3つ分の証明書を一つにまとめて作成する例
hogehoge
www.hogehoge
www2.hogehoge

-wはcertbotが確認用のファイルを置く場所
-dは証明書を発行するドメイン名で複数記述すると、一つの証明書で複数に対応できる
出力される証明書のデータは、最初に指定したドメイン名でフォルダが作成される
certbot certonly -w /var/www/html -d hogehoge -d www.hogehoge -d www2.hogehoge

ドメイン名の確認方法は2を選ぶ
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

証明書の期限が近づくと、設定したメールアドレスに通知が送られてくる
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): メールアドレス

ここは同意のa
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a

特に用はないのでn
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n


成功すると以下のメッセージが返る
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hogehoge/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hogehoge/privkey.pem
   Your cert will expire on 2018-11-19. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"

※無料ドメイン名を使っている場合の注意点
 他の人が同じ基本ドメイン名で証明書を大量に作成している場合、そのドメイン名での作成回数が限界を超えている場合がある
 その場合、その日の作成は諦めるしかない 

VirtualHostの設定

2018-11-28 23:30:39

server設定でドメイン名とコンテンツを関連付ける
ファイルは一つにまとめてもかまわないし、server設定ごとに複数に分けることもできる
今回は複数に分けて設定していく

/etc/nginx/sites-enabled/hogehoge
server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/hogehoge/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    server_name  hogehoge;
    root /var/www/html/;
}



/etc/nginx/sites-enabled/www.hogehoge
server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/hogehoge/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    server_name www.hogehoge;
    root /var/www/www/;




/etc/nginx/sites-enabled/www2.hogehoge
server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/hogehoge/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hogehoge/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    server_name www2.hogehoge;
    root /var/www/www2/;

証明書の定期更新

2018-11-28 23:40:47

/etc/cron.d/certbot_update

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
0 0 1 * *  root certbot renew && systemctl reload nginx


crondの更新
systemctl reload cron