しんぺい
CloudflareのSSL証明書を、UbuntuにインストールしたNginxに入れる方法を紹介します!
なお、今回使っているVPSのFlaunt7の登録方法などはこちらの記事で書いていますので、Flaunt7に興味がある方はぜひ読んでみてください。

CloudflareのSSL証明書を発行する
まずはCloudflareのSSL証明書を発行します。
すでにCloudflareにドメインが登録されている前提の話ですので、まだ登録が完了していな方は、こちらを参考に登録してみてください。

Cloudflareの管理画面のメニューから、「SSL/TLS」をクリックします。
画面をスクロールしていくと、中盤に「Origin Certificates」という項目があるので、右にある「Create Certificate」をクリックします。
ここで何か触ることは基本ありません。
一番上の「Let CloudFlare generate a private key and CSR」にチェックが入っていること、発行する対象のドメインが正しいことを確認できたら、一番下にある「Next」をクリックします。
次の画面で証明書と鍵の2つが発行されますので、確認ができたら1回このままにしておきます。
証明書と鍵をUbuntuに格納する
先ほど発行した証明書と鍵を、Ubuntuに格納します。
Ubuntuにはデフォルトで、証明書を格納する/etc/ssl/certsディレクトリと、鍵を格納する/etc/ssl/privateディレクトリが用意されています。
まずは証明書を格納するために、新しくファイルを作成し、中に先ほど発行した証明書(Origin Certificate)の中身を丸々コピペします。
$ sudo vi /etc/ssl/certs/cert.pem
同様に、鍵を格納するファイルを作成し、中に先ほど発行した鍵(Private Key)の中身を丸々コピペします。
$ sudo vi /etc/ssl/private/key.pem
格納が完了したら、Nginxの設定ファイルを変更します。
「hogehoge.com」というドメインで作ると仮定し、以下のように書き込みます。
/etc/nginx/sites-available/hogehoge
upstream app_server1 {
server 127.0.0.1:8000 fail_timeout=0;
}
server {
listen 80;
listen [::]:80;
server_name hogehoge.com www.hogehoge.com;
return 302 https://$server_name$request_uri;
}
server {
# SSL configuration
server_name hogehoge.com www.hogehoge.com;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl on;
ssl_certificate /etc/ssl/certs/cert.pem;
ssl_certificate_key /etc/ssl/private/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 160s;
proxy_read_timeout 300s;
proxy_send_timeout 160s;
location / {
proxy_pass http://app_server1;
}
location /static {
alias /var/www/static;
}
}
Djangoのフレームワークを使っているため、他のフレームワークなどでは不要な箇所もあるかもしれませんが、概ねこのような形になると思います。
保存が完了したら、一度Nginxのテストをしておきます。
$ sudo nginx -t
==================
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
「successful」と出れば、Nginxの記述は問題ないので、設定ファイルの内容を反映するためにNginxを再起動します。
$ sudo systemctl restart nginx
また、もしUbuntuにファイアーウォールを導入しているのであれは、SSL用のポートも開放しておく必要がありますので、以下のように設定しておきます。
$ ufw allow 443
CloudflareでSSLの影響範囲を変更する
再びCloudflareに戻り、「OK」ボタンをクリックして、証明書と鍵のウィンドウを閉じます。
上にスクロールしていき、「SSL」という項目の右側にあるプルダウンを、「Flexible」から「Full」に変更します。
これで、CloudflareとNginxサーバー間の通信を全て暗号化することになります。
あとは実際にWebサイトに戻り、https://hogehoge.comで見られるようになっていれば完成です!