Django+Apache2配置SSL证书——开启HTTPS时代

众所周知,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配置文件为

<VirtualHost *:80>
    ServerName www.domian.com
    ServerAlias domian.com
    ServerAdmin [email protected]

    Alias /media/ /var/www/html/mysite/media/
    Alias /static/ /var/www/html/mysite/static/
  
    <Directory /var/www/html/mysite/media>
        Require all granted
    </Directory>
  
    <Directory /var/www/html/mysite/static>
        Require all granted
    </Directory>
  
    WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
    
    <Directory /var/www/html/mysite/mysite>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
</VirtualHost>

需要修改default-ssl.conf的端口为443,添加ssl证书,如下:

<VirtualHost *:443>
    ServerName www.domian.com
    ServerAlias domian.com
    ServerAdmin [email protected]

    Alias /media/ /var/www/html/mysite/media/
    Alias /static/ /var/www/html/mysite/static/
  
    <Directory /var/www/html/mysite/media>
        Require all granted
    </Directory>
  
    <Directory /var/www/html/mysite/static>
        Require all granted
    </Directory>
  
    WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
    
    <Directory /var/www/html/mysite/mysite>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>
    # ssl配置
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/example.crt
    SSLCertificateKeyFile /etc/apache2/ssl/example.key

</VirtualHost>

其中/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

发布了71 篇原创文章 · 获赞 53 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/BigBoySunshine/article/details/88868152
今日推荐