C.S/WEB

암호화와 SSL 인증 방식

칼쵸쵸 2022. 7. 16. 17:48

암호화 : 중간에서 누군가가 읽을 수 없게 변경

복호화 : 암호화 이전의 데이터로 변환

키 : 암호화,복화화를 위한 키

 



1. OpenSSL 대칭키 생성 예시

대칭키  : 암호화를 하는 쪽과 복호화를 하는 쪽이 동일한 를 가지고 있어야함

openssl enc -e -des3 -salt -in hello.txt -out nohello.txt => key 입력

openssl enc -d -des3 -in nohello.txt -out hello2.txt => key 입력

 

2. openssl 비대칭 키 예시

비대칭키 : 키가 2개 , 키를 배달하는 사고가 일어나지 않음

공개키 , 비밀키

A로 암호화 시 B로 복호화 가능

B로 암호화시 A로 복호화 가능

공개키로 암호화한 내용은 개인키로만, 개인키로 암호화한 내용은 공개키로만 해독할 수 있다.

openssl genrsa -out private.pem 1024 : 비밀키 발행 (1024는 복잡도)

openssl rsa -in private.pem -out public.pem -outform PEM -pubout : 비밀키를 활용한 공개키 발행

openssl rsautl -encrypt -inkey public.pem -pubin -in hello.txt -out hello.ssl : 공개키암호화 진행

openssl rsautl -decrypt -inkey private.pem -in hello.ssl -out decrypted.txt : 비밀키복호화 진행

 

공개키로 공개한 키로 암호화시킨 데이터는 공개키를 발행한 주체만 비밀키로 복호화가 가능하다.

공개키를 만든 주체만 데이터의 해석이 가능하다.

 

3. SSL 인증서

1. 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다

2. SSL 통신에 사용할 공개키를 클라이언트에게 제공한다.

ca 서버가 클라이언트가 의도한 서버가 맞는지를 보장하는 역할

각 브라우저 벤더마다 ca를 정해서 해당 역할을 보장하는 기업들에게 위임하여 보증함

ssl을 통해서 암호화된 통신을 제공하려는 서비스는 ca를 통해서 인증서를 구입해야 한다.

(직접 ca 서비스를 할 수도 있지만 공인되지 않았으므로 브라우저에서 경고가 발생)

 

ssl 인증서 내용

1. 서비스의 정보 (CA, 도메인)

2. 공개키

 

4. 인증서를 활용한 서비스 정보 보증 과정

1. 웹브라우저가 서버에 접속 시 서버가 먼저 인증서를 제공

2. 브라우저는 해당 인증서의 인증기관이 브라우저 내의 인증기관 리스트에 있는지 확인한다.

3. 브라우저는 해당 인증기관의 비밀키로 암호화한 인증서를 브라우저가 등록된 공개키를 이용해서 복호화한다.

4. 복호화에 성공했다면 해당 인증서는 인증기관의 비밀키로 암호화된 데이터를 복호화할 수 있으니 해당 사이트가 CA에 의해서 보증된다.

 

인증서 내의 공개키로 해당 서버와 통신한다.

 

 

5. 실제 네트워크 상의 HandShake

실제 데이터 : 대칭키 방식으로 암호화함

대칭키의 키 : 공개 키방식으로 암호화함

성능 문제상 공개 키방식보다 대칭키 방식이 더 빠르기 때문에 실제 데이터는 대칭키 방식으로 암호화하고 대칭키의 키를 공개키로 암호화한다.

 

1. 클라이언트가 서버에 접속한다.

- 클라이언트가 사용 가능한 암호화 방식들의 리스트를 전송

- 클라이언트 랜덤 데이터

 

2. 서버가 응답

- 클라이언트가 전달해준 암호화 리스트 중에 선택한 리스트를 전달

- 인증서

- 서버 랜덤 데이터

 

3. 클라이언트가 서버로부터 응답(인증서)을 받음

- 인증서를 발급한 CA기관명

- 해당 CA 기관에 대한 공개키로 클라이언트가 인증서를 복호화함

- 복호화에 성공하면 서버를 신뢰함

 

4. 랜덤 데이터로 서버와 클라이언트 pre master secret 생성

- 클라이언트는 상기 2번을 통해서 서버의 랜덤 데이터를 받는다

 - 인증서 내부에 (CA가 아닌) 서버의 공개키를 통해 복호화하여 pre master secret을 생성한다.

 

5. 서버와 클라이언트 모두 주고받은 랜덤 데이터를 통해서 세션 키를 생성한다.

- 추후에 데이터 전달(세션) 시에는  세션 키를 활용하여 대칭키 방식으로 주고받는다.

- 서버와 클라이언트 모두 서로에게 Handshake 단계가 끝남을을 알린다.

'C.S > WEB' 카테고리의 다른 글

HTTP 쿠키와 web storage에 대하여  (0) 2023.12.09
HTTP 캐시  (0) 2021.03.03
HTTP 헤더  (0) 2021.02.27
HTTP 메서드  (0) 2021.02.27
HTTP 응답코드  (0) 2021.02.27