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キー、および224ビット未満のECCキーは禁止されています。
オペレーティングシステムのアップグレードは不要
GitLabがOpenSSL 3をサポートするために、オペレーティングシステムのアップグレードは必要ありません。Helm Chartの場合、GitLab CEとEEには独自のバージョンのOpenSSLが付属しており、オペレーティングシステムのOpenSSLバージョンは使用されません。ただし、FIPSビルドでは、そのライブラリがFIPS認定されることが期待されるため、オペレーティングシステムのOpenSSLが使用されます。
外部インテグレーションの特定
外部インテグレーションは、gitlab.rbまたはプロジェクト、グループ、管理者の設定にあるGitLab Webインターフェースから設定できます。
使用できるインテグレーションの予備リストを次に示します:
- 認証と認可
- LDAPサーバー
- OmniAuthプロバイダー、特にSAMLまたはShibbolethなどの一般的でないプロバイダー。
- 承認済みのアプリケーション
- メール
- プロジェクトインテグレーション
- 外部イシュートラッカー
- Webhook
- 外部PostgreSQL
- 外部Redis
- オブジェクトストレージ
- ClickHouse
- モニタリング
Linuxパッケージに同梱されているすべてのコンポーネントは、OpenSSL 3と互換性があります。したがって、GitLabパッケージに含まれていない、「外部」のサービスとの連携のみを確認する必要があります。
OpenSSL 3との互換性の評価
外部インテグレーションエンドポイントの互換性を確認するために、さまざまなツールを使用できます。使用しているツールに関係なく、サポートされているTLSバージョンと暗号スイートを確認する必要があります。
opensslコマンドラインツール
TLS対応サーバーに接続するには、openssl s_clientコマンドラインツールを使用できます。特定のTLSバージョンまたは暗号を適用するために使用できる幅広いオプションがあります。
システムの
opensslクライアントを使用して、バージョンを確認してOpenSSL 3コマンドラインツールを使用していることを確認してください:openssl versionGitLabに付属しているOpenSSLのバージョンがバージョン3にアップグレードされたときに互換性を確保するために、システムOpenSSLクライアントでこのチェックを実行します。
サーバーが暗号と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 printf "\t%s\n" "${cipher}" fi done done
SMTPサーバーに接続する場合など、場合によっては、TLS接続を確立するために-starttlsオプションを指定する必要があります。詳細については、OpenSSLドキュメントを参照してください。例:
openssl s_client -connect YOUR_DATABASE_SERVER:5432 -tls1_2 -starttls postgresNmap ssl-enum-ciphersスクリプト
Nmapのssl-enum-ciphersスクリプトは、サポートされているTLSバージョンと暗号を識別し、詳細な出力を提供します。
使用しているバージョンがOpenSSL 3と互換性があることを確認します:
nmap --version出力には、Nampが「コンパイルに使用」しているOpenSSLバージョンの詳細が表示されます。
テストしているサイトに対して
nmapを実行します: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