众所周知,http通过明文传输,在生产环境中很不安全,所以需要转向https。
环境:Ubuntu
django项目部署到Apache2请参看:https://blog.csdn.net/BigBoySunshine/article/details/59565477
这里假设你已经通过Apache2部署了Django项目,可以通过http访问到。
SSL证书
配置https需要SSL证书,这个证书可以购买,但是很贵;可以自己生成,但是浏览器不认,提示没认证的证书;但是有免费的证书可以申请,阿里云和腾讯云都有提供,以腾讯云为例,申请后会在半个小时内审核通过,然后可以直接下载证书,然后上传到你的云服务器备用。
配置SSL
我们在部署django项目时在/etc/apache2/sites-avaiable下创建了一个配置文件如mysite.conf,通过这个配置文件来启动项目,我们的故事就从这个配置文件说起,大致流程是:复制这个mysite.conf为default-ssl.conf,修改端口为443,添加ssl配置,此时可以通过https访问该站点,然后需要配置mysite.conf使http重定向到default-ssl.conf对应的https。具体过程如下:
1,启用ssl模块
sudo a2enmod ssl
2,监听端口
HTTPS走的是443端口,所以我们需要让Apache2监听这个端口
sudo vi /etc/apache2/ports.conf
在其中加入Listen 443,如果这个配置文件中有如下配置:
则说明配置文件已经默认添加了443端口,则不需要做任何操作。
然后需要在我们的安全组中添加443端口的出入规则。
3,配置default-ssl
default-ssl.conf配置文件是我们访问https://domin.com访问的配置,apache2的sites-avaiable文件夹中默认有这个文件。
有的文章说直接在default-ssl.conf文件中添加SSL证书的配置,但是尝试了一下发现,原来的default-ssl.conf指向的是apache2默认的网页,并不是我们的django项目。
此时可以把原来的default-ssl.conf文件备份一下,然后我们django的http配置文件复制一份保存为default-ssl.conf
cd /etc/apache2/sites-available
sudo cp mysite.conf default-ssl.conf
http配置文件为
ServerName www.domian.com
ServerAlias domian.com
ServerAdmin [email protected]
Alias /media/ /var/www/html/mysite/media/
Alias /static/ /var/www/html/mysite/static/
Require all granted
Require all granted
WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
Require all granted
需要修改default-ssl.conf的端口为443,添加ssl证书,如下:
ServerName www.domian.com
ServerAlias domian.com
ServerAdmin [email protected]
Alias /media/ /var/www/html/mysite/media/
Alias /static/ /var/www/html/mysite/static/
Require all granted
Require all granted
WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
Require all granted
# ssl配置
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/example.crt
SSLCertificateKeyFile /etc/apache2/ssl/example.key
其中/etc/apache2/ssl/是ssl证书存放的位置
4,启用default-ssl站点
sudo a2ensite default-ssl
// 重新加载配置文件
sudo service apache2 reload
此时访问https://domin.com应该就能访问到了。
5,http重定向到https
在http配置文件mysite.conf中添加重定向,如下
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
此时访问http就会强制跳转到https了
让修改的配置生效
sudo a2enmod rewrite
重启服务
sudo service apache2 restart
.cer证书
服务端配置了ssl,客户端也需要配置ssl证书,以安卓为例需要.cer证书。通常我们申请的证书中是没有.cer证书的,这就需要做证书转换。
申请的证书中通常有.crt和.key证书,.crt证书可以转换成.cer:
openssl x509 -in example.crt -out example.cer -outform der
ps:需要安装openssl
参考:http://www.cnblogs.com/yongpan/p/8000725.html
https://www.jianshu.com/p/ae80fbb39de6