OpenSSL 3으로 업그레이드
버전 17.7부터, GitLab은 OpenSSL 3을 사용합니다. 이 OpenSSL 버전은 주목할만한 폐기 사항과 기본 동작에 대한 변경 사항이 있는 주요 릴리스입니다(자세한 내용은 OpenSSL 3 마이그레이션 가이드 참조).
일부 구 버전의 TLS 및 암호 스위트는 이러한 변경 사항과 호환되지 않을 수 있습니다. 따라서 OpenSSL 3을 사용하는 GitLab 버전으로 업그레이드하기 전에 외부 통합의 호환성을 평가하는 것이 중요합니다.
OpenSSL 3으로 업그레이드하면:
- 모든 수신 및 발신 TLS 연결에 대해 TLS 1.2 이상이 필요합니다.
- TLS 인증서는 최소 112비트의 보안이 있어야 합니다. 2048 비트 미만의 RSA, DSA 및 DH 키, 및 224 비트 미만의 ECC 키가 금지됩니다.
외부 통합 식별
외부 통합은 gitlab.rb
또는 프로젝트, 그룹 또는 관리 섹션의 GitLab 웹 인터페이스를 통해 구성할 수 있습니다.
다음은 사용할 수 있는 통합의 예비 목록입니다:
- 인증 및 권한 부여
- LDAP 서버
- OmniAuth 제공자, 특히 SAML 또는 Shibboleth와 같이 일반적이지 않은 제공자.
- 허가된 애플리케이션
- 이메일
- 프로젝트 통합
- 외부 이슈 트래커
- 웹훅
- 외부 PostgreSQL
- 외부 Redis
- 객체 저장소
- ClickHouse
- 모니터링
Linux 패키지와 함께 제공되는 모든 구성 요소는 OpenSSL 3과 호환됩니다. 따라서 GitLab 패키지의 일부가 아니고 “외부”인 서비스만 확인하면 됩니다.
OpenSSL 3과의 호환성 평가
외부 통합 엔드포인트의 호환성을 확인하는 다양한 도구를 사용할 수 있습니다. 사용 중인 도구에 관계없이 지원되는 TLS 버전과 암호 스위트를 확인해야 합니다.
openssl
명령줄 도구
openssl s_client
명령줄 도구를 사용하여 TLS가 활성화된 서버에 연결할 수 있습니다. 특정 TLS 버전이나 암호를 강제로 사용하기 위해 사용할 수 있는 다양한 옵션이 있습니다:
-
OpenSSL 3 명령줄 도구를 사용 중인지 확인하려면 다음과 같이 버전을 확인합니다:
openssl version
-
다음 예제 스크립트를 사용하여 서버가 지원하는 암호와 TLS 버전을 확인합니다:
# 서버의 호스트와 포트 SERVER='호스트:포트' # TLS1.2 및 TLS1.3에 대한 지원하는 암호 확인 # 다른 사용 가능한 옵션에 대해서는 `openssl s_client` 매뉴얼을 참조하세요. for tls_version in tls1_2 tls1_3; do echo "${tls_version}에 대한 지원되는 암호:" for cipher in $(openssl ciphers -${tls_version} | sed -e 's/:/ /g'); do # 참고: 암호는 구성된 TLSv1.3 암호 스위트와 결합됩니다. 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 버전과 암호를 식별하고 자세한 출력을 제공합니다.
-
nmap
를 설치합니다. -
사용 중인 버전이 OpenSSL 3과 호환되는지 확인합니다:
nmap --version
출력에는 OpenSSL 버전과 “compile된” Namp의 세부 정보가 표시됩니다.
-
테스트하는 사이트에서
nmap
을 실행합니다:nmap -sV --script ssl-enum-ciphers -p 포트 호스트
다음과 유사한 출력을 볼 수 있어야 합니다:
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 | 암호 매개변수: 서버 | 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 | 암호 매개변수: 클라이언트 |_ 가장 낮은 강도: A |_http-server-header: cloudflare