
SSL 인증서 교체 후 안드로이드 앱(Kotlin)에서 정상적으로 TLS(SSL) 3-Way-Handshake가 이루어지지 않음.
서버가 클라이언트에 자신의 인증서를 보낼 때, 클라이언트가 이 인증서를 검증할 수 없어서 발생
패킷안에 본인이 사용하는 TLS 버전, 지원하는 암호화 방식, 대칭키 생성 시 사용하는 난수, 세션 ID, SNI를 포함.
최초 Handshake 에서는 세션 ID가 0으로 없고, 이후 이어지는 Server Hello 패킷을 통해 서버가 세션 ID을 보내줌.
클라이언트는 세션 ID를 로컬에 저장해 두었다가 다시 같은 서버와 HandShake를 맺을 때 해당 세션 ID를 보냄.
서버가 세션ID를 승인하면 Server Hello에 같은 세션 ID를 보내주면서 서버의 인증서를 확인하고 암호화 방법을 선정, 대칭키 교환하는등의 작업을 생략. 시간상 100ms 정도 절약 가능.
SNI(Server Name Indicate)는 서버의 이름을 표시하는 부분.
요즘에는 IP 주소 하나에 여러개의 도메인이 연결되기 때문에 문제가 됨.(서버에서 발행한 인증서 하나에 모든 도메인을 명시하는것이 사실상 불가능하고 도메인마다 모든 인증서를 발급받는 것 또한 매우 비효율적)
따라서 IP 주소에 접근할 때 어떤 도메인에 접속하는 지 명시하는 부분.
SNI를 이용하면 물리적으로 동일한 서버에 존재하는 각기 다른 도메인들이 서로 다른 SSL 인증서를 적용할 수 있음.
근데 SNI를 전송할 때 평문(암호화 하지 않음)으로 전송하기 때문에 스니핑이 가능하고 접속하려는 도메인이 노출됨.
Client Hello와 거의 동일
서버에서 사용하는 TLS 버전, 클라이언트가 보낸 암호화 방식 중 서버가 사용가능한 방식, 난수, 세션 ID, SNI를 포함
서버의 인증서를 클라이언트에게 보내는 단계. 필요에 따라 CA의 Certificate도 함께 전송.
클라이언트는 이 메시지를 통해 서버의 인증서가 무결한지 검증.
검증이 끝나면 전에 주고 받았던 난수를 조합해 대칭키(pre master secret)를 생성.
대칭키를 통해 서버의 공개키를 암호화.
서버가 클라이언트에게 보낼 메세지를 모두 보냈다는 뜻.
클라이언트는 만들어둔 대칭키를 서버의 공개키로 암호화한 것을 서버에게 보냄.
통신과정은 아니고 클라이언트와 서버가 서로 암,복호화 할 때 사용할 대칭키를 성공적으로 공유했다는 내용.
이후로 전송되는 모든 메세지는 협상된 알고리즘과 키를 사용하겠다고 서로에게 보내는 내용.
클라이언트와 서버가 TLS Handshake를 성공적으로 마치고 종료.
AOS의 경우 서버의 인증서 검증 시 체인 정보가 포함되지 않았기 때문에 이슈 발생.
SSL/TLS 연결에서 클라이언트는 서버의 인증서를 검증하기 위해 인증서 체인을 사용.
체인이 없으면 클라이언트는 서버 인증서를 신뢰할 수 있는지 여부를 확인 불가능.
다른 서버들은(IOS, Web 등) SSL 인증서를 코드에 포함하지 않고, 신뢰할 수 있는 CA 루트 인증서로 검증.
(CA 루트 인증서는 OS/런타임 환경에 위치)
인증서 체인: 상위 인증 기관이 하위 인증서가 포함하고 있는 공개키(인증서)를 상위 기관의 비밀키로 암호화 하여 상호 보증하게 되는 것
서버인증서(example.crt) 와 CA 체인 인증서(gd_bundle-g2-g1.crt) 파일을 합침.
-----BEGIN CERTIFICATE----- (서버 인증서)
MIIGhDCCBWygAwIBAgIJANfnFX+P7lqQMA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD
...중략...
H7odFkOIgP4PS3y4lmfDMx6A9BsNDytI1uXlG33mqD5quSh59ccY9w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- (CA 체인 인증서)
MIIE0DCCA7igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
...중략...
LXY2JtwE65/3YR8V3Idv7kaWKK2hJn0KCacuBKONvPi8BDAB
-----END CERTIFICATE-----


참고 블로그: https://babbab2.tistory.com/7