验证 HTTPS 连接上的证书以避免中间人攻击¶
在开发建立安全 HTTPS 连接的模块时,请使用验证证书的库。许多此类库还提供一个选项来忽略证书验证失败。这些选项应暴露给 OpenStack 部署者,以便他们选择风险级别。
虽然此指南的标题提到 HTTPS,但验证您连接到的主机的身份适用于大多数协议(SSH、LDAPS 等)。
错误¶
import requests
requests.get('https://openstack.org/', verify=False)
上面的示例使用 verify=False 来绕过对收到的证书与 CA 信任库中的证书的检查。
重要的是要注意,Python 标准库中的 httplib 等模块在 2.7.9 版本修复之前没有验证证书链。有关受影响模块的更多详细信息,请参阅 CVE-2014-9365 <https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-9365>.
正确¶
import requests
requests.get('https://openstack.org/', verify=CONF.ca_file)
上面的示例使用变量 CONF.ca_file 来存储 CA 信任库的位置,该位置用于确认收到的证书来自受信任的机构。
后果¶
中间人 (MITM) 攻击允许一方监控、复制和操纵双方之间传输的所有数据。这带来的影响取决于发送的数据内容。客户满意度调查数据不如银行密码和帐户信息更有价值。