我可以使用 指定密码列表https = =0,x.crt,x.key,<ciphers>
。相关文档在此处:http://uwsgi-docs.readthedocs.org/en/latest/HTTPS.html#setting-ssl-tls-ciphers
但是是否还有办法指定允许哪些 SSL/TLS 协议?
我想禁用 SSLv2 和 SSLv3。
答案1
通过阅读uwsgi
源代码,看起来 SSLv2 已自动禁用,并且可以使用"ssl-enable3"
配置选项禁用 SSLv3。可选的密碼字符串虽然有用,但实际上不能用于将使用的 SSL/TLS 协议版本列入白名单(或禁用)uwsgi
,只能用于密码套件。
要查看 SSLv2 支持是否已禁用,我们首先从uwsgi_opt_https
函数,用于解析"https"
选项。解析证书、密钥、密码套件后,ETC,该函数调用uwsgi_ssl_new_server_context
。
函数uwsgi_ssl_new_server_context
定义这里. 特别令人感兴趣的是默认 SSL 选项标志, 哪个包括 SSL_OP_NO_SSLv2
。而且,最有趣的是,我们看到SSL_OP_NO_SSLv3
选项标志(用于禁用 SSLv3 支持)也将被使用,但是仅当此uwsgi.sslv3
变量设置为 false时。
如何uwsgi.sslv3
设置为 false?为此,我们看看这里您可以在配置中设置一个"ssl-enable3"
选项uswgi
:
[uwsgi]
...
ssl-enable3 = false
现在,为了获得奖励积分,你可以还想要禁用 TLSv1,并仅将 TLSv1.1 和 TLSv1.2 列入白名单。要实现这一点,您必须执行上述操作和使用"ssl-option"
配置选项,例如:
[uwsgi]
...
ssl-enable3 = false
ssl-option = 67108864
我是如何得出这个神奇数字“67108864”的?该"ssl-option"
选项需要数字,而不是字符串。因此,我们需要要设置的 OpenSSL 标志的名称,然后确定该标志的数值。所以首先我必须查看 OpenSSLSSL_CTX_set_options
文档中可以看到我想要的标志的值SSL_OP_NO_TLSv1
。数值位于OpenSSL 源代码:0x04000000U
。但uwsgi
想要一个整数值"ssl-option"
,而不是十六进制,因此:
$ perl -e 'print int(0x04000000), "\n";'
67108864
希望这可以帮助!
答案2
只是为了补充之前的答案。您必须在 uwsgi 配置中的 https-socket 选项之前指定 ssl-option。否则您的 ssl 配置将不会产生任何效果。