Django网站(Apache部署)安装Let's Encrypt免费SSL证书

Posted Django编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django网站(Apache部署)安装Let's Encrypt免费SSL证书相关的知识,希望对你有一定的参考价值。

为什么要HTTPS

2018年2月8日,谷歌浏览器发布官方博客称,2018年7月发布的新版谷歌浏览器Chrome将把所有的HTTP网站标记为不安全。这项举措是为了促进网络安全,倡导更多网站使用HTTPS加密协议。

HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure,也就是HTTP的安全升级版。HTTPS相较于HTTP,其实就是在HTTP跟TCP中间加多了一层加密层TLS/SSL。

在TSL/SSL证书机制启动的时候,当客户发送任意信息到服务器,浏览器首先根据公钥信息将内容加密后提供给服务器,然后服务器使用私钥解密数据,达到双方安全通信的目的。这样当攻击者即使篡改数据,如果没有私钥,根本无法解密和理解传输的内容。

Let’s Encrpyt是什么

Let’s Encrypt是一套新型证书管理器(简称CA),能够轻松帮助用户获取并安装免费TLS/SSL证书,并借此在Web服务器上实现HTTPS加密。官方网址:https://letsencrypt.org/

Django网站安装Let’s Encrypt SSL证书

我的网站www.zyypost.com是基于Django编写,部署在Apache和mod_wsgi下,经过一段时间的观察和了解,决定为网站安装Let’s Encrypt免费SSL证书。

先说一下环境

  • Ubuntu 16.04 LTS

  • Django 1.10.6

  • Apache 2.4.6

  • Python 3.5.1

1. 安装git,如果已经安装则忽略
$ sudo apt-get install git
2. clone letsencrpyt
$ cd /usr/local
$ sudo git clone https://github.com/letsencrypt/letsencrypt
3. 生成cert
$ cd /usr/local/letsencrypt
$ sudo ./letsencrypt-auto --apache -d example.com -d www.example.com

生成证书会有两个选项,第一个填A,第二个填N

-------------------------------------------------------------------------------
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-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
-------------------------------------------------------------------------------
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N

证书生成后存在live文件夹中,一下四个.pem存在,说明创建成功。

/etc/letsencrypt/live/zyypost.com# ls
cert.pem  chain.pem  fullchain.pem  privkey.pem  README
4. 配置apache启动SLL

Ubuntu下启用SSL模块非常简单

$ sudo a2enmod ssl
$ sudo a2ensite default-ssl.conf
$ sudo service apache2 restart

启动成功后,在:/etc/apache2/mods-enabled#中可以查看到ssl.conf配置文件,同时在/etc/apache2/ports.conf中配置监听443端口。

5. Apache SSL配置文件default-ssl.conf
<virtualhost *:443>
 ServerName www.zyypost.com

 SSLEngine On
 SSLCertificateFile /etc/letsencrypt/live/hoge.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/hoge.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/hoge.com/chain.pem

 <FilesMatch "\.(cgi|shtml|phtml|php)$">
 SSLOptions +StdEnvVars
 </FilesMatch>
 <Directory /usr/lib/cgi-bin>
 SSLOptions +StdEnvVars
 </Directory>
 #####其余内容略,和普通的DjangoApache配置一样
</virtualhost>
6. http重定向配置文件
<virtualhost *:80>
 ServerName www.zyypost.com
 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https://www.zyypost.com%{REQUEST_URI} [R=301,L]
</virtualhost>
7. apache打开rewrite

使上述的重定向生效,需要启动apache的rewrite模块。

$ sudo a2enmod rewrite
8. 打开443端口

这里使用的UFW防火墙,所以需要打开443端口

ufw allow 443

重启Aapche服务器

$ sudo service apache2 restart

如果您按照以上步骤耐心的配置到这里,打开您的网站试试,应该可以看到https前面的小锁标志。说明配置成功了!

9. 配置Let’s Encrypt自动更新

Let’s Encrypt免费证书有效期只有三个月,需要到期前手动更新,当然不用这么麻烦。这里写了一个脚本certbot-auto-renew.sh,脚本每天执行一次自动更新,如果证书更新成功后重启apache服务器。每执行完脚本,将日志写入renew.log

cd /usr/local/letsencrypt
sudo ./certbot-auto renew --renew-hook 'service apache2 restart' >> /var/log/letsencrypt/renew.log
exit 0

每天5:18分更新,避开10,30分整数时间以免服务器拥堵。

vi /etc/crontab
# m h dom mon dow user  command
18 5    * * *   root    /bin/certbot-auto-renew.sh
后记

第2步、第3步安装是根据网上教程摸索而来,在安装完成后,又看到一种不用安装git生成cert的方案,感觉更简单直接,也摘录到一起供大家参考吧。

安装
sudo apt-get install python-letsencrypt-apache
生成证书
sudo letsencrypt --apache certonly -d example.com -d www.example.com
参考
  1. How to secure your Apache using Certbot SSL:https://hostpresto.com/community/tutorials/how-to-secure-your-apache-using-certbot-ssl/

  2. Djangoで開発したWebアプリケーションをLet’s EncryptでSSL対応する(Apache編):https://gyobot.com/blog/detail/7/

  3. Setting up SSL on a Django App with Let’s Encrypt - Ubuntu, Apache, and mod_wsgi:https://www.subevolvere.com/blog/items/4/setting-ssl-django-app-lets-encrypt-ubuntu-apache-and-mod_wsgi

以上是关于Django网站(Apache部署)安装Let's Encrypt免费SSL证书的主要内容,如果未能解决你的问题,请参考以下文章

Python3 + django2.0 + apache2 + ubuntu14部署网站上线

Apache24 上的 DJango 部署不起作用

Apache2.4部署python3.6+django2.0项目

[Python]DJango部署在Apache服务器配置示例

[Python]DJango部署在Apache服务器配置示例

ubuntu+apache+python+django部署