跳转到: 导航, 搜索

Neutron/LBaaS/SSL

< Neutron‎ | LBaaS

描述

在负载均衡器上终止 TLS 连接并加密回后端节点的流量,是现代负载均衡器所期望的功能,并集成到许多应用程序中。此功能能够更好地管理证书并改进基于应用程序的负载均衡(例如,基于 cookie 的持久性、L7 策略等)。

为了赋予 LBaaS TLS 终止能力,将添加一个新的扩展,称为 TLS。

概述

  • 租户将使用 Barbican 管理其 TLS 证书。证书将存储在 Barbican 安全容器中
  • 租户将使用 Neutron 管理其 TLS 策略。策略将存储在 neutron 模式中
  • 除了现有的 HTTP、HTTPS 和 TCP 之外,将为 VIP 监听器创建添加新的协议 TLS
  • 对于租户来说,使用 TLS 作为协议创建 VIP 监听器意味着希望卸载传入的加密流量和/或加密到后端服务器的传出流量。


  • 在使用 TLS 协议创建 VIP 监听器时
    • 不必提供 TLS 策略 - 将实现默认行为,可以在 neutron 配置文件中进行部分配置
      • 前端 TLS 卸载已启用,后端重新加密已禁用 - 作为代码中的默认行为硬编码
      • 前端/后端支持的协议和密码套件列在 neutron 配置文件中。这可以通过 neutron 配置文件进行编辑
    • 如果没有关联的策略并且默认行为生效 - 租户必须为前端卸载提供默认 TLS 证书
    • 如果关联了策略并且该策略禁用了前端卸载但启用了后端重新加密 - 租户不得为前端卸载提供默认 TLS 证书
    • SNI 证书不是必须指定的
    • SNI 证书列表的指定方式和处理建议发布在“SNI 证书列表的指定和处理建议”部分,应进行讨论
  • 前端证书的证书链在本阶段将不受支持
  • 前端客户端身份验证和后端服务器身份验证在本阶段将不受支持


在上述条件下,以下是基本的租户用例的描述 - 创建具有 TLS 卸载的 VIP 监听器

  • 创建 TLS 作为监听器协议的 VIP 监听器
  • 通过提供 Barbican 的 TLS 证书容器 ID 来指定前端卸载的默认 TLS 证书

结果,VIP 监听器已创建,使用默认租户的 TLS 证书卸载前端加密流量,不加密到后端的流量。

Neutron LBaaS 与 Barbican API 的需求

  • 需要 API 来获取整个 TLS 证书容器,包括私钥,通过容器 ID
  • 需要 API 来获取 TLS 证书 x.509 证书

用户体验

TLS 证书管理

TLS 证书将存储在 Barbican 证书容器中,其中包含 TLS 证书本身及其私钥。我们还应检查使用 Barbican 执行证书签名请求的必要性。

租户将能够使用 Barbican 创建(添加)、删除(删除)和更新 TLS 证书

创建 TLS 证书(使用 Barbican)
  • 名称:文本字段
  • 描述:文本字段
  • 证书:PEM 文件名
  • 私钥:PEM 文件名(可选)
  • 密码短语:文本字段(可选)


删除 TLS 证书(使用 Barbican)

在确认后进行。正在被 VIP 监听器/s 使用的证书无法删除

更新 TLS 证书(使用 Brbican)
  • 只能修改名称和描述
Note: If changed certificate is associated with VIP listener(s), each back-end service provider (driver) should make any required changes

TLS 策略管理

  • TLS 策略将存储在 neutron 模式中
  • 租户将能够“添加”(创建)、“删除”(删除)和更新 TLS 策略。
  • 默认 TLS 策略行为描述
    • 前端卸载已启用(硬编码)
    • 默认前端支持的协议 - SSL v3.0、TLS v1.0、TLS v1.2(可通过 neutron 配置文件配置)
    • 默认前端支持的密码套件 - OpenSSL LOW 密码套件组(可通过 neutron 配置文件配置)
    • 后端重新加密已禁用(硬编码)
    • 默认后端支持的协议 - SSL v3.0、TLS v1.0、TLS v1.2(可通过 neutron 配置文件配置)
    • 默认后端支持的密码套件 - OpenSSL LOW 密码套件组(可通过 neutron 配置文件配置)
  • 建议使用 OpenSSL 密码套件组(all、low、medium、high)作为定义密码套件的选项

https://www.openssl.org/docs/apps/ciphers.html

  • (待定) 我们也可能允许租户选择编译自己的密码套件组
