跳转到: 导航, 搜索

Security/Juno/Keystone

< Security‎ | Juno

此页面记录了 OpenStack Juno 版本中 Keystone 项目的安全相关细节。

已实现的加密

Keystone 没有自研的加密实现,所有内容都来自 Python 标准库或第三方库。

使用的加密

加密算法

算法 目的 可配置 实现 详情 源代码
AES Memcache 后端加密 PyCrypto
  • 可选地用于加密令牌后端。
  • keystoneclient.middleware.memcache_crypt.py
RSA PKI 令牌签名 Yes OpenSSL
  • 2048, sha1 默认值
  • 可通过 openssl.conf 进行配置。
  • 密钥/证书可以在 Keystone 外部创建并放置到位。
  • keystone.common.openssl.py
  • keystoneclient.common.cms.py

哈希算法

算法 目的 可配置 实现 详情 源代码
md5 令牌哈希 hashlib
  • 哈希作为令牌后端中的内部标识符使用。
  • 被哈希的数据是整个加密签名的令牌(使用配置的签名密钥)。碰撞的可能性应该很低。
  • keystoneclient.utils.py
  • keystoneclient.common.cms.py
sha1 S3 凭证 hashlib
  • 用于验证 S3 凭证的签名。
  • S3 兼容性需要,因此无法配置。
  • keystone.contrib.s3.core.py
sha1 OAuth1 oauthlib
  • 用于验证 OAuth1 令牌的签名。
  • Keystone 仅使用 OAuth1 令牌的 HMAC-SHA1 签名(如 RFC 5849 中所述)。
  • 可以禁用 OAuth 支持。
  • 可能使用 hashlib 进行实际算法。
  • keystone.contrib.oauth1.core.py
  • keystone.contrib.oauth1.verifier.py
sha256 EC2 令牌 hashlib
  • EC2 兼容性需要,因此无法配置。
  • keystone.credential.controllers.py
  • keystone.common.utils.py
  • keystoneclient.contrib.ec2.utils.py
sha384 Memcache 签名 hashlib
  • 在启用 memcache 加密时用于签名和验证。
  • keystoneclient.middleware.memcache_crypt.py
sha512 密码哈希 PassLib
  • 算法不可配置,但可以通过 CONF.crypt_strength(默认=40000)配置轮数。
  • keystone.common.utils.py

敏感数据

密钥/证书

  • PKI 签名密钥 - 通过文件系统所有权/权限保护。
  • SSL/TLS 密钥 - 通过文件系统所有权/权限保护。

密码

  • 必须在 Keystone 中启用 SSL/TLS,以防止客户端通过网络以明文发送密码。
  • 在哈希之前执行严格的密码检查。如果设置为 true,则操作将以 HTTP 403 Forbidden 错误失败;如果设置为 false,密码将自动截断为预定义的最大长度。
    • 可通过 CONF.strict_password_check(默认=False)配置
    • 可通过 CONF.identity.max_password_length(默认=4096)配置
  • SQL Identity
    • 密码哈希存储在 SQL 数据库中。
    • 可以使用 SSL/TLS 保护与数据库的连接。
  • LDAP Identity
    • 必须使用 SSL/TLS 连接到 LDAP,以防止 Keystone 通过网络以明文发送密码。

令牌 (Tokens)

  • 签名的令牌存储在以下后端之一的完整形式中
    • KVS
    • Memcached
      • 临时存储。
      • 能够使用 AES 加密和 sha384 签名。
    • SQL (默认)
      • 持久存储。
      • 可以使用 SSL/TLS 保护与数据库的连接。
  • 过期的令牌不会自动从后端删除。应使用“keystone-manage token_flush”命令定期删除过期的令牌(通过 cron)。

潜在改进

  • 允许在不被兼容性要求限制的情况下(例如 S3 和 EC2)配置所有哈希方案
  • 使用 md5 进行令牌哈希是最大的问题,因为不鼓励其使用(或在 FIPS 的情况下禁止)。更改 正在进行,以便在 Juno 中使其可配置。如果可能,默认值应为 sha256。
  • 允许支持 LDAP SASL 绑定方法(例如 DIGEST-MD5 和 GSSAPI)。
  • 允许其他形式的外部身份验证以避免使用密码(Kerberos、SAML)。

自 Icehouse 以来的显著变化