[java] SSL 핸드셰이크 프로세스
SSL(보안 소켓 계층)은 인터넷 통신의 보안을 위해 사용되는 프로토콜입니다. SSL은 클라이언트와 서버 간의 보안 연결을 설정하고 관리하는 데 사용됩니다. SSL 연결을 설정할 때 핸드셰이크 프로세스가 사용됩니다.
SSL 핸드셰이크란?
SSL 핸드셰이크는 클라이언트와 서버 간의 통신이 시작될 때 발생하는 과정으로, 서로 통신이 가능한지 확인하고 통신에 사용할 암호화 방법 등을 협상하는 과정입니다. 이 프로세스는 다음과 같은 단계로 이루어집니다.
1. 클라이언트 ‘Hello’ 메시지
- 클라이언트는 서버로부터 보낼 메시지를 작성하고, 서버에 연결합니다. 클라이언트는 지원하는 SSL 버전, 암호화 알고리즘 등의 정보를 서버에게 전송합니다.
2. 서버 ‘Hello’ 메시지
- 서버는 클라이언트로부터 받은 정보를 기반으로 클라이언트에 대한 응답을 작성하고, 클라이언트로 전송합니다. 서버는 자신의 인증서와 지원하는 암호화 방법을 클라이언트에게 제시합니다.
3. 인증
- 클라이언트는 서버의 인증서를 확인하고, 서버가 신뢰할 수 있는지 확인합니다. 이 과정에서 클라이언트는 서버의 공개 키를 사용하여 데이터를 암호화합니다.
4. 키 교환
- 클라이언트는 서버의 공개 키를 사용하여 암호화된 데이터를 서버에 전송합니다. 서버는 자신의 개인 키를 사용하여 이 데이터를 복호화합니다.
5. 세션 키 생성
- 클라이언트와 서버는 핸드셰이크를 통해 공유하는 보안 세션 키를 사용하여 데이터를 암호화 및 복호화합니다. 이러한 과정을 거쳐, 안전한 통신 채널이 설정됩니다.
SSL 핸드셰이크 프로세스를 통해 클라이언트와 서버는 안전한 통신을 위한 공통 설정을 협의하고 세션 키를 생성하여 안전한 통신 채널을 확립합니다.
이렇게 SSL 핸드셰이크 프로세스를 통해 클라이언트와 서버는 데이터를 안전하게 교환할 수 있으며, 중간자 공격과 같은 보안 위협으로부터 보호받을 수 있습니다.
참고문헌:
- https://www.cloudflare.com/ko-kr/learning/ssl/ssl-handshake-process/
- https://ko.wikipedia.org/wiki/SSL