본 내용은 생활코딩의 내용을 바탕으로 정리하였습니다.
https://opentutorials.org/course/228/4894
http(Hypertext Transfer Protocol) : hypertext인 html을 전송하기 위한 통신규약
https(Hypertext Transfer Protocol Over Secure Socket Layer): 보안이 강화가 된 http
암호화 : HELLO -> QWERT(어떤 정보를 알아볼 수 없게 만드는 행위)
복호화 : QWERT -> HELLO(암호화된 정보를 알아 볼 수 있게 만드는 행위)
암호화/ 복호화를 동일한 키로 해결을 하는 것이 대칭키(openssl, des3...)
키 값이 노출이 될 위험이 있기에 노출이 되면 위험한 상황이 도출이 될 위험이 있다.
대칭키 방식을 개선한 방식
공개키 + 개인키(비공개키) -> 두개의 키로 이루워져 있다
-> 키 배달사고가 발생하지 않는다
*인증의 기능 -> 받은 정보가 예상한 사람이 보냈는가?(개인키로 암호화를 실시 할 시)
-> 공개키는 누구나가 가지고 있기 때문데 개인키로 암호화 된 정보는 누구나 복호화가 가능
-> 기대 효과는 만약 공개키로 해당 정보를 복호화가 가능 하다면 개인키를 가지고 있는 대상이 보낸 정보가 확실하다는 인증의 효과가 있음
클라이언트, 서버간 제 3자가 보증해주는 전자화된 문서
효과
통신내용이 공격자에게 노출되는 것을 막음
클라이언트가 접속하려하는 서버가 신뢰 할 수 있는 서버인지 판단
통신 내용의 악의적인 변경을 방지
*ssl과 tsl은 같음(IETF관리로 바뀌면서 ssl이 tls로 이름이 바뀜)
해당 서버가 신뢰 할 수 있는 서버(사이트)임을 보장해주는 기관
사내서버같은 경우 SSL 인증서 구입 필요가 없다.
-> 서버가 안정하다는 것이 내부적으로는 알고 있기 때문
서비스의 정보(인증서 발급 CA, 서비스 도메인 등)
서버측 공개키(공개키의 내용, 공개키의 암호화 기법)
1, 웹 브라우저가 서버에 접속할 때 서버는 제일 먼저 인증서를 제공
2, 웹 브라우저는 CA기관을 알고 있고(내장된 CA리스트 들이 있음) SSL인증서에 있는 CA정보를 판단 후 공개키를 이용하여 복호화를 실시
-> 해당 웹 서버의 공개키 및 여러 정보를 클라이언트는 얻을 수 있음
*공개키키 기법은 computing power가 많이 들기 때문에 공개키 방식으로 대칭키를 교환 후 실제 데이터는 대칭키 방식으로 주고받는다.
1, 악수(handshake)
2, 전송(transpart)
3, 세션종료
1, 악수(handshake)
클라이언트와 서버가 서로 어떤 상태인지 파악
step1
클라이언트가 서버에 접속(Client Hello)
주고받는 정보
클라이언트에서 생성한 랜덤 데이터
클라이언트가 지원하는 암호화 방식들
세션 아이디
step2
서버는 Client Hello에 대한 응답으로 Server Hello
서버측 생성한 랜덤 데이터
서버가 선택한 클라이언트의 암호화 방식
인증서
step3
인증서가 CA에 의해서 발급 된 것인지 확인하기 위해 브라우더에 내장된 CA리스트를 보고 있으면 공개키로 복호화
-> 클라이언트는 클라이언트의 랜덤 데이터와 서버의 랜덤 데이터를 사용하여 pre master secret을 생성하고 이 pre master secret을 공개키 방식으로 서버에 전달
-> 서버와 클라이언트는 서로 pre master secret을 가짐
-> 일련의 과정으로 거쳐 master key로 만들고 session key를 가지게 됨
-> 이후 클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알림
2,세션
session key(대칭키) 암호화 하여 클라이언트와 서버가 데이터를 암호화, 복호화 하여 처리
*공개키 -> 이상적이지만 computing power가 많이 들기 때문에 hybrid한 방식으로 처리
3, 세션종료
SSL 통신이 끝났음을 서로에세 알려줌
통신에서 사용한 대칭키인 세션키를 폐기
=> 세션의 수립과 종료는 짧아서 유출이 되도 기존 대칭키 방식보다 보안이 높다고 할 수 있음
SSL 제공 방법
ssl.key : 서버쪽 개인키(비공개키)
ssl.crt : 디지털 인증서
ca.pem : ROOT CA 인증서(CA도 계층적 구조라 CA를 다른 CA가 인증해 주고 하는데 그 중 최상위 CA)
sub.class1.server.ca.pem : 중계자 인증서