HTTPS支持 (自1.3起)
使用 https <socket>,<certificate>,<key>
选项。这个选项可能会被多次指定。首先使用OpenSSL工具生成你服务器的密钥,证书签名请求,以及自注册证书:
注解
你会想要一个用于生产的真正的SSL证书的。
- openssl genrsa -out foobar.key 2048
- openssl req -new -key foobar.key -out foobar.csr
- openssl x509 -req -days 365 -in foobar.csr -signkey foobar.key -out foobar.crt
然后使用刚刚生成的SSL证书和密钥启动服务器:
- uwsgi --master --https 0.0.0.0:8443,foobar.crt,foobar.key
由于端口443(这个端口通常用于HTTPS)是特权端口 (即非root进程可能不会绑定它),因此你可以使用共享socket机制,像这样绑定后去除特权:
- 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加密套件。
- [uwsgi]
- master = true
- shared-socket = 0.0.0.0:443
- uid = www-data
- gid = www-data
- https = =0,foobar.crt,foobar.key,HIGH
- http-to = /tmp/uwsgi.sock
这将会为你的SSL/TLS事务(尽可能)设置所有的 HIGHest(最高的) 密码。
客户端证书认证
https
还可以有可选的第五个参数。你可以用它来指定一个CA证书来对你的客户端进行鉴权。生成你的CA密钥和证书 (这次,密钥将会是4096位,并且有密保):
- openssl genrsa -des3 -out ca.key 4096
- openssl req -new -x509 -days 365 -key ca.key -out ca.crt
生成服务器密钥和CSR (如前):
- openssl genrsa -out foobar.key 2048
- openssl req -new -key foobar.key -out foobar.csr
使用你的新CA注册服务器证书:
- openssl x509 -req -days 365 -in foobar.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out foobar.crt
为你的客户端创建一个密钥和一个CSR,使用CA进行对其进行注册,然后将其打包为PKCS#12。为每个客户端重复这些步骤。
- openssl genrsa -des3 -out client.key 2048
- openssl req -new -key client.key -out client.csr
- openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
- openssl pkcs12 -export -in client.crt -inkey client.key -name "Client 01" -out client.p12
然后为证书客户端鉴权配置uWSGI
- [uwsgi]
- master = true
- shared-socket = 0.0.0.0:443
- uid = www-data
- gid = www-data
- https = =0,foobar.crt,foobar.key,HIGH,!ca.crt
- http-to = /tmp/uwsgi.sock
注解
如果你不想要强制客户端证书鉴权,那么移除https选项中ca.crt之前的’!’。