Ssl

如何在 uWSGI 中配置 SSL/TLS 協議的白名單?

  • December 4, 2019

我可以使用指定密碼列表https = =0,x.crt,x.key,<ciphers>。文件在這裡:http ://uwsgi-docs.readthedocs.org/en/latest/HTTPS.html#setting-ssl-tls-ciphers

但是還有一種方法可以指定允許哪些 SSL/TLS 協議?

我想禁用 SSLv2 和 SSLv3。

通過閱讀uwsgi原始碼,看起來 SSLv2 已自動禁用,並且可以使用"ssl-enable3"配置選項禁用 SSLv3。可選的密碼字元串雖然有用,但不能真正用於將 使用的 SSL/TLS 協議版本列入白名單(或禁用)uwsgi,只能用於密碼套件。

要查看禁用 SSLv2 支持,我們從uwsgi_opt_https解析"https"選項的函式開始。在解析證書、密鑰、密碼套件之後,該函式呼叫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設置為假?為此,我們在這裡"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

希望這可以幫助!

引用自:https://serverfault.com/questions/771177