티스토리 뷰
SSL
- Secure Socket Layer의 약자.
- 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었습니다.
- Certificate Authority(CA)라 불리는 서드 파티로두터 서버와 클라이언트의 인증을 하는데 사용됩니다.
일반적으로 네트워크상에서 데이터 혹은 신원에 대한 정보를 보호하기 위해서 암호화 방식을 많이 사용합니다. 그렇다면 단순히 암호화한다고 해서 안전하다고 할 수 있을지? 그렇지 않습니다. 단순 암호화만을 통해 잘못 설계된 프로토콜의 경우 재생을 통해 공격당할 수 있습니다. 그 내용은 모르더라도 관찰된 통신 내용을 동일하게 재생하면 동일한 결과를 얻을 수 있는 것입니다. 따라서 단순한 암호화 외에 암호화 통신을 할 때 여러가지 정보를 포함하여 암호화하는 것이 보통입니다.
더 쉽게 설명하자면 우리는 보통 다른 사이트에 로그인할 때, 익숙한 아이디와 비밀번호를 통해 가입합니다. 그래서 개인이 자주 사용하는 아이디와 비밀번호만 알면, 얼마든지 다른 사이트 해킹이 가능합니다. 각 사이트는 이러한 특성을 알기 때문에 사이트마다 아이디와 비밀번호를 암호화시켜서 개인정보를 보호하도록 조치하고 있습니다. 이를 도와주는 것이 바로 SSL입니다.
SSL은 또한 웹 서버 인증, 서버 인증이라고 불리는데, 클라이언트와 서버 간의 통신을 제3자가 보증해주는 전자화된 문서입니다. 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서 정보를 전달합니다. 클라이언트는 이 인증서 정보가 신뢰할 수 있는 것인지를 검증한 후에 다음 절차를 수행하게 됩니다. SSL과 SSL 디지털 인증서를 이용했을 때의 이점은 아래와 같습니다.
- 통신 내용이 공격자에게 노출되는 것을 막을 수 있습니다.
- 클라이언트가 접속하려는 서버가 신뢰 할 수 있는 서버인지를 판단할 수 있습니다.
- 통신 내용의 악의적인 변경을 방지할 수 있습니다.
SSL이 작동되는 과정
1) [웹브라우저] SSL로 암호화된 페이지를 요청하게 됩니다. (일반적으로 https://가 사용됩니다.)
2) [웹서버] Public Key를 인증서와 함께 전송합니다.
3) [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA로부터 서명된 것인지, 날짜가 유효한지 확인합니다.
4) [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키를 비롯한 URL, http 데이터들을 암호화해서 전송합니다.
5) [웹서버] Private Key를 이용해서 랜덤 대칭 암ㅎ키와 URL, http 데이터를 복호화합니다.
6) [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서
브라우저로 전송합니다.
7) [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.
개인키/공개키(Private Key/Public Key)
- Private key/Public Key를 이용한 암호화는 하나의 키로 암호화하고 나머지 다른 하나로 복호화할 수 있도록 되어있다. 이해하기 어렵겠지만 필자를 믿어라. (역주:독자가 PKI(Public Key Infrastructure)에 대해서 잘 모른다면 이에 대한 간단한 문서를 읽어보기를 권한다) 앞에서 암호화한 키로만 암호화를 할 수 있는 것이 아니라 반대 방향으로 복호화한 키로도 암호화할 수도 있다.(당연히 앞에서 암호화한 키가 이번엔 복호화하는 키가 되는 것이다) 이러한 키쌍은 소수(prime number)로부터 생성되며, 그 길이(Bit 단위)는 암호화의 강도를 나타낸다.
- Private Key/Public Key는 이러한 키쌍을 관리하는 방법이다. 한개의 키는 안전한 장소에 자기만 알 수 있도록 보관하고(Private Key) 다른 하나는 모든 사람에게 퍼뜨리는 것(Public Key)이다. 그렇게 하면 그 사람들이 당신에게 메일을 보낼 때 암호화해서 보낼 수 있으며, 당신만이 그 암호를 풀 수 있다. 반대로 다른 사람에게 메일을 보낼 일이 있으면 Private Key를 이용해 암호화 할 수 있다. 그러면 그 사람들은 복호화해서 볼 수 있다. 그러나 이 방법은 모든 사람이 Public Key를 가지고 있어야 하기 때문에 그리 안전한 방법이 아니다. (역주:오히려 역효과를 일으킬 수 있다. 단순하게 메시지, 파일에 암호화, 서명을 할 생각이면 PGP나 GnuPG를 권한다)
인증서(Certificate) 정보의 종류
1) 인증서 소유자의 e-mail 주소
2) 소유자의 이름
3) 인증서의 용도
4) 인증서의 유효기간
5) 발행 장소
6) Distinguished Name (DN)
- Common Name (CN)
- 인증서 정보에 대해 서명한 사람의 디지털ID
7) Public Key
8) 해쉬(Hash)
SSL과 HTTPS
우리의 컨텐츠를 구글에 잘 보이게 하는게 필요합니다.
구글은 2017년 1우러 크롬을 56 버전으로 업데이트하고, http 페이지에서 아이디, 패스워드, 금용정보 등 개인정보를 입력받는 홈페이지에 접속할 경우 안전하지 않음이라는 경고를 띄우기 시작했습니다. 네이버, 다음 등 국내 포털 사이트를 크롬으로 접속하면 안전하지 않음이라는 경고가 뜬 이유가 바로 이것입니다.
구글은 사용자에게 투명한 정보를 제공하기 위해서 안전하지 않은 사이트(HTTP)의 콘텐츠를 보이지 않도록 했고, 컨텐츠 마케팅을 하는 사람들에겐 엄청난 영향을 주는 조치입니다. 즉 우리는 플랫폼을 이용하는 사람으로서 그들이 규칙에 따라가야 합니다. 만약 워드프레스를 사용하고 있다면 HTTPS를 사용해야 합니다.
SSL은 HTTPS를 제공하기 위한 보안 기술입니다.
Reference
https://wiki.kldp.org/HOWTO/html/SSL-Certificates-HOWTO/x70.html
'프로그래밍언어 > 프로그래밍 기초' 카테고리의 다른 글
[메모리 공간] 코드, 데이터, 힙, 스택 (0) | 2023.09.08 |
---|---|
[프로그래밍 기초] GET과 POST의 차이. (0) | 2020.06.05 |
[프로그래밍 기초] Session과 Cookie의 차이 (0) | 2020.06.05 |
[프로그래밍 기초] Math 클래스의 반올림, 올림, 내림 등등의 내장함수. (0) | 2020.05.23 |