search
LoginSignup
7

More than 5 years have passed since last update.

posted at

updated at

Djnagoが動いているサーバをletsencryptでHTTPS化

環境

Nginx + uwsgi + Djang 1.10 on CentOS 7 (さくらVPS)

letsencryptとは?

無料でウェブサイトを暗号化通信HTTPSにできる.詳細はこちら

どうやるか?

Certbotインストール

letsencryptの認証を自動化してくれる Certbot をインストールする.
ここで環境を選択すると,それぞれのインストール手順を示してくれる
自分の場合は以下の通り(Cent OS 7, Nginx)

bash:install cerbot
sudo yum install certbot

certbotで認証する

以下ようなコマンドを打つ.Djangoだとこのままだと成功しない.

# /var/www/example = Django project root
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
  • --webroot でwebrootプラグインなるものを使う
  • -w で認証ファイルの置き場を指定する.ここがDjangoの場合問題になる.
  • -d で認証させたいドメインを指定する.今回は example.com www.example.com になる.

-w 認証ファイルの置き場について

certbotによって -w で指定した場所に,以下のような認証のためのファイルがつくられる.

# 上の例の場合
/var/www/example/.well-known/acme-challenge

Django(とかRailsとか)の場合

DjangoとかRailsののような静的ファイルをそのまま配信しないようなアプリケーションサーバは,上で指定した /var/www/example/.well-known/acme-challenge に認証のためのファイルを作成されても読み込めないので,エラーになる.

よってこの -w で指定するディレクトリには,Djangoの静的ファイル置き場の場所を指定する必要がある.普通は多分以下の通り,Djangoプロジェクトの直下にあるstaticである.

Django_static_root
/var/www/example/static

こうすれば,静的ファイルの場所に認証局が認証ファイルを読みいけるので, certbotによる認証作業はクリアできるが,まだ nginx側 の設定をいじる必要がある.

nginxのconfigをいじる

/etc/nginx/nginx.conf
server {
    listen 80;
    #
    # いろいろな設定
    # 
    location /.well-known {
        root /var/www/example/static; 
    }
}

server {
    listen 443 default ssl;
    # いろいろな設定
}

これで認証が通る.

certbot certonly --webroot -w /var/www/example/static -d example.com -d www.example.com

認証が通ったら,nginxのlisten 443している方の設定を代えて,認証ファイルを指定してやる.

/etc/nginx/nginx.conf
server {
    listen 80;
    #
    # いろいろな設定
    #
    }
}

server {
    listen 443 default ssl;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    # いろいろな設定
}

これで https://example.com にアクセスして通常通りにページが表示されればSSL化できている.

参考

https://certbot.eff.org/#centosrhel7-nginx
https://www.abidibo.net/blog/2016/10/07/securing-django-lets-encrypt/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7