-
HTTPS와 SSL인증서CS/네트워크 2020. 10. 25. 20:05
본 내용은 생활코딩의 내용을 바탕으로 정리하였습니다.
opentutorials.org/course/228/4894
Http와 Https
http(Hypertext Transfer Protocol) : hypertext인 html을 전송하기 위한 통신규약
https(Hypertext Transfer Protocol Over Secure Socket Layer): 보안이 강화가 된 http
대칭키
암호화 : HELLO -> QWERT(어떤 정보를 알아볼 수 없게 만드는 행위)
복호화 : QWERT -> HELLO(암호화된 정보를 알아 볼 수 있게 만드는 행위)
암호화/ 복호화를 동일한 키로 해결을 하는 것이 대칭키(openssl, des3...)
단점
키 값이 노출이 될 위험이 있기에 노출이 되면 위험한 상황이 도출이 될 위험이 있다.
공개키
대칭키 방식을 개선한 방식
공개키 + 개인키(비공개키) -> 두개의 키로 이루워져 있다
* 안전한 암호화와 복호화가 가능(공개키로 암호화를 실시 할 시)
-> 키 배달사고가 발생하지 않는다
*인증의 기능 -> 받은 정보가 예상한 사람이 보냈는가?(개인키로 암호화를 실시 할 시)
-> 공개키는 누구나가 가지고 있기 때문데 개인키로 암호화 된 정보는 누구나 복호화가 가능
-> 기대 효과는 만약 공개키로 해당 정보를 복호화가 가능 하다면 개인키를 가지고 있는 대상이 보낸 정보가 확실하다는 인증의 효과가 있음
SSL 디지털 인증서
클라이언트, 서버간 제 3자가 보증해주는 전자화된 문서
효과
- 통신내용이 공격자에게 노출되는 것을 막음
- 클라이언트가 접속하려하는 서버가 신뢰 할 수 있는 서버인지 판단
- 통신 내용의 악의적인 변경을 방지
* https와 ssl은 약간의 다른 말(ssl 이 작동하는 층 위에 https 프로토콜이 존재)
*ssl과 tsl은 같음(IETF관리로 바뀌면서 ssl이 tls로 이름이 바뀜)
SSL 과 CA
CA : certification authority
해당 서버가 신뢰 할 수 있는 서버(사이트)임을 보장해주는 기관
사내서버같은 경우 SSL 인증서 구입 필요가 없다.
-> 서버가 안정하다는 것이 내부적으로는 알고 있기 때문
SSL 인증서의 내용
- 서비스의 정보(인증서 발급 CA, 서비스 도메인 등)
- 서버측 공개키(공개키의 내용, 공개키의 암호화 기법)
SSL인증 과정
1, 웹 브라우저가 서버에 접속할 때 서버는 제일 먼저 인증서를 제공
2, 웹 브라우저는 CA기관을 알고 있고(내장된 CA리스트 들이 있음) SSL인증서에 있는 CA정보를 판단 후 공개키를 이용하여 복호화를 실시
-> 해당 웹 서버의 공개키 및 여러 정보를 클라이언트는 얻을 수 있음
*대칭키 기법은 computing power가 많이 들기 때문에 공개키 방식으로 대칭키를 교환 후 실제 데이터는 대칭키 방식으로 주고받는다.
컴퓨터와 컴퓨터가 네트워크로 통신 할 때의 3가지 단계
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 : 중계자 인증서