创建 TLS 策略
Note: 
1.Policy with both, front-end offloading and back-end re-encryption, disabled - is invalid
2.When creating TLS policy ,default values for all parameters are derived from the 
 default TLS policy behavior (described above).
  • 名称:文本字段
  • 描述:文本字段
  • 启用前端卸载:复选框(需要指定默认 TLS 证书)
  • 启用后端加密:复选框
  • 前端支持的协议:从选项列表中进行多项选择(SSL v3.0、TLS v1.0、TLS v1.2),至少应选择一个
  • 前端支持的密码套件:单选按钮,4 个选项
    • ALL:(OpenSSL ALL 密码组)
    • LOW(OpenSSL LOW 密码组)
    • MEDIUM(OpenSSL MEDIUM 密码组)
    • HIGH(OpenSSL HIGH 密码组)
  • 后端支持的协议:从选项列表中进行多项选择(SSL v3.0、TLS v1.0、TLS v1.2),至少应选择一个
  • 后端支持的密码套件:单选按钮,4 个选项(与前端类似)


删除 TLS 策略

像往常一样,在确认后进行。正在被 VIP 监听器/s 使用的策略无法删除

更新 TLS 策略
  • 只能修改前端和后端协议以及密码套件组
  • 不支持更改前端卸载和后端重新加密功能
Note: If changed policy is associated with VIP listener(s), each back-end service provider should perform any required changes

VIP 监听器创建

VIP 监听器当前有 3 种协议可供选择(HTTP、HTTPS、TCP)。建议使用新的协议 - TLS,它将用于解决使用证书和策略进行前端或/和后端加密的情况。

TLS 的 VIP 监听器创建场景

默认情况下,不需要 TLS 策略关联,概述部分中描述的默认策略行为将生效。租户可以关联 TLS 策略以获得不同的行为,但不必这样做。如果策略启用了前端卸载,则租户必须为前端卸载提供默认 TLS 证书。租户还可以提供 SNI 的 TLS 证书列表,但不必这样做。


SNI 证书指定及其 LBaaS 提供商处理的建议

1. 排序的证书列表。

租户将创建 TLS 证书列表并能够控制其顺序。

对于传入流量卸载,选择 TLS 证书的步骤如下(直到找到第一个匹配项):

  • 从第一个到最后一个(从上到下)扫描列表,并检查域名是否与证书的主机名完全匹配
  • 从第一个到最后一个(从上到下)扫描列表,并检查域名是否与证书的主机名正则表达式匹配
  • 从第一个到最后一个(从上到下)扫描列表,并检查域名是否与证书的任何一个替代主机名匹配
  • 未找到匹配项? - 使用默认证书


2. 证书列表

租户将创建 TLS 证书列表。

  • 通过扫描列表直到找到第一个匹配项来完成传入流量卸载的 TLS 证书选择
  • 未找到匹配项? - 使用默认证书


3. (证书,主机名/模式列表):示例:( (amazon_cert_id, [*amazon.com, *amazon1.com]), (acme_cert_id, [acme.com]) )

租户将创建 TLS 证书条目以及与该特定证书相关联的主机名/模式列表。

对于传入流量卸载,选择 TLS 证书的步骤如下(直到找到第一个匹配项):

  • 从第一个到最后一个(从上到下)扫描列表,并检查域名是否与任何一个主机名/模式匹配
  • 未找到匹配项? - 使用默认证书
Note: this can not be supported by Radware LBaaS provider

VIP 监听器(使用 TLS 协议)更新

  • TLS 策略和证书设置仅适用于具有 TLS 作为协议的 VIP 监听器
  • 建议废弃现有 VIP 监听器的 TLS 策略更改,因为

不同的策略可能会为前端卸载和/或后端重新加密指定不同的行为。这将需要对提供商的后端系统进行彻底的重新配置,这似乎对于这种用例来说是不合理的。租户可能应该使用不同的 TLS 前端卸载和后端重新加密设置创建新的 VIP 监听器。

API 变更

  • 将向 LBaaS 插件 API 添加 TLS 策略 CRUD
  • 由于 TLS 卸载功能是 LBaaS 的核心功能,因此 VIP 监听器 TLS 设置 API 将合并到现有的 LBaaS 插件 API 中

资源变更

  • VIP 监听器资源将使用新的
    • TLS 策略(可选)
    • 默认 TLS 证书(可选)
    • 与 SNI 证书列表的关联链接 - SNI 证书将保存在新的关联表中


  • TLS 策略(新实体)
    • front-end-offloading:bool
    • front-end-protocols:逗号分隔值的列表,来自允许值的列表(SSLv3、TLSv1、TLSv1.2),默认=None
    • front-end-cipher_suites:逗号分隔值的列表
      • 格式 - <密钥交换算法>_<批量加密算法>_<消息认证码>_<伪随机函数>
    • back-end-encryption:bool
    • back-end-protocols:<与前端相同的格式>
    • back-end-cipher_suites:<与前端相同的格式>

