SSL 은 웹서버와 브라우저 간의 통신을 암호화 해서 중간에 누가 가로채더라도 내용을 알 수 없게 해줍니다. SSL이 적용되면 https:// 를 사용하여 웹서버에 접근하게 됩니다.
원래 여러가지 기술들이 작용하는 것이라 복잡하므로 기술적인 부분은 제외하고 개념적인 SSL 동작 방식을 간단히 알아보겠습니다. 그래도 미리 알아 두어야 할 것들이 많습니다.
1. SSL과 TLS
SSL(Secure Sockets Layer)와 TLS(Transport Layer Security)는 같은 것이라고 할 수 있습니다. SSL은 TCP/IP 암호화 통신에 사용되는 규약으로써 넷스케이프에서 만들었습니다. SSL 3.0 버전부터는 IETF에서 표준으로 정해서 TLS 1.0이 되었습니다. 하지만 아직도 그냥 SSL이라고 더 많이 불리는것 같습니다.
2. 대칭키 암호화와 비대칭키 암호화
SSL에서는 데이터를 암호화해서 전송하므로 여기에서 사용되는 방식으로 대칭키 암호화와 비대칭키 암호화가 있습니다.
- 대칭키(Symmetric Key) 암호화는 하나의 키로 암호화와 복호화를 모두 하는 암호화 방식입니다. 많이 사용되어지는 AES가 대칭키 방식의 암호화 입니다.
- 비대칭키(Asymmetric Key) 암호화는 두 개의 키로 암호화와 복호화를 하는 암호화 방식입니다. A, B 두 개의 키가 있다면 A 키로 암호화 하면 B 키로 복호화 할 수 있고, B 키로 암호화 하면 A키로 복호화 할 수 있습니다.
보통 하나는 자신만 갖고 이를 개인키(Private Key)라 부르고, 다른 하나는 상대방에게 공개하여 공개키(Public Key)라고 부릅니다. 그래서 비대칭키 암호화는 공개키 방식 암호화라고도 부릅니다. 대표적인 비대칭키 암호화는 RSA가 있습니다.
대칭키 암호화는 서버와 클라이언트가 같은 키를 사용해야 하므로 키를 공유하는데 문제가 있고, 비대칭키 암호화는 공개키를 배포함으로써 키 공유 문제는 해결 되지만, 처리 속도가 느린 문제가 있습니다.
HTTPS 통신에서 실제 전송되는 데이터의 암호화에는 대칭키 암호화 방식을 사용하고, 키 교환에는 비대칭키 암호화를 사용하여 이러한 문제를 해결하고 있습니다.
3. 인증기관(Certification Authority - CA)
HTTPS 통신에서는 제삼자 인증을 사용합니다. 인증기관(CA)으로 부터 공인인증서를 발급받아서 서버에 설치해야 경고 없이 HTTPS 통신을 할 수 있습니다. 인증기관의 인증을 받았다는 것은 웹서비스를 제공하는 소유자를 보증해 준다는 의미 입니다. 자세히는 웹서비스 제공자의 공개키가 키 소유자의 것이라는 것을 보증해주는 것이 되겠습니다.
HTTS로 웹서비스를 제공하려는 사람은 자신의 공개키와 개인키를 생성하고, 공개키를 인증기관에 보냅니다. 인증기관에서는 보내온 공개키, 유효기간, 도메인 등의 정보를 포함하여 인증기관의 개인키로 전자서명한 인증서를 발급 합니다.
웹서비스 제공자는 발급 받은 인증서와 자신의 개인키를 웹서버에 설정하여 HTTPS 통신을 할 수 있게 됩니다.
클라이언트 즉, 웹 브라우저에는 여러 인증기관의 공개키를 포함한 인증서가 이미 설치되어 있습니다. 그래서 웹서버와 통신시 인증기관의 개인키로 서명된 인증서를 받았을때 이미 설치되어 있는 인증기관의 공개키로 복호화가 가능한 것입니다.
개발 목적이나 내부에서 사용할 목적으로 사설 인증서를 만들 경우 웹 브라우저에 인증서를 수동으로 설치해야만 경고 없이 통신을 할 수 있습니다.
웹서비스를 하시는분이 키생성등의 기술적인 작업을 잘 모르기 때문에 인증서 발급기관에서 개인키/공개키 생성해서 인증서를 발급해 주기도 합니다. 개인키는 노출되지 않는게 중요하므로 직접 키를 생성해서 인증서를 발급 받는 것이 좋다고 합니다.
4. SSL 동작 방식
이제 기본적으로 필요한 예기들은 한것 같습니다. 인증기관으로부터 인증서를 발급 받아서 웹서버에 설치하고 HTTPS 통신이 가능한 상태가 되었다고 가정하고, SSL 동작 방식에 대해 알아보겠습니다.
i) 사용자가 웹브라우저로 사이트에 접속하면 웹서버는 인증서를 웹 브라우저에게 보냅니다. 이 인증서에는 인증기관의 개인키로 암호화된 사이트의 정보와 공개키가 들어 있습니다.
ii) 웹 브라우저는 이미 가지고 있는 인증기관의 공개키로 웹 서버에서 받은 인증서를 복호화 해서 확인합니다.
iii) 웹 브라우저는 실제 데이터의 암호화에 사용될 대칭키를 생성하고, 인증서에서 꺼낸 웹 서버 측의 공개키로 암호화 해서 웹 서버로 보냅니다.
iv) 웹서버는 자신이 가지고 있는 개인키로 웹 브라우저가 보내온 대칭키를 복호화 해서 얻습니다. 이제 이 대칭키로 데이터를 암호화해서 주고 받게 됩니다.
실제는 데이터 전송을 위해 웹브라우저가 지원하는 암호화 방식과 서버가 지원하는 암호화 방식들 중 둘 다 지원하는 암호화 방식을 선택하는 등의 많은 작업이 있고, 키 교환도 다른 방식이 있을 수 있습니다.
여기에서는 아주 간단하게 개념적으로 HTTPS 가 동작 하는 방식을 알아 보았습니다.
'프로그래밍 > 네트워크, 보안' 카테고리의 다른 글
자바스크립트 RSA 암호화 라이브러리 JSEncrypt (10) | 2018.10.04 |
---|---|
Windows에서 TOMCAT에 개발용으로 SSL 적용하기 (28) | 2018.04.21 |
Tomcat SSL 적용시 https로 자동 리다이렉트 설정하기 (8) | 2018.04.20 |
Tomcat에 X-Frame-Options 헤더와 X-Content-Type-Options 헤더 적용하기 (0) | 2018.04.20 |
와이파이(WiFi) 거리 연장하기(ipTime Extender-N3) (2) | 2018.04.19 |