일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Reducer
- 쿠버네티스
- #Swagger-ui
- #Swagger-codegen
- #Swagger
- 기술PM
- AWS
- 쿠버네티스 컨트롤러
- #스웨거
- 북딜
- React
- 모두의캠퍼스
- javascript
- #api 문서화
- 프로세스 통신
- Kubernetes
- IP
- action
- SRE
- Site Reliability engineering
- React.js
- #Swagger-editor
- 프로세스
- 카카오게임즈
- docker
- ecs
- 모캠
- fluentd
- server
- Redux
- Today
- Total
탕구리's 블로그
SSL/TLS과 함께하는 삽질(with TLS 협상 오류) 본문
요 근래, 나를 아주 힘들게 했던 일이 하나 있었다.
앱 클라이언트가 서버로 요청을 보내지 못하는 문제, 근데 브라우저에서는 아주 잘^^ 요청이 온다는 사실.
몰랐다 생각보다 간단한 문제인 줄.. 특정 앱에서만 통신이 안 되는 상황이었고 당연히 앱에 문제가 있을 거라고 생각했고 네트워크는 ACL만 잘 설정 되어 있으면 문제가 없을 줄 알았다. 현실은 그게 아니었다는게 문제지만...
문제는 간단했다. 클라이언트의 TLS 버전이 낮아서 https의 인증 부분을 담당하는 로드밸런서에서 TLS 협상 오류가 발생하고 있었다. TLS 협상오류가 뭘까? 뭔지 알아야 확인을 해보든 말든 할 텐데...
우선 TLS에 대하여 알아보자.
TLS(Transport Layser Security)란 무엇일까?
- SSL 3.0 기반으로 IETF가 만든 3-way handshake 인터넷 암호화 통신 프로토콜
- http의 security뿐 아니라 application layer에서 security를 사용 가능하다.
- TLS 1.3 버전이 정식 승인되었다.
- 무결성, 인증, 기밀성이 보장된다.
최신 웹 사이트에서는 보안적인 측면 때문에 모두 https 통신을 이용한 네트워크 통신을 사용한다.
TLS 또한 application layer에서 동작할 수 있고, https protocol이 동작할 수 있도록 해준다.
어떤 방식으로 동작하고 사용되는지에 대해 자세한 내용까지는 알아보지 않았다.
TLS 협상 오류란?
위에서 말한 것처럼 서버와 클라이언트 간 세션을 생성하기 위해서는 handshake 과정이 필요한데
그 과정 정상적으로 수행되지 못하고 오류가 발생하는 경우이다.
추가로, 나의 경우 AWS 환경에서 작업을 하고 있기 때문에 TLS 협상 오류가 발생하는 원인에 대해서 AWS 도큐먼트를 뒤적거렸다. AWS에서는 아주 간단하게 내용을 설명해준다.
클라이언트 TLS 협상 오류는 클라이언트가 시작한 TLS 연결을 의미하며 로드 밸런서와 세션을 설정할 수 없습니다. 클라이언트가 로드 밸런서의 보안 정책이 지원하지 않는 프로토콜 또는 암호를 사용하여 로드 밸런서에 연결하려고 할 때 TLS 협상 오류가 발생합니다.
맞다. 아주 간단하게 AWS에서는 발생하는 원인에 대해서 말해주었다. 그래서 왜???????? 협상 오류가 발생했던 걸까?
현재 로드밸런서에서 사용하는 정책은 TLS 1.2 버전만 수용 가능한 정책이다.
즉, 클라이언트와 TLS 협상 오류가 발생한다는 것은
1. 로드밸런서와 클라이언트 간에 세션을 생성할 수 없다.
2. 호환이 되지 않는 TLS 버전을 클라이언트에서 사용하고 있다.
지금 당장 클라이언트의 TLS 버전 수정을 진행할 수 없기 때문에, 좀 더 폭넓은 버전과 호환이 되는 정책을 사용하기로 선택하였고 클라이언트와 서버 간의 통신 문제는 해결되었다.
아무래도 개발된 지 오래된 앱이라 구버전의 TLS(아마 v1.0)를 사용하고 있었던 것 같다.
낮은 버전의 TLS에서 많은 취약점들이 발견 되었기 때문에 호환하지 않는 것으로 판단된다. 1.2버전 미만을 사용하고 있다면 얼른 업데이트를 진행하는 것이 좋겠을 것 같다.
현재는 많은 브라우저나 웹 서버에서 TLS 1.2 미만 버전에 대해서 지원이 되지 않는다. 다수의 메이저 웹 브라우저에서도 2020년 상반기까지 TLS1.0 및 TLS1.1 버전에 대한 지원을 완전이 삭제할 예정이라고 공지 되었다고 한다.
나는 이번 문제를 해결하기 위해 임시방편으로 서버의 정책을 수정하였지만, 보안적인 측면을 위해서라도 빠른 시일 내에 TLS에 대한 버전업을 진행하는 편이 좋겠다.
삽질 끝.
참고 문서
- https://www.digicert.com/blog/depreciating-tls-1-0-and-1-1/
- https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html
- https://aws.amazon.com/ko/premiumsupport/knowledge-center/elb-fix-ssl-tls-negotiation-error/
'Conception > Computer Network' 카테고리의 다른 글
HTTP, TLS 버전별 구분 (0) | 2022.06.15 |
---|---|
DomainName과 HostName (1) | 2020.03.07 |
커버로스(Kerberos) 프로토콜 (5) | 2019.11.19 |
SSL 인증과정과 HTTPS - 인터넷 보안을 위한 과정 (0) | 2019.07.31 |
TCP 와 UDP - 제 4계층의 프로토콜 (0) | 2019.07.31 |