SSL(Security Socket Layer)
- Netscape 라는 회사에서 서버와 브라우저 간 보안을 위해 만든 프로토콜
- SSL은 CA(Certificate Authority)(인증기관)라 불리는 서드 파티로부터 서버와 클라이언트(브라우저)의 인증을 하는 데 사용된다.
- HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜( HyperText Transfer Protocol over Secure Socket Layer )
- 여기서 사용하는 데이터 암호화가 SSL이다.
HTTPS의 동작과정
크게 3가지 파트로 구분할 수 있다.
서버에서는 HTTPS 프로토콜을 지원하기 위해서는 미리 준비해야 하는 과정이 있다.
- 서버의 공개키, 비밀키 생성
- 인증기관에게 인증서를 요청 (서버의 공개키 정보, 서버의 정보를 인증기관에게 전송)
- 인증기관은 서버로부터 받은 정보를 기반으로 인증기관의 개인키로 암호화한 인증서를 서버에게 전송
- 이제 서버는 HTTPS 프로토콜을 지원할 준비가 되었다. ( 서버의 공개키, 개인키 && 인증기관에 인증서)
다음으로 클라이언트가 서버에 접속을 하는 경우 일어나는 상황을 살펴보자
- 클라이언트가 SSL로 암호화된 페이지를 요청한다.(https)
- 서버는 공개키를 인증서와 함께 전송한다.
- 클라이언트는 인증서가 자신이 신용 있다고 판단한 인증기관으로부터 서명된 것인지 확인한다. (검증을 하여 신뢰가 가능하다면)
- 클라이언트는 서버로부터 받은 공개키로 URL, 데이터들과 자신의 대칭키를 암호화 하여 전송
- 서버는 비밀키로 요청을 복호화하고 전달받은 대칭키로 응답을 암호화해서 전송
HTTPS 프로토콜 사용을 위해서 Keystore, Truststore 만들어보기
- 그럼 이제 SSL, SSL 동작 과정을 알았으니 실제 WebServer에서 https 프로토콜을 사용하기 위한 Keystore, Truststore를 생산하는 과정을 살펴보자.
- keystore (비밀키) 생성
- keystore를 이용해서 CSR(Certificate Signing Reuest) 파일 생성
- CSR(Certificate Signing Reuest) 파일을 이용해서 truststore(공개키) 생성
- 위의 과정은 인증 기관으로부터 인증서를 받는 과정이 아닌 SSL key를 생성한다.
- 인증 기관으로부터 인증서를 받기 위해서는 더 복잡한 과정이 추가된다.
- 인증 기관으로부터 인증서를 받아 등록하는 과정
명령어 모음
- 키 삭제
keytool -delete -alias certkey
- 키 확인
keytool -list
- 인증서 확인
keytool -printcert -file certkey.cer
- 키 생성(개인키/공개키 생성)
keytool -genkey -alias certkey -keystore certkey.keystore
- 인증서 생성(공개키)
keytool -export -alias certkey -keystore certkey.keystore -rfc -file firebird.cer
⇒ 생성 : certkey.cer
- truststore 생성(다른 사람의 공개키를 등록) -- 선택사항
keytool -import -alias certkey -file certkey.cer -keystore certkey.truststore
⇒ 생성 : certkey.truststore
-출처- https://joomn11.tistory.com/64