Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Connection Pool
- @MockBean
- 플라이웨이트
- restTemplate
- Item04
- SQL 삽입 공격
- JPA
- java
- Effetive Java
- deleteById
- db
- @Valid
- springboot
- FCM
- Proxy Patter
- 이펙티브 자바
- NotBlank
- 데이터베이스
- Effective Java
- Web
- 디자인 패턴
- Firebase
- Service Locator
- multi module
- @SpyBean
- Spring Boot
- NotEmpty
- 트랜잭션
- @ControllerAdvice
- Service Locator 패턴
Archives
- Today
- Total
NoTimeForDawdling
HTTPS(HyperText Transfer Protocol Secure) 본문
HTTPS란?
인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)프로토콜을 이용하여 웹브라우저(클라이언트)와 서버가 데이터를 주고 받는 통신 규약이다.
즉, HTTP메시지를 암호화 하는 것으로, 여기서 S는 Secure Socket, 보안 통신방을 의미한다.
HTTPS의 공개키 암호화 방식
HTTPS의 암호화 원리의 핵심은 공개키 암호화 방식을 사용하는 것이다.
공개키 알고리즘이란?
- 암호화, 복호화시킬 수 있는 서로 다른 키 2개가 존재하는데 이 두 개의 키는 서로 1번 키로 암호화하면 반드시 2번키로만 복화할 수 있고, 2번 키로 암호화하면 반드시 1번키로만 복화할 수 있는 룰이 있는 것
공개키 암호화 과정
- 하나의 키는 모두에게 공개하는 공개키(1번 키)로 만들어서 공개키 저장소라는 곳에 등록
- 서버는 서버 자신만 알 수 있는 개인키(2번 키)를 소유하고 있음
- 1번키로 암호화된 HTTP 요청, 즉 HTTPS 프로토콜을 사용한 요청이 온다면 서버는 개인키(2번 키)를 이용하여 1번키로 암호화된 문장을 해독
- 서버는 요청이 무엇인지 알게되고 요청에 맞는 응답을 다시 개인키(2번 키)로 암호화해서 요청한 클라이언트에게 보내줌
- 응답을 받은 클라이언트는 공개키(1번 키)를 이용해 개인키(2번 키) 암호화된 HTTPS 응답을 해독하고 사용
좀 더 자세한 HTTPS 통신 흐름
공개키 저장소라 부르던 곳의 원래 명칭은 CA(Certificate Authority)이다.
CA는 민간기업이지만 아무나 운영할 수 없고 신뢰성이 검증된 기업만 CA를 운영할 수 있다.
- 먼저 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해서 공개키와 개인키를 만듬
- 그 다음 신뢰할 수 있는 CA 기업을 선택하고 그 기업에 나의 공개키를 관리해달라고 계약하고 돈을 지불
- 계약을 완료한 CA 기업은 또 CA 기업만의 공개키와 개인키가 있음
- CA 기업은 CA 기업의 이름과 A서버의 공개키, 공개키의 암호화 방법 등의 정보를 담은 인증서, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공
- A서버는 암호화된 인증서를 갖게 되고, 이제 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청(Request)이 오면 이 암호화된 인증서를 클라이언트에게 줌
- 클라이언트 입장에서, 예를 들어 A서버로 index.html 파일을 달라고 요청했을 때 HTTPS 요청이 아니기 때문에 CA기업이 A서버의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게됨
- 세계적으로 신뢰할 수 있는 CA기업의 공개키는 브라우저가 이미 알고 있음(중요)
- 브라우저가 CA 기업 리스트를 쭉 탐색하면서 인증서에 적혀있는 CA 기업 이름이 같으면 해당 CA 기업의 공개키를 이미 알고 있는 브라우저가 해독해서 A서버의 공개키를 얻음
- 그 이후 A서버와 통신할 때는 A서버의 공개키로 암호화해서 Request를 날림
공개키는 누구나 얻을 수 있고 공개키를 알면 서버가 주는 데이터(Response)는 알 수 있는데 보안상 의미가 있을까?
- 결론은 보안상 의미가 없다.
- 대신 해당 서버로부터 온 응답임을 확신할 수 있다.
- 공개키로 해독이 가능했고, 반드시 해당 서버의 개인키로 암호화 했다는 것을 보장하기 때문이다.
'Web' 카테고리의 다른 글
JWT(Json Web Token) (1) | 2021.07.04 |
---|---|
쿠키와 세션(Cookie & Session) (0) | 2021.07.02 |