HTTPS支持 (自1.3起)

使用 https <socket>,<certificate>,<key> 选项。这个选项可能会被多次指定。首先使用OpenSSL工具生成你服务器的密钥,证书签名请求,以及自注册证书:

注解

你会想要一个用于生产的真正的SSL证书的。

  1. openssl genrsa -out foobar.key 2048
  2. openssl req -new -key foobar.key -out foobar.csr
  3. openssl x509 -req -days 365 -in foobar.csr -signkey foobar.key -out foobar.crt

然后使用刚刚生成的SSL证书和密钥启动服务器:

  1. uwsgi --master --https 0.0.0.0:8443,foobar.crt,foobar.key

由于端口443(这个端口通常用于HTTPS)是特权端口 (即非root进程可能不会绑定它),因此你可以使用共享socket机制,像这样绑定后去除特权:

  1. uwsgi --shared-socket 0.0.0.0:443 --uid roberto --gid roberto --https =0,foobar.crt,foobar.key

uWSGI将会绑定到任何IP的443端口,然后删除那些 roberto 的特权,接着讲共享socket 0 (=0) 用于HTTPS。

注解

=0语法目前未公开。

设置SSL/TLS加密

https 选项的第四个参数是可选的,你可以用它来指定OpenSSL加密套件。

  1. [uwsgi]
  2. master = true
  3. shared-socket = 0.0.0.0:443
  4. uid = www-data
  5. gid = www-data
  6.  
  7. https = =0,foobar.crt,foobar.key,HIGH
  8. http-to = /tmp/uwsgi.sock

这将会为你的SSL/TLS事务(尽可能)设置所有的 HIGHest(最高的) 密码。

客户端证书认证

https 还可以有可选的第五个参数。你可以用它来指定一个CA证书来对你的客户端进行鉴权。生成你的CA密钥和证书 (这次,密钥将会是4096位,并且有密保):

  1. openssl genrsa -des3 -out ca.key 4096
  2. openssl req -new -x509 -days 365 -key ca.key -out ca.crt

生成服务器密钥和CSR (如前):

  1. openssl genrsa -out foobar.key 2048
  2. openssl req -new -key foobar.key -out foobar.csr

使用你的新CA注册服务器证书:

  1. openssl x509 -req -days 365 -in foobar.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out foobar.crt

为你的客户端创建一个密钥和一个CSR,使用CA进行对其进行注册,然后将其打包为PKCS#12。为每个客户端重复这些步骤。

  1. openssl genrsa -des3 -out client.key 2048
  2. openssl req -new -key client.key -out client.csr
  3. openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
  4. openssl pkcs12 -export -in client.crt -inkey client.key -name "Client 01" -out client.p12

然后为证书客户端鉴权配置uWSGI

  1. [uwsgi]
  2. master = true
  3. shared-socket = 0.0.0.0:443
  4. uid = www-data
  5. gid = www-data
  6. https = =0,foobar.crt,foobar.key,HIGH,!ca.crt
  7. http-to = /tmp/uwsgi.sock

注解

如果你不想要强制客户端证书鉴权,那么移除https选项中ca.crt之前的’!’。