Uncategorized

SSL 인증서와 웹 보안

안녕하세요 ?
오늘은 다보리 워드프레스 웹호스팅에서 아마존 웹서비스(AWS)의 AWS Certificate Manager 사용법과 – 무료 SSL/TLS 인증 서비스를 이용하는 방법에 본격적으로 들어가기전에 먼저 SSL과 SSL 인증서에 대하여 상세한 사전 지식을 알아보고 진행할 수 있도록 하겠습니다.

개인정보를 기반으로 웹서비스를 제공하는 사이트는 SSL 인증서 구축이 의무화
왜 SSL 을 워드프레스 쇼핑몰에서 언급하냐구요. 사실은 온라인 쇼핑몰을 운영하거나 개인정보를 기반으로 웹서비스를 제공하는 사이트는 SSL 인증서 구축이 의무화 되어 있기 때문입니다. 그 근거는 정보통신망 이용촉진 및 정보보호 등에 관한 법률(보통 ‘정보통신망법’이라고 함) 제 28조에 있습니다.
​제 1항에서 정보통신서비스 제공자(쇼핑몰, 콘텐츠 제공사이트 등 웹사이트를 통한 서비스 제공자) 등이 개인정보를 처리할 때 개인정보의 보호조치(기술적 관리적 조치)를 규정하고 있습니다. 그 중 하나가 제 4목에 개인정보를 안전하게 저장전송할 수 있는 암호화기술 등을 이용한 보안조치입니다. ​여기서 말하는 안전하게 저장 전송을 위한 암호화 기술 중 하나가 바로 SSL 인증서를 통한 암호화입니다.
SSL 인증서란
우리는 웹브라우저 주소 창에 https://www.google.com 형태처럼 보이는 녹색 열쇠 표시를 다른 여러 웹사이트에서도 볼 수 있습니다. 그러면 웹 브라우저 주소창에 왜 녹색 열쇠를 표시할까요? SSL/TLS 인증서로 알려진 디지털 인증 파일이 있기 때문입니다. 이것은 고객과 웹 사이트 간에 인증과 신뢰를 제공하기 위한 전자 문서입니다. 표면적으로는 단순하지만 그 이면에는 복잡한 구조인 기술이 있습니다! 웹 브라우저에 열쇠 아이콘이 있으면, 웹 사이트 데이터 전송 자체가 암호화되어 있다는 것을 보여줍니다. 즉 https 로 시작하는 웹사이트는 SSL은 Secure Sockets Layer 인증이 되어 있다는 것을 의미하며 이 것은 웹 브라우저와 웹 서버 사이에 암호화된 통신을 구현하는 글로벌 표준 보안 기술입니다. 이를 통하여 웹사이트와 개인들의 중요정보(예: 신용카드 번호, 사용자이름, 암호, 이메일 등)가 해커에 의해 도용되거나 삭제되는 위험을 줄이고 해킹를 파악하는 데 사용하고 있습니다. 요약하자면, SSL은 두 의도된 당사자들만의 사적인 “대화”를 가능하게 해 줍니다.
SSL/TLS는 중요한 정보를 교환 할 때마다 필요합니다. 예를 들어, 사이트가 PCI-DSS, FISMA과 같이 규정 준수를 해야 하는 경우 혹은 의료 데이터 전송을 위한 HIPAA 규정에서도 SSL/TLS를 이용하도록 하고 있습니다.
SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들어 졌습니다.. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명합니다.
[웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)
[웹서버] Public Key를 인증서와 함께 전송한다.
[웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.
[웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다.
[웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.
[웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.
[웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.
전문 용어라서 좀 복잡하지만 위의 내용은 웹브라우저 웹서버간에 주고 받는 정보를 Public Key와 Private Key를 이용하여 암호화된 정보로 송수신함으로써 중간에 네트워크 중간에서 해커가 정보를 탈취하더라도 사용할 수 없도록 하자는 것이 작동 원리 입니다.
개인키/공개키(Private Key/Public Key)
Private key/Public Key를 이용한 암호화는 하나의 키로 암호화하고 나머지 다른 하나로 복호화할 수 있도록 되어있습니다. 암호화한 키로만 암호화를 할 수 있는 것이 아니라 반대 방향으로 복호화한 키로도 암호화할 수도 있다. 이러한 키쌍은 소수(prime number)로부터 생성되며, 그 길이(Bit 단위)는 암호화의 강도를 나타냅니다. Private Key/Public Key는 이러한 키쌍을 관리하는 방법으로 한개의 키는 안전한 장소에 자기만 알 수 있도록 보관하고(Private Key) 다른 하나는 모든 사람에게 퍼뜨리는 것(Public Key)이다. 그렇게 하면 그 사람들이 당신에게 메일을 보낼 때 암호화해서 보낼 수 있으며, 보낸 쪽에서만 그 암호를 Private Key를 이용하여 풀 수 있다.
인증서(Certificate)
사용자가 접속을 한 웹 사이트가 믿을 수 있는지 어떻게 판단하기 위해서 해당 사이트의 인증서를 확인하는 방법으로 진행됩니다. 이것은 공적으로 인증할 만한 기관에서 인증서를 웹사이트에 설치하여 신뢰성을 보장하는 방법입니다.
인증서는 여러 부분으로 이루어져있으며 아래는 인증서 속에 들어있는 정보의 종류를 입니다.
1. 인증서 소유자의 e-mail 주소
2. 소유자의 이름
3. 인증서의 용도
4. 인증서 유효기간
5. 발행 장소
6. Distinguished Name (DN)
– Common Name (CN)
– 인증서 정보에 대해 서명한 사람의 디지털 ID
7. Public Key
8. 해쉬(Hash)
SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다는 것이다. 이것은 마치 트리(Tree)와 같은 구조를 이루면서 인증서끼리 서명하게 됩니다. 최상위 인증서에 대해서 이 인증서를 발행한 기관을 Root Certification Authority(줄여서 Root CA)라고 부르며, 유명한 인증 기관(역주:Verisign, Thawte, Entrust, etc)의 Root CA 인증서는 웹브라우저에 기본적으로 설치되어 있습니다. 이러한 인증 기관은 자신들이 서명한 인증서들을 관리할 뿐만 아니라 철회 인증서(Revoked Certificate)들도 관리하고 있으며 모든 Root CA 인증서는 자체 서명(Self Signed)되어 있습니다.
대칭키(The Symmetric key)
Private Key/Public Key 알고리즘은 정말 대단한 알고리즘이지만, 비실용적이라는 단점이 있습니다. 비대칭(Asymmetric)이란 하나의 키로 암호화를 하면 다른 키가 있어야 복호화를 해야 하기 때문에 속도의 문제가 발행합니다. 대안으로써 대칭키(Symmetric Key)는 하나의 키로 암호화/복호화를 할 수 있습니다. 대칭키를 사용하면 비대칭키보다 훨씬 빠르게 암호화/복호화를 할 수 있지만 너무 위험한 방법입니다.
만약 해커가 이 키를 탈취해 버리면 여태까지 암호화된 정보가 모두 무용지물이 되어버리게 됩니다. 일반적으로 사이트와 사이트간에 데이터를 주고 받은 인증키라는 것이 이 대칭키 방식으로 되어 있습니다. 이 대칭키는 서비스를 하는 웹사이트에서 복사해서 서비스 받는 웹사이트에 붙여넣고 저장하는 수작업을 거치는 경우가 대부분입니다. 이런 것에 대한 해결책은 대칭키를 비대칭키로 암호화시켜서 전송하는 방법을 사용하는데 이 경우 자신의 Private Key만 안전하게 관리하면 Public Key로 암호화되어 안전하게 전송할 수 있으며 대칭키를 하나의 접속 세션동안 매번 랜덤으로 생성하면 만약 해당 세션에서 대칭키가 누출되어도 다음세션에서는 다른 키가 사용되기 때문에 안전합니다.
암호화 알고리즘(Encryption Algorithm)
암호화 알고리즘은 대칭이든 비대칭이든 간에 상당히 많은 종류가 있으며 일반적으로 암호화 알고리즘으로 특허를 낼 수 없습니다.
이것은 웹서버와 브라우저가 서로 통신을 하는 동안 서로 어떤 알고리즘을 사용할 수 있는지 확인하며 서로 이해할 수 있는 일반적인 알고리즘을 선택한 후 통신이 이루어지게 된다. OpenSSL은 컴파일해서 삽입할 알고리즘을 택할 수 있으며 이 경우 해당 암호화 알고리즘에 제한을 걸고 있는 국가에서도 사용할 수 있게 됩니다.
해쉬(Hash)
해쉬값는 해쉬 함수에 의해 만들어지는 숫자로써 단방향으로 연산되는 함수입니다. 즉, 한번 해쉬함수로 원본으로부터 해쉬값을 생성했다면, 해쉬값으로부터 원본 메시지를 알아내는 것이 불가능하다. 해쉬의 용도는 단순히 원본 메시지가 손상이 되었는지를 알아내는데 있으며, 해쉬값을 변경시키지 않고 원본을 조작하는 것은 극히 어렵다. 그래서 해쉬 함수는 패스워드 메커니즘이외에도 소프트웨어의 손상 유무(MD5 sum) 확인, 메시지의 손상을 방지하기 위해 널리 쓰이고 있습니다.
서명(Signing)
서명은 특정 메시지를 내가 작성했다는 것을 인증하는 역할을 하며, Text가 될 수도 있고, 인증서 그 자체도 될 수 있습니다. 보내는 메시지에 서명하기 위해서는 아래의 순서를 따라야 한다.
1. 해쉬 생성
2. Private Key로 해쉬 암호화
3. 암호화된 해쉬와 서명된 인증서를 메시지에 추가
4. 받는 사람은 따로 해쉬를 생성
5. 받은 메시지에 포함된 해쉬를 Public Key를 이용해서 복호화
4, 5번 과정에서 생성된 해쉬를 비교
암호문(Pass Phrase)
암호문(Pass Phrase)은 기존의 패스워드(Password)를 확장한 시스템으로 예전의 Unix 시스템의 암호(Password)는 8자가 한계였습니다. 암호문이라는 것은 단순히 암호의 한계가 더 길어졌다는 것을 뜻합니다. 당연히 8자가 한계인 것보다 보안이 강력하며 최근의 Unix 시스템은 MD5를 사용하고 있기 때문에 암호의 길이 제한이 없어졌습니다.
다음 블로그에서는 아마존 웹서비스(AWS)의 AWS Certificate Manager 사용법과 – 무료 SSL/TLS 인증 서비스를 이용하는 방법을 알아보도록 하겠습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *