如何在 uWSGI 中配置 SSL/TLS 协议白名单?

如何在 uWSGI 中配置 SSL/TLS 协议白名单?

我可以使用 指定密码列表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 配置将不会产生任何效果。

相关内容