如何以https模式运行django应用?


需要加强django应用的安全性,所以考虑使用HTTPS做服务。请问该如何配置?

配置 django https

妙法·村正 10 years, 2 months ago

方法比较多,以最常用的nginx为例:

步骤一 : 配置

就是安装nginx,如下

sudo apt-get install nginx

步骤二: 为证书创建一个目录

SSL证书有两个主要部分: 证书本身 和 public key。 为了使相关文件便于访问,我们创建一个专门的目录,如下:

sudo mkdir /etc/nginx/ssl

然后进入该ssl目录,后续操作都在此目录中进行。

步骤三: 创建 私有 Server Key 和 证书签名请求

首先创建私有 Server Key,这个过程,程序会让你输入server key的密码, 请一定记住,具体如下:

sudo openssl genrsa -des3 -out server.key 1024

然后,我们创建证书签名请求:

sudo openssl req -new -key server.key -out server.csr

这个命令会弹出命令行,让你首先输入server.key的密码;成功输入后,你会被问几个问题(也就是常说的Distinguished Name 或者 DN),特别需要注意以下几点:

  • 最重要的一个问题是 Common Name,在这里,你需要输入你的官方域名,如果没有,就输入你的服务器IP地址;
  • 在最后,会提示A challenge password []:An optional company name []:,直接回车跳过;
  • 这里列举一下:

    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:Shanghai
    Locality Name (eg, city) []:Shanghai
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
    Organizational Unit Name (eg, section) []:Dept of Merriment
    Common Name (e.g. server FQDN or YOUR name) []:example.com                  
    Email Address []:[email protected]
    

步骤四: 移除密码

虽然passphrase能够提供更高的安全保障,但是,当尝试重启nginx时,你就会被要求输入密码,这是远程自动维护的噩梦。使用命令如下:

sudo cp server.key server.key.org
sudo openssl rsa -in server.key.org -out server.key

步骤五: 给SSL Certificate签名

你的证书已经创建完毕,现在是要签名的时候了。注意:你可以同时在这里指定这个证书的有效期,参数是 -days,以天为单位。这个期限超过后,此证书不再可用。因为是测试,我们可以给一个长点的天数,比如3650。

sudo openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

自此,证书的创建全部完成。

步骤六: 在服务器配置证书

创建一个新的virtual host文件:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example

然后打开,并编辑:

sudo nano /etc/nginx/sites-available/example

到文件最下端,找到 HTTPS server的设置部分,如下图:

# HTTPS server
server {
    listen 443;
    server_name example.com;

    root /usr/share/nginx/www;
    index index.html index.htm;

    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key; 
}

取消先前的注释,测地解放HTTPS。具体如下:

  • 修改你自己的配置信息,和上面实例的一致
  • 修改"server_name" 字段,这个字段应该是你的域名或者IP地址
  • 给你的站点添加正确的目录 (以上配置包含了缺省的 nginx 页面).
  • 同时确保以下两行已被注释掉

    # Make site accessible from http://localhost/
    # server_name localhost;
    

步骤七: 激活这个virtual host

最后一步就是使这个virtual host工作,如下

sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example

然后重启nginx

sudo service nginx restart

在浏览器访问你的https地址: https://youraddress

--------结束----------

gzllry answered 10 years, 2 months ago

Your Answer