升级到 OpenSSL 3
从 17.7 开始,极狐GitLab 将开始使用 OpenSSL 3。这是 OpenSSL 的一个重要发版,包含了显著的废弃和对 OpenSSL 默认行为的更改(更多详情可以查看 OpenSSL 3 官方迁移指南)。
有些针对外部集成的老旧版本的 TLS 和密码套件可能会和这些变更不太兼容。因此,在升级到使用 OpenSSL 3 的极狐GitLab 前,评估您外部集成的兼容性是至关重要的。
随着升级到 OpenSSL 3:
- 对于所有进入或者出去的 TLS 链接都需要 TLS 1.2 或者更高版本。
- TLS 证书必须最少要有 112 位的安全码。短于 2048 位的 RSA、DSA 和 DH key 以及短于 224 位的 ECC key 都将被禁止。
识别外部集成
外部集成可能是通过 gitlab.rb
文件或者在极狐GitLab 的项目、群组或者管理设置界面上配置的。
下面是一个您可以使用的集成的初步列表:
- 认证和授权
- LDAP 服务器
- OnmiAuth 提供商,特别是不常见的提供商,例如用于 SAML 或 Shibboleth 的提供商。
- 授权的应用
- 邮件
- 项目集成
- 外部议题追踪
- Webhook
- 外部 PostgreSQL
- 外部 Redis
- 对象存储
- ClickHouse
- 监控
所有包含在 Linux 软件包中的组件和 OpenSSL 3 都是兼容的。因此,您仅需要验证那些没有包含在 Linux 软件包中的“外部”服务的兼容性即可。
评估与 OpenSSL 3 的兼容性
您可以使用不同的工具来验证外部集成端点的兼容性。不管您使用哪种工具,您都需要检查支持的 TLS 版本和密码套件信息。
openssl
命令行工具
您可以使用 openssl s_client
命令行工具链接到开启了 TLS 的服务器。它有一系列广泛的选项,您可以使用这些选项来强制执行特定的 TLS 版本或密码套件:
-
通过检查版本来确认您在使用 OpenSSL 3 命令行工具:
openssl version
-
使用下面的脚本来检查服务器是否支持密码套件和 TLS 版本:
# Host and port of the server SERVER='HOST:PORT' # Check supported ciphers for TLS1.2 and TLS1.3 # See `openssl s_client` manual for other available options. for tls_version in tls1_2 tls1_3; do echo "Supported ciphers for ${tls_version}:" for cipher in $(openssl ciphers -${tls_version} | sed -e 's/:/ /g'); do # NOTE: The cipher will be combined with any TLSv1.3 cipher suites that # have been configured. if openssl s_client -${tls_version} -cipher "${cipher}" -connect ${SERVER} </dev/null >/dev/null 2>&1; then echo "\t${cipher}" fi done done
Nmap ssl-enum-ciphers
脚本
Nmap 的 ssl-enum-ciphers
脚本能够识别所支持的 TLS 版本和密码套件且能够提供详细的输出信息。
- 安装 namp。
-
确保您使用的版本是和 OpenSSL 3 兼容的:
nmap --version
输出信息会包含详细的版本信息,包括 Namp 和 OpenSSL 3 的兼容信息。
-
在您的站点上执行
namp
命令:nmap -sV --script ssl-enum-ciphers -p PORT HOST
您可能会看到如下信息:
PORT STATE SERVICE VERSION 443/tcp open ssl/http Cloudflare http proxy | ssl-enum-ciphers: | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256-draft (ecdh_x25519) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A | TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A | TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A | TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A | TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A | compressors: | NULL | cipher preference: server | TLSv1.3: | ciphers: | TLS_AKE_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A | TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A | TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A | cipher preference: client |_ least strength: A |_http-server-header: cloudflare