Gunicorn v22配置ssl_context仅启用TLSv1.3失败求助
解决Gunicorn v22仅启用TLSv1.3的配置问题
你当前的配置仅设置了TLS最小版本为v1.3,但Gunicorn的默认SSL上下文可能未限制最大版本,或者默认工厂的配置覆盖了你的设置,导致TLSv1.2仍能建立连接。以下是修复方案:
方案一:同时限制最小和最大TLS版本
修改gunicorn.conf.py中的ssl_context函数,同时指定最小和最大版本为TLSv1.3,确保仅允许该版本的连接:
def ssl_context(conf, default_ssl_context_factory): import ssl context = default_ssl_context_factory() context.minimum_version = ssl.TLSVersion.TLSv1_3 context.maximum_version = ssl.TLSVersion.TLSv1_3 return context
方案二:手动创建SSL上下文(更可靠)
如果默认工厂的配置仍存在干扰,可以直接手动创建仅支持TLSv1.3的SSL上下文,同时确保证书和密钥路径配置正确:
# 先配置证书与私钥路径 certfile = "/path/to/your/certificate.pem" keyfile = "/path/to/your/private-key.pem" def ssl_context(conf, default_ssl_context_factory): import ssl # 创建仅用于TLS服务器端的上下文 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # 加载证书链 context.load_cert_chain(conf.certfile, conf.keyfile) # 强制仅使用TLSv1.3 context.minimum_version = ssl.TLSVersion.TLSv1_3 context.maximum_version = ssl.TLSVersion.TLSv1_3 return context
注意事项
- 启动Gunicorn时不要通过命令行参数(如
--ssl-version)指定其他TLS版本,命令行参数会覆盖配置文件的设置。 - 用
openssl工具验证配置是否生效:# 测试TLSv1.2是否被拒绝(应连接失败) openssl s_client -connect your-domain:your-port -tls1_2 # 测试TLSv1.3是否正常连接(应成功) openssl s_client -connect your-domain:your-port -tls1_3 - 确认Python版本在3.7及以上,
ssl.TLSVersion是Python 3.7新增的API。
内容的提问来源于stack exchange,提问作者user31188236
相关产品推荐
相关产品推荐

