TLS 설정을 바꾸면 무슨 일이 일어날까?

devyumi·2026년 5월 12일

Network

목록 보기
12/12

3년 전에 정리했던 TLS 이론을 실무에서 장애로 마주하게 됐다.

당시에는 단순히 HTTPS 동작 원리 정도로만 이해했는데, 실제로는 TLS 버전, Key Exchange, Java Security Policy 같은 요소들이 운영 환경 장애와 직접 연결된다는 걸 경험했다.

이번 글에서는 실제로 겪었던 두 가지 TLS 이슈와 문제 원인을 어떻게 추적했는지 정리해본다.


들어가기 전


TLS 란?


TLS는 클라이언트와 서버가 안전하게 통신하기 위해 사용하는 보안 프로토콜이다.

TLS Handshake 과정에서

  • 사용할 TLS 버전
  • 암호화 알고리즘(Cipher Suite)
  • 인증서 검증 방식
  • Key Exchange 방식

등을 협상한 뒤 안전한 세션을 생성한다.


사례 1


발생 내용


특정 서버에서 갑자기 HTTPS 통신이 되지 않았다.

오류는 아래처럼 나왔다.

기본 연결이 닫혔습니다. 받기에서 예기치 않은 오류가 발생했습니다.


원인


보안팀에서 협의 없이 서버 TLS 설정을 1.2 이상만 허용되도록 변경하였다.
클라이언트(.NET Framework 4.5.2)는 기본적으로 TLS 1.0 기반으로 동작하고 있었기 때문에 결과적으로 TLS Handshake 과정에서 지원 가능한 프로토콜 버전이 맞지 않아 통신에 실패한 것이었다.


공식 문서에 따르면, .NET Framework 4.6.2 이하는 default가 명확히 정의되지 않는다고 하지만 통상적으로 4.5.2는 TLS 1.0을 지원하는 것으로 확인된다.


해결방안


HTTPS 통신 전 아래 코드를 명시하여 클라이언트가 TLS1.2 환경에서 동작되도록 변경한다.
참고로 ServicePointManager 는 리소스 요청 및 처리하는 데 사용되는 클래스이다.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;



사례 2


발생 내용


테스트 서버에서 jar socket 테스트 중 아래와 같은 오류가 발생했다.

DH ServerKeyExchange does not comply to algorithm constraints


원인


첫 번째 TLS 이슈는 Server(or Client) Hello 단계에서 실패한 것이었다면,
두 번째 이슈는 TLS Handshake 자체는 진행되었지만, Key Exchange 단계에서 Java 보안 정책에 의해 차단된 케이스였다.


해결방안


타사 개발자와 같은 서버를 공유하고 있으므로 내 재량으로 jdk 버전을 변경할 수 없고,
내가 서버 TLS 버전을 변경할 권한이 없으므로 테스트 환경에서만 임시적으로 Java 암호화 제약을 완화하는 방법을 채택했다.


아래 경로를 통해 java.security에 접근한다. (Java 위치를 모른다면 cmd > where java 실행)

$JAVA_HOME/conf/security/java.security


문서 내용을 보면, 친절하게도 KeySizeConstraint와 관련된 주석을 찾을 수 있다.

RSA[알고리즘명] keySize < 1024, RSA[알고리즘명] keySize > 2024 라고 명시할 경우, 해당 알고리즘에 대한 제약은 명시한 키 사이즈 내에서만 유효하다.


내용 확인 후 아래로 내리면 DH keySize < 1024 가 디폴트로 명명되어 있다.
즉, jdk 1.8은 1024bit 미만의 DH 알고리즘 키를 보안 정책상 허용하지 않음을 알 수 있다.

따라서 DH keySize < 1024 를 512로 변경한다.

DH(Diffie-Hellman) 란?

TLS에서 세션 키를 안전하게 교환하기 위한 Key Exchange 알고리즘


회고


예전에는 TLS를 단순히 HTTPS를 위한 보안 기술 정도로만 이해했는데, 실제로 장애를 겪고 원인을 추적해보니 TLS Handshake 내부 과정이 Java Security 정책까지 긴밀하게 연결되어 있음을 알 수 있었다.

특히

  • TLS 버전 협상 실패
  • Key Exchange 알고리즘 제약

처럼 TLS 오류라도 어느 단계에서 실패하느냐에 따라 원인과 해결 방식이 완전히 달라진다는 걸 경험했다.

3년 전에 정리했던 이론이 실제 운영 장애 분석 과정에서 그대로 이어진 경험이었다.


참고

profile
Back-end Junior Developer 공부하는 개발자

0개의 댓글