数据模型变更

  • VIP 监听器实体将使用新的可选 TLS 策略和 TLS 默认证书字段进行修改。
    • tls_policy_id(字符串 36)
    • default_tls-certificate_id(字符串 36)- Barbican 的证书容器 ID


  • tls_policy(新表)
    • tls_policy_id(字符串 36)
    • tls_policy_name(字符串 64)
    • tls_policy_description(字符串 256)
    • front_end_offloading(bool)
    • front_end_protocols(字符串 32)
    • front_end_cipher_suites(字符串 512)
    • back_end_encryption_enabled(bool)
    • back_end_protocols(字符串 32)
    • back_end_cipher_suites(字符串 512)


  • vip_listener_sni_certificate_assoc - N:M(新的关联表)
    • vip_listener_id(字符串 36)
    • tls_certificate_id(字符串 36)

DB 迁移

DB 迁移需要

  • VIP 监听器新列 - 现有行将填充为 null
  • TLS 策略的新表
  • SNI 证书关联到 VIP 监听器的新表

CLI 示例

  • VIP 监听器创建使用 TLS 协议(默认行为)
lb-vip-listener-create --subnet-id <subnet-id> --protocol TLS --protocol-port 443 
--tls_default_certificate <barbican certificate container id> 
--name <name> [--address <address>] ...<usual CLI options>
  • VIP 监听器创建使用 TLS 协议和 SNI 证书列表(使用 TLS 策略,前端卸载已启用,后端重新加密已启用)
lb-vip-listener-create --subnet-id <subnet-id> --protocol TLS --protocol-port 443 
--tls_policy policy_with_front_end_offloading_enabled_id --tls_default_certificate <barbican certificate container id>
--tls_sni_certificates certificate_1, certificate_2, certificate_3
--name <name> [--address <address>] ...<usual CLI options>
  • VIP 监听器创建使用 TLS 协议(使用 TLS 策略,前端卸载已禁用,后端重新加密已启用)
lb-vip-listener-create --subnet-id <subnet-id> --protocol TLS --protocol-port 443 
--tls_policy policy_with_front_end_offloading_disabled_id
--name <name> [--address <address>] ...<usual CLI options>
  • TLS 策略创建(前端卸载和后端重新加密均已启用)
lb-tls-policy-create --front-end-termination type=dict enabled=true protocols=SSLv3,TLSv1,TLSv1.2 cipher-suites=DES-CBC-SHA,EXP-DES-CBC-SHA, ... 
--back-end-termination  type=dict enabled=true protocols=SSLv3,TLSv1,TLSv1.2 cipher-suites=DES-CBC-SHA,EXP-DES-CBC-SHA, ...
MY_POLICY


  • 使用不同的协议更新 MY_POLICY 策略(无 SSLv3)
lb-tls-policy-update --policy_id MY_POLICY_ID --front-end-termination type-dict protocols=TLSv1,TLSv1.2 --back-end-termination  type=dict protocols=TLSv1,TLSv1.1
  • 删除 MY_POLICY
lb-tls-policy-delete --policy_id MY_POLICY_ID
  • 列出策略
lb-tls-policy-list
  • 显示策略
lb-tls-policy-show --policy_id

TLS 证书管理将通过 Barbican CLI 提供

<待扩展>

实施计划

  • 创建名为“tls”的新扩展,其中包含新的 TLS 实体
  • 将新的 TLS 策略 CRUD API 实现到 LBaaS 插件
  • 实现 DB 模式的更改
  • 为新的 TLS 扩展资源实现单元测试
  • 为新的 TLS DB mixin 实现单元测试
  • 与 Barbican 证书存储 API 集成
  • 修改 LBaaS HA-Proxy 驱动程序以支持 TLS 扩展
  • 将 HA-Proxy 更新到版本 1.5 {待定}

支持矩阵

提供商 协议 密码套件 证书链 FE 客户端身份验证。 BE 身份验证。 SNI
HAProxy 1.5 SSLv3, TLSv1 与 OpenSSL 相同 Yes Yes
Amazon EC2 SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2 与 OpenSSL 相同 Yes
OpenStack SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2 与 OpenSSL 相同 阶段 2 阶段 2 阶段 2 Yes