移除自定义客户端 SSL 处理¶
https://blueprints.launchpad.net/python-glanceclient/+spec/remove-custom-client-ssl-handling
Glance 客户端当前支持通过 –no-ssl-compression 参数禁用 SSL 压缩。本规范建议废弃这种对 SSL 的特殊处理。
注意:这是传输层压缩,而不是应用层(http)压缩。
问题描述¶
引入自定义 SSL 处理是因为禁用 SSL 层压缩在某些情况下可以提供大约五倍的性能提升。如果没有禁用 SSL 层压缩,图像传输将受 CPU 限制——CPU 将执行 DEFLATE 算法。这通常会将图像传输限制在 < 20 MB/s。当指定 –no-ssl-compression 时,客户端在 SSL 握手期间不会与服务器协商任何压缩算法,这将消除 CPU 瓶颈,并且传输速度可以接近线路速度。
为了支持 ‘–no-ssl-compression’,存在两个完全独立的代码路径,具体取决于该参数是 True 还是 False。当 SSL 压缩被禁用时,我们不会使用标准的 ‘requests’ 库,而是进入基于 pyopenssl 和 httplib 的自定义代码,以禁用压缩。
本规范建议移除自定义代码,因为
维护成本高
例如,添加新的代码(如 Keystone 会话支持)更加复杂
它可能会引入额外的故障模式
我们发现了一些与“自定义”证书检查相关的错误
较新的操作系统会为我们禁用 SSL。
例如,虽然 Debian 7 默认压缩 ‘开启’,但 Debian 8 默认压缩 ‘关闭’。这使得服务器和客户端都更不可能启用压缩。
较新的 ‘requests’ 和 ‘python’ 组合会为我们做到这一点
Requests 在由支持它的 python 版本(>= 2.7.9)支持时会禁用压缩。这使得客户端更有可能开箱即用地禁用压缩。
原则上,也可以在旧版本上做到这一点
如果旧的操作系统/python 组合上安装了 pyopenssl、ndg-httpsclient 和 pyasn1,则 requests 库应在客户端禁用 SSL 压缩。
提议的变更¶
废弃 ‘–no-ssl-compression’ 选项。移除自定义 http 处理代码,并在指定 ‘–no-ssl-compression’ 时打印警告。
备选方案¶
不要废弃
不废弃的成本/收益意味着必须为一小部分边缘情况(可以通过其他方式解决)维护自定义代码路径。
添加对 ndg-httpsclient 和 pyasn1 的依赖。
这对于遗留安装来说是一种可能性,但对于绝大多数情况来说,这应该是不需要的。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
证书检查将不再由自定义 glance 客户端代码完成,而是由 ‘requests’ 库完成。我已验证,对于较旧的 python 安装(2.7),requests 库可以正确执行证书检查。
启用 SSL 压缩的系统可能容易受到 CRIME (https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-4929) 攻击。关注安全的安装应该在禁用 SSL 的情况下运行 Glance 服务器。
通知影响¶
无
其他最终用户影响¶
SSL 可能未被禁用。一个新的废弃警告。
性能影响¶
如果 SSL 未被禁用,用户将遇到性能下降——直到他们使用替代方法禁用它为止。
其他部署者影响¶
废弃警告。如果合适,将需要使用替代方法禁用 SSL。
开发人员影响¶
应该简化事情。
实现¶
负责人¶
Stuart McLaren
评审人员¶
Ian Cordasco
工作项¶
客户端变更
(小) nova/cinder 变更
依赖项¶
无
测试¶
默认情况下,网关中 https 测试有限。将进行一些手动功能测试,并启用 https 的 devstack 将被启动。
文档影响¶
将更新 cli 帮助。任何相关的 .rst 文档也将被更新。
参考资料¶
之前的努力