개요
Transport Layer Security로써 L4 Layer위에 올라가는 보안을 위한 통신 Protocol입니다.
원리
Client와 Server간에 "비대칭키를 사용하여 대칭키 암호화 키를 교환한" 후 이후 통신부터는"대칭키를 사용하여 암호화 통신"을 하는 방식으로 Client와 Server 간의 데이터 통신을 보호합니다.
여기서 암호화 통신을 위해서 비대칭키과 대칭키를 사용하는 이유는 아래와 같습니다
비대칭키만 사용하게 되면 "대칭키 암호화 방식에 비해 비대칭 키 암호화는 계산이 복잡하고 느리기 때문에 대량의 데이터를 암호화하거나 복호화하는 데 사용하기에는 부적합합니다." 그래서 대칭키교환을 위해서만 비대칭키를 사용합니다.
검증 환경 구성
목차
TLS 통신을 위한 인증서 생성
인증서를 ngnix에 적용
TLS 통신을 위한 인증서 생성
개인키 생성
openssl genpkey -algorithm RSA -out privatekey.pem
CSR 생성
openssl req -new -key privatekey.pem -out request.csr
인증서 생성
CA가 없으므로 self-sign을 진행합니다.
openssl x509 -req -days 365 -in request.csr -signkey privatekey.pem -out selfsigned.crt
만약 CA에서 발급 받은 인증서 및 키가 있다면 CA 정보를 사용해서 인증서에 sign하면됩니다.
openssl x509 -req -days 365 -in request.csr -CA ca.crt -CAeky ca.key -out ca-signed.crt
인증서를 ngnix에 적용
nginx에서 인증서 적용
테스트를 위해서 위과정에서 생성한
인증서 파일 : selfsigned.crt
개인 키 : privatekey.pem
를 /etc/nginx/ 에 tls 디렉터리를 하나 만들고
그리고 아래 정보를 /etc/nginx/sites-available/default에 추가하였습니다.
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/nginx/tls/selfsigned.crt;
ssl_certificate_key /etc/nginx/tls/privatekey.pem;
설정 적용 결과
nginx 재 시작
systemctl restart nginx
nginx 접속
https://192.168.0.9 로 접속 해보겠습니다.
참고. 192.168.0.9은 nginx를 뛰운 vm의 IP입니다.
아래와 같이 Not secure라고 뜨면 인증서가 잘 적용이 된 겁니다. 실제 CA에서 검증한 게 아님으로 Not secure가 맞습니다
여기서 왼쪽 하단에 "Advanced"를 클릭 후 "Proceed to 127.0.0.1(unsafe)를 눌러서 들어가면 됩니다.
TLS 통신 큰 그림
TLS 패킷을 통한 통신 분석
TLS sample packet
아래 패킷은 세션키를 사용하여 TLSv1.3의 통신 내용을 복호 한 것입니다. 복호화 방법
https://wiki.wireshark.org/TLS#using-the-pre-master-secret
위 packet의 TLS(Transport Layer Security) 통신 과정은 대략적으로 다음과 같이 요약할 수 있습니다.
1구간 (인증)
44번까지의 과정이 비 대칭키(인증서)를 가지고 대칭키(session key)를 생성합니다.
1. ClientHello 메시지
ClientHello 메시지
클라이언트 → 서버
클라이언트는 서버에 ClientHello 메시지를 전송합니다.
이 메시지에는 클라이언트가 지원하는 암호 스위트, 지원하는 TLS 버전, 그리고 랜덤 데이터가 포함되어 있습니다.
2. ServerHello 메시지
ServerHello
서버 → 클라이언트
서버는 클라이언트에게 ServerHello 메시지를 응답합니다.
이 메시지에는 서버가 선택한 암호 suit, 선택한 TLS 버전, 그리고 랜덤 데이터가 포함되어 있습니다.
서버의 인증서 전송
서버 → 클라이언트
서버는 자신의 공개키를 포함한 인증서를 클라이언트에게 전송합니다.
클라이언트는 이 인증서를 사용하여 서버의 신원을 검증합니다.
키 교환
클라이언트/서버
클라이언트와 서버는 Pre-Master Secret을 교환합니다.
이 정보는 서버의 공개키를 사용하여 암호화됩니다 (포워드 시크릿성을 위해 일부 경우에는 추가적인 키 교환 메커니즘을 사용합니다).
3. 세션 키 생성
클라이언트/서버
클라이언트와 서버는 교환된 Pre-Master Secret과 랜덤 데이터를 사용하여 세션 키를 도출합니다.
2구간 (통신)
45번부터 대칭키(session key)를 가지고 통신합니다..
1. 암호화된 통신 시작
클라이언트/서버
클라이언트와 서버는 세션 키를 사용하여 모든 추가적인 통신을 암호화합니다.
2. 암호화된 데이터 전송
클라이언트 ↔ 서버
클라이언트와 서버는 이제 상호 간에 암호화된 데이터를 안전하게 전송할 수 있습니다.
이러한 스텝은 대략적인 TLS 통신 과정을 나타냅니다. 실제 과정은 선택된 TLS 버전과 암호 스위트에 따라 약간 다를 수 있습니다.
정리
TLS통신에서는 암호화 통신할 때 필요한 session key를 서버의 인증서를 사용하여 client/server 간에 교환한 후에 session key만을 이용하여 암호화 통신을 진행합니다.
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 38. k8s에서 사용자 추가 및 권한 제어 (0) | 2023.10.15 |
---|---|
[CKA] 37. k8s에서의 상호 인증 원리 (0) | 2023.10.13 |
[CKA] 35. Security - TLS통신 이해를 위한 PKI 기본 지식 (0) | 2023.09.17 |
[CKA] 34. volume 과 PV 그리고 PVC (0) | 2023.09.03 |
[CKA] 33. docker의 volume관리 (volume driver) (0) | 2023.08.30 |