Apache-Airflow 1.10.12 Web UI如何升级SSL协议修复SSLV3/TLSv1漏洞
Apache Airflow 1.10.12 Web UI SSL协议升级操作指引(修复SSLv3/TLSv1漏洞)
操作前选择业务低峰窗口执行,提前备份所有要修改的配置文件,避免配置错误导致服务不可用。根据实际部署架构,选择对应场景的操作步骤即可。
场景1:直接使用Airflow内置Webserver承载SSL连接
这种部署方式下Airflow Webserver直接对外暴露HTTPS端口,SSL逻辑由Airflow内置的Gunicorn服务处理。
- 第一步:定位Airflow主配置文件,默认路径为
/home/<部署用户>/airflow/airflow.cfg,如果是自定义部署路径找对应目录下的配置文件,先执行备份:cp airflow.cfg airflow.cfg.bak.$(date +%Y%m%d) - 第二步:编辑配置文件,找到
[webserver]配置段,注释掉原有SSL协议、加密套件相关的旧配置,新增/修改为以下内容:# 仅启用合规的TLSv1.2、TLSv1.3协议,彻底禁用SSLv2/SSLv3/TLSv1.0/TLSv1.1 webserver_ssl_protocol = TLSv1_2,TLSv1_3 # 配置合规加密套件,排除所有弱加密算法 webserver_ssl_ciphers = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 # 以下两项SSL证书路径保持原有配置即可,不需要修改 webserver_ssl_cert = /path/to/your/fullchain.pem webserver_ssl_key = /path/to/your/privkey.pem - 第三步:重启Airflow Webserver服务加载配置,如果是systemd托管的服务执行:
如果是手动进程启动的,先kill掉旧的webserver进程,再通过systemctl restart airflow-webserverairflow webserver命令拉起服务即可。
场景2:前置Nginx反向代理做SSL终止
EC2上大部分生产部署会采用这种架构:Airflow Webserver只监听本地127.0.0.1的8080端口,Nginx对外暴露443端口处理SSL逻辑,反向代理转发请求到Airflow。
- 第一步:备份Nginx站点配置文件,默认路径为
/etc/nginx/conf.d/airflow.conf(部分环境配置写在/etc/nginx/nginx.conf里),执行备份:cp /etc/nginx/conf.d/airflow.conf /etc/nginx/conf.d/airflow.conf.bak.$(date +%Y%m%d) - 第二步:编辑Nginx配置中对应Airflow的server段,修改SSL相关配置为以下内容:
server { listen 443 ssl; server_name 你的Airflow访问域名; # 以下两项证书路径保持原有配置即可 ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; # 禁用所有不安全协议 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; # 以下反向代理规则保持原有配置即可 location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 第三步:校验Nginx配置正确性,执行:
控制台返回nginx -ttest is successful后,重启Nginx加载配置:systemctl restart nginx
特殊场景:前置AWS负载均衡器(ALB/CLB)做SSL终止
如果EC2实例不直接对外暴露端口,前面挂了AWS的负载均衡器处理HTTPS请求,不需要修改实例上的任何配置,直接在负载均衡器监听器配置里,选择禁用SSLv3/TLSv1.0/TLSv1.1的预定义安全策略即可。
配置有效性验证
服务重启完成后,在任意能访问Airflow Web UI的机器上执行openssl命令做协议连通性测试:
# 测试TLSv1是否被拦截 openssl s_client -connect <你的Airflow访问地址>:443 -tls1 # 测试SSLv3是否被拦截 openssl s_client -connect <你的Airflow访问地址>:443 -ssl3 # 测试TLSv1.1是否被拦截 openssl s_client -connect <你的Airflow访问地址>:443 -tls1_1 # 测试TLSv1.2是否能正常连接 openssl s_client -connect <你的Airflow访问地址>:443 -tls1_2
如果前三个测试返回ssl handshake failure即为拦截成功,TLSv1.2测试能正常输出证书链信息说明配置生效。验证完成后用漏洞扫描工具复测,确认SSLv3/TLSv1相关风险全部消除即可。
内容的提问来源于stack exchange,提问作者Amal Bose Mathew
相关产品推荐
相关产品推荐

