使用安全通道传输数据¶
网络传输中的数据应尽可能受到保护。即使某些数据似乎没有严格的保密性或完整性要求,但对其进行保护也是最佳实践。
在构建任何通过网络进行通信的应用程序时,我们必须假设我们无法控制数据传输的网络。我们应该考虑到网络中可能存在恶意行为者,他们会试图查看或更改我们正在传输的数据。
明确示例¶
OpenStack API 调用通常包含非常敏感的凭证或令牌。如果以明文形式发送,它们可能会被修改或窃取。
保护 API 调用免受恶意第三方查看或篡改其内容非常重要——即使对于内部网络上的服务之间的通信也是如此。
不太明显的示例¶
考虑一个服务器进程,该进程报告当前的天星数量,并通过网络将数据发送到客户端,使用一个简单的网页。这没有很强的保密性要求;数据不是秘密的。但是,完整性很重要。网络上的攻击者可以更改从服务器到客户端的通信,并将恶意流量(例如浏览器漏洞利用)注入到 HTTP 流中,从而危及易受攻击的客户端。
错误¶
cfg.StrOpt('protocol',
default='http',
help='Default protocol to use when connecting to glance.'),
正确¶
cfg.StrOpt('protocol',
default='https',
help='Default protocol to use when connecting to glance.'),
后果¶
未加密的密钥可能被盗
不安全的连接可能导致系统被攻破
中间人攻击者可以在不安全的连接上更改数据
不太了解 OpenStack 的部署者可能会无意地在公共网络上使用不安全的连接。