OpenSSL 3으로 업그레이드
버전 17.7부터,
GitLab은 OpenSSL 3을 사용합니다. 이 버전의 OpenSSL은 주요 릴리즈로, 주목할 만한
사용 중단 및 OpenSSL의 기본 동작에 대한 변경 사항이 있습니다. (자세한 내용은
OpenSSL 3 마이그레이션 가이드를 참조하세요).
일부 구버전의 TLS와 외부 통합용 암호화 스위트는 이러한 변경 사항과 호환되지 않을 수 있습니다.
따라서 OpenSSL 3을 사용하는 GitLab 버전으로 업그레이드하기 전에 외부 통합의 호환성을 평가하는 것이 중요합니다.
OpenSSL 3으로 업그레이드 시:
- 모든 수신 및 송신 TLS 연결에 대해 TLS 1.2 이상이 필요합니다.
-
TLS 인증서는 최소 112비트의 보안을 가져야 합니다. RSA, DSA 및 DH
키는 2048비트보다 짧고, ECC 키는 224비트보다 짧은 것이 금지됩니다.
외부 통합 식별하기
외부 통합은 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='HOST:PORT' # 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 버전과 암호를 식별하고 세부 출력을 제공합니다.
-
사용 중인 버전이 OpenSSL 3와 호환되는지 확인하세요:
nmap --version
출력에는 Nmap이 “compiled with” 포함되어 있는 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