SSL(Secure Sockets Layer)
- 암호화 기반의 통신 프로토콜 HTTP에 SSL이 결합된다면 이를 HTTPS 라고 부른다
- Html 텍스트 기반의 통신규약. 인터넷에서 데이터를 주고 받을수 있는 프로토콜, Html문서를 주고받는데 쓰이는 통신규약.
- SSL인증서를 통해 클라이언트와 서버 간의 통신을 보증한다.
- SSL 인증서에는 공개키, CA(인증서 발급자) 도메인 등등의 정보가 담겨있음
- 암호화된 데이터를 주고받는다, 주로 대칭키(공개키) 방식, 비대칭키(비밀키) 암호화 방식 사용
- 대칭키(Symmertric Key) : 하나의 Key로 암호화와 복호화를 모두 하는 방식
- 비대칭키(Asymmertric Key) : 두 개의 키로 암호화와 복호화를 하는 방식 Ex) A 로 암호화 > B 로 복호화, B 로 암호화 > A 로 복호화
- HTTPS에선 실제전송 데이터의 암호화시 대칭키, 키 교환에선 비대칭키 암호화를 사용.
- SSL통신과정은 HandShake라는 과정을 거친다. ( handshake -> 데이터전송 -> 세션종료 )
- Client -> Server
- 클라이언트는 랜덤데이터를 만들어 서버에 보낸다.
- 클라이언트에서 사용 가능한 암호화 방식들을 서버에 보낸다.
- Server -> Client
- 서버 또한 랜덤데이터를 만들어 클라이언트에 보낸다.
- 클라이언트가 보낸 암호화방식들 중에 사용할 방식을 선정하여 클라이언트에 보낸다.
- 이떄 SSL인증서도 같이 동봉되어 보내진다.
- Client -> CA
- 서버에게 받은 인증서를 CA를 통해 확인한다(신뢰성 검증)
- 공인된 CA라면(브라우저에 저장된CA 리스트)에서 발급된 인증서라면 인증서의 공개키로 복호화 할수있다 제대로된 인증서 라면 공인CA의 비밀키로 암호화 되었기 때문이다.
- 공인된 CA가 아닌 사설 CA에서 발급받은 인증서라면 리스트에 존재하지 않기에 경고문이 뜬다
- 세션(Session) : 실제로 서버와 클라이언트가 데이터를 주고받는 단계
- 정보를 상대방에게 전송하기 전에 세션 키 값을 이용해서 대칭키 방식으로 암호화