차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
tech:ssl [2014/03/18 17:37] – 바깥 편집 127.0.0.1 | tech:ssl [2018/01/31 01:49] (현재) – V_L | ||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ======Ssl====== | + | {{tag> |
+ | ======SSL====== | ||
+ | |||
+ | SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다. ([[http:// | ||
- | 1.3. SSL이란 무엇이며 인증서(Certificate)란 무엇인가? | + | - [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https 가 사용된다) |
+ | - [웹서버] Public Key를 인증서와 함께 전송한다. | ||
+ | - [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주: | ||
+ | - [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다. | ||
+ | - [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다. | ||
+ | - [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다. | ||
+ | - [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, | ||
- | SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다. | ||
- | [웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https:\\ 가 사용된다) | + | =====개념===== |
+ | 간단한 개념 정도는 알아두어야 할 것이다. | ||
- | [웹서버] Public Key를 인증서와 함께 전송한다. | ||
- | [웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주: | + | ====개인키/ |
- | + | ||
- | [웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다. | + | |
- | + | ||
- | [웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다. | + | |
- | + | ||
- | [웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다. | + | |
- | + | ||
- | [웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, | + | |
- | + | ||
- | 여기서 간단한 개념 정도는 알아두어야 할 것이다. | + | |
- | + | ||
- | 1.3.1. | + | |
Private key/Public Key를 이용한 암호화는 하나의 키로 암호화하고 나머지 다른 하나로 복호화할 수 있도록 되어있다. 이해하기 어렵겠지만 필자를 믿어라. (역주: | Private key/Public Key를 이용한 암호화는 하나의 키로 암호화하고 나머지 다른 하나로 복호화할 수 있도록 되어있다. 이해하기 어렵겠지만 필자를 믿어라. (역주: | ||
줄 29: | 줄 25: | ||
Private Key/Public Key는 이러한 키쌍을 관리하는 방법이다. 한개의 키는 안전한 장소에 자기만 알 수 있도록 보관하고(Private Key) 다른 하나는 모든 사람에게 퍼뜨리는 것(Public Key)이다. 그렇게 하면 그 사람들이 당신에게 메일을 보낼 때 암호화해서 보낼 수 있으며, 당신만이 그 암호를 풀 수 있다. 반대로 다른 사람에게 메일을 보낼 일이 있으면 Private Key를 이용해 암호화 할 수 있다. 그러면 그 사람들은 복호화해서 볼 수 있다. 그러나 이 방법은 모든 사람이 Public Key를 가지고 있어야 하기 때문에 그리 안전한 방법이 아니다. (역주: | Private Key/Public Key는 이러한 키쌍을 관리하는 방법이다. 한개의 키는 안전한 장소에 자기만 알 수 있도록 보관하고(Private Key) 다른 하나는 모든 사람에게 퍼뜨리는 것(Public Key)이다. 그렇게 하면 그 사람들이 당신에게 메일을 보낼 때 암호화해서 보낼 수 있으며, 당신만이 그 암호를 풀 수 있다. 반대로 다른 사람에게 메일을 보낼 일이 있으면 Private Key를 이용해 암호화 할 수 있다. 그러면 그 사람들은 복호화해서 볼 수 있다. 그러나 이 방법은 모든 사람이 Public Key를 가지고 있어야 하기 때문에 그리 안전한 방법이 아니다. (역주: | ||
- | 1.3.2. | + | ==== 인증서(Certificate)==== |
당신과 접속해있는 사람이나 웹 사이트가 믿을 수 있는지 어떻게 판단할 수 있을까? 한 웹사이트 관리자가 있다고 가정하자. 그 사람이 당신에게 이 사이트가 믿을만하다고 (심각할 정도로) 열심히 설명했다. 당신이 그 사이트의 인증서를 설치해 주기를 바라면서 말이다. 한두번도 아니고 매번 이렇게 해야한다면 귀찮지 않겠는가? | 당신과 접속해있는 사람이나 웹 사이트가 믿을 수 있는지 어떻게 판단할 수 있을까? 한 웹사이트 관리자가 있다고 가정하자. 그 사람이 당신에게 이 사이트가 믿을만하다고 (심각할 정도로) 열심히 설명했다. 당신이 그 사이트의 인증서를 설치해 주기를 바라면서 말이다. 한두번도 아니고 매번 이렇게 해야한다면 귀찮지 않겠는가? | ||
줄 35: | 줄 31: | ||
인증서는 여러 부분으로 이루어져있다. 아래는 인증서 속에 들어있는 정보의 종류를 나타낸 것이다. | 인증서는 여러 부분으로 이루어져있다. 아래는 인증서 속에 들어있는 정보의 종류를 나타낸 것이다. | ||
- | 인증서 소유자의 e-mail 주소 | + | * 인증서 소유자의 e-mail 주소 |
- | + | | |
- | 소유자의 이름 | + | |
- | + | | |
- | 인증서의 용도 | + | |
- | + | | |
- | 인증서 유효기간 | + | - Common Name (CN) |
- | + | - 인증서 정보에 대해 서명한 사람의 디지털 ID | |
- | 발행 장소 | + | |
- | + | | |
- | Distinguished Name (DN) | + | |
- | + | ||
- | - Common Name (CN) | + | |
- | + | ||
- | - 인증서 정보에 대해 서명한 사람의 디지털 ID | + | |
- | + | ||
- | Public Key | + | |
- | + | ||
- | 해쉬(Hash) | + | |
SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, | SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, | ||
- | 1.3.3. | + | ====대칭키(The Symmetric key):==== |
Private Key/Public Key 알고리즘은 정말 대단한 알고리즘이지만, | Private Key/Public Key 알고리즘은 정말 대단한 알고리즘이지만, | ||
줄 63: | 줄 50: | ||
만약 당신의 적이 키를 입수해 버리면 여태까지 암호화된 정보가 모두 무용지물이 되어버리게 된다. 그래서 대칭키 알고리즘을 사용한 키를 상대방에게 전송하려면 인터넷과 같은 통로는 너무나도 위험하기 때문에 직접 손으로 전달해야만 한다. 귀찮지 않은가? 해결책은 대칭키를 비대칭키로 암호화시켜서 전송하면 된다. (역주: | 만약 당신의 적이 키를 입수해 버리면 여태까지 암호화된 정보가 모두 무용지물이 되어버리게 된다. 그래서 대칭키 알고리즘을 사용한 키를 상대방에게 전송하려면 인터넷과 같은 통로는 너무나도 위험하기 때문에 직접 손으로 전달해야만 한다. 귀찮지 않은가? 해결책은 대칭키를 비대칭키로 암호화시켜서 전송하면 된다. (역주: | ||
- | 1.3.4. | + | ==== 암호화 알고리즘(Encryption Algorithm):==== |
암호화 알고리즘은 대칭이든 비대칭이든 간에 상당히 많은 종류가 있다. 일반적으로 암호화 알고리즘으로 특허를 낼 수 없다. 만약 Henri Paincare가 암호화 알고리즘으로 특허를 낸다면 Albert Einstein으로부터 고소당할 수 있는 것이다. 단, USA에서는 암호화 알고리즘으로 특허를 낼 수 있다.(역주: | 암호화 알고리즘은 대칭이든 비대칭이든 간에 상당히 많은 종류가 있다. 일반적으로 암호화 알고리즘으로 특허를 낼 수 없다. 만약 Henri Paincare가 암호화 알고리즘으로 특허를 낸다면 Albert Einstein으로부터 고소당할 수 있는 것이다. 단, USA에서는 암호화 알고리즘으로 특허를 낼 수 있다.(역주: | ||
줄 69: | 줄 56: | ||
실제로 알고리즘이 어떻게 사용되는지 살펴보자. 웹서버와 브라우저는 서로 통신을 하는 동안 서로 어떤 알고리즘을 사용할 수 있는지 확인하게 된다. 다음에 서로 이해할 수 있는 일반적인 알고리즘을 선택한 후 통신이 이루어지게 된다. OpenSSL은 컴파일해서 삽입할 알고리즘을 택할 수 있다. 그렇게 하면 암호화 알고리즘에 제한을 걸고 있는 국가에서도 사용할 수 있게 된다. | 실제로 알고리즘이 어떻게 사용되는지 살펴보자. 웹서버와 브라우저는 서로 통신을 하는 동안 서로 어떤 알고리즘을 사용할 수 있는지 확인하게 된다. 다음에 서로 이해할 수 있는 일반적인 알고리즘을 선택한 후 통신이 이루어지게 된다. OpenSSL은 컴파일해서 삽입할 알고리즘을 택할 수 있다. 그렇게 하면 암호화 알고리즘에 제한을 걸고 있는 국가에서도 사용할 수 있게 된다. | ||
- | 1.3.5. | + | ====해쉬(Hash): |
해쉬는 해쉬 함수에 의해 만들어지는 숫자다. 이 함수는 단방향으로 연산되는 함수다. 즉, 한번 해쉬함수로 원본으로부터 해쉬값을 생성했다면, | 해쉬는 해쉬 함수에 의해 만들어지는 숫자다. 이 함수는 단방향으로 연산되는 함수다. 즉, 한번 해쉬함수로 원본으로부터 해쉬값을 생성했다면, | ||
- | 1.3.6. | + | ====서명(Signing): |
서명은 특정 메시지를 내가 작성했다는 것을 인증하는 역할을 한다. Text가 될 수도 있고, 인증서 등등이 될 수 있다. 메시지에 서명하기 위해서는 아래의 순서를 따라야 한다. | 서명은 특정 메시지를 내가 작성했다는 것을 인증하는 역할을 한다. Text가 될 수도 있고, 인증서 등등이 될 수 있다. 메시지에 서명하기 위해서는 아래의 순서를 따라야 한다. | ||
- | 해쉬 생성 | + | - 해쉬 생성 |
+ | - Private Key로 해쉬 암호화 | ||
+ | - 암호화된 해쉬와 서명된 인증서를 메시지에 추가 | ||
+ | - 받는 사람은 따로 해쉬를 생성 | ||
+ | - 받은 메시지에 포함된 해쉬를 Public Key를 이용해서 복호화 | ||
+ | - 4, 5번 과정에서 생성된 해쉬를 비교 | ||
- | Private Key로 해쉬 암호화 | + | ==== 암호문(Pass Phrase):==== |
- | + | ||
- | 암호화된 해쉬와 서명된 인증서를 메시지에 추가 | + | |
- | + | ||
- | 받는 사람은 따로 해쉬를 생성 | + | |
- | + | ||
- | 받은 메시지에 포함된 해쉬를 Public Key를 이용해서 복호화 | + | |
- | + | ||
- | 4, 5번 과정에서 생성된 해쉬를 비교 | + | |
- | + | ||
- | 1.3.7. | + | |
암호문(Pass Phrase)은 기존의 패스워드(Password)를 확장한 시스템이다. 예전의 Unix 시스템의 암호(Password)는 8자가 한계였다. 암호문이라는 것은 단순히 암호의 한계가 더 길어졌다는 것을 뜻한다. 당연히 8자가 한계인 것보다 보안이 강력하다. 최근의 Unix 시스템은 MD5를 사용하고 있기 때문에 암호의 길이 제한이 없어졌다. | 암호문(Pass Phrase)은 기존의 패스워드(Password)를 확장한 시스템이다. 예전의 Unix 시스템의 암호(Password)는 8자가 한계였다. 암호문이라는 것은 단순히 암호의 한계가 더 길어졌다는 것을 뜻한다. 당연히 8자가 한계인 것보다 보안이 강력하다. 최근의 Unix 시스템은 MD5를 사용하고 있기 때문에 암호의 길이 제한이 없어졌다. | ||
줄 96: | 줄 78: | ||
- | 1.4. S/Mime은 무엇을 뜻하며, 그 외 다른 프로토콜은 무엇이 있는가? | + | =====S/Mime===== |
SSL이 웹의 기능을 확장하기 위해 생겨났다면, | SSL이 웹의 기능을 확장하기 위해 생겨났다면, | ||
줄 103: | 줄 86: | ||
=====SSL 보안 인증서 무료로 발급===== | =====SSL 보안 인증서 무료로 발급===== | ||
+ | [[tech: | ||
+ | | ||
- | 아시는 분들은 아시겠지만 http:// | ||
- | 받는 방법은 조금 까다로워서 여기에 설명하기는 좀 그런데 | ||
- | 관심있으신 분들은 찾아보면 좋을 것 같네요 | ||
+ | |||
- | * 출처: [[http:// | ||
- | * mynet.co.kr/ | ||
- | |||
- | ^ 누구나 수정하실 수 있습니다. | ||
- | |||
- | {{tag> |