TLS 최소 버전 설정 점검

Use of a Broken or Risky Cryptographic Algorithm

설명

TLS 1.0/1.1 같은 구형 프로토콜을 허용하면 통신 보호가 약해질 수 있습니다. 다만 현재 Go의 crypto/tls는 MinVersion을 생략해도 기본적으로 TLS 1.2를 최솟값으로 사용하므로, 생략만으로 취약한 연결이라고 판단할 수는 없습니다. 사용 중인 Go 버전과 환경 설정을 확인하고, 서비스에 필요한 최소 TLS 버전을 명시하세요.

잠재적 영향

  • 실제로 구형 프로토콜이나 약한 암호 스위트가 협상되면 민감 정보의 기밀성과 무결성이 약해질 수 있습니다.
  • 실행 환경의 기본값이나 예외 설정을 확인하지 않으면 조직이 요구한 최소 버전과 다르게 동작할 수 있습니다.
  • 지나치게 높은 최솟값도 필요한 클라이언트의 연결을 끊을 수 있으므로 전환 시 호환성을 확인해야 합니다.

해결 방법

  • TLS 최소 버전 명시: Go 애플리케이션에서 crypto/tls의 tls.Config를 사용할 때 반드시 MinVersion: tls.VersionTLS12 이상(가능하면 tls.VersionTLS13)을 명시하세요.
  • 레거시 지원 최소화: 오래된 브라우저(예: IE 10)를 꼭 지원해야 하는 특수 상황이 아니라면, TLS 1.0/1.1은 사용하지 마세요. 부득이하게 사용할 경우, 해당 경로를 별도 서비스/도메인으로 분리하고, 추가 모니터링 및 위험 고지를 검토하세요.
  • 보안 가이드라인 준수: 기업/조직의 보안 정책, 브라우저/플랫폼 지원 현황, 최신 보안 권고(예: OWASP, 각 언어 런타임 릴리즈 노트)를 참고해 주기적으로 TLS 설정을 점검하세요.
  • 테스트 및 검증: sslscan, nmap --script ssl-enum-ciphers, 온라인 TLS 검사 도구 등을 사용해 서버가 허용하는 프로토콜과 암호 스위트를 정기적으로 점검하세요.

예시

변경 전

go
package main

import (
    "crypto/tls"
    "net/http"
)

func newInsecureServer() *http.Server {
    // MinVersion 생략: 실제 최솟값은 Go 버전과 환경 설정에 따름
    // 현재 기본값은 TLS 1.2
    tlsConfig := &tls.Config{
        // 다른 옵션만 설정하고 MinVersion 없음
        // CipherSuites, Certificates 등만 설정했다고 가정
    }

    return &http.Server{
        Addr:      ":8443",
        TLSConfig: tlsConfig,
    }
}

func main() {
    srv := newInsecureServer()
    // 인증서/키 경로는 예시
    _ = srv.ListenAndServeTLS("server.crt", "server.key")
}

변경 후

go
package main

import (
    "crypto/tls"
    "net/http"
)

func newSecureServer() *http.Server {
    tlsConfig := &tls.Config{
        // 최소 TLS 버전을 명확히 TLS 1.2 이상으로 지정
        MinVersion: tls.VersionTLS12,
        // 필요 시 추가 보안 설정 (예: 강한 CipherSuite만 허용)
        // CipherSuites: []uint16{ ... },
    }

    return &http.Server{
        Addr:      ":8443",
        TLSConfig: tlsConfig,
    }
}

func main() {
    srv := newSecureServer()
    // 인증서/키 경로는 예시
    _ = srv.ListenAndServeTLS("server.crt", "server.key")
}

설명:

  • 변경 전: MinVersion을 생략해 런타임 기본값을 사용합니다. 현재 기본값은 TLS 1.2이며, 구형 Go나 환경별 예외 설정은 따로 확인해야 합니다.
  • 변경 후: MinVersion: tls.VersionTLS12를 명시해 코드에서 최솟값을 정합니다. 이미 같은 기본값을 사용했다면 허용 버전이 달라지는 것은 아닙니다. 인증서 검증과 TLS 1.2 암호 스위트도 함께 확인하세요.

참조