13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-23

環境

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

letsencryptとは?

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

どうやるか?

Certbotインストール

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

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/

13
7
0

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
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?