김정수
v 2.6 18 December 2000 번역: v 1.3 12 April 2001
Netscape(IMAP)와 Outlook(IMAP 과 POP3)는 메일서버에 암호화된 접속(SSL)을 지원한다.
만일 IMAP서버가 이런 종류의 접속을 지원하지 않는다면 부분적인 해결책은 SSL wrapper를 쓰는 것이다.
여러가지가 많이 있지만, 나는 stunnel을 쓴다.
첫번째 일은 OpenSSL을 설치하는 것이다.
tar 파일을 /usr/local 에 푼다.
다음과 같은 간단한 절차를 따르라(openssl-0.9.6a 기준이다).
$ ./config
$ make
$ make test
$ make install
|
주의: 이 절차들은 .infn.it에만 해당되는 것이다.
srv.cnf 를
/usr/local/ssl/lib/ 에 복사한다(주: 이것은 지은이의 지역적 설정으로
OpenSSL의 초기 설정 파일인 /usr/local/ssl/openssl.cnf 을 이용하는것이 일반적 경우다.).
인증서 요청을 생성한다.
> cd /usr/local/ssl/certs
> /usr/local/ssl/bin/openssl req -new -nodes -out req.pem \
-keyout key.pem -config /usr/local/ssl/lib/srv.cnf
Using configuration from /usr/local/ssl/lib/srv.cnf
Generating a 1024 bit RSA private key
.......................+++++
.........................+++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called
a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
%이제 당신의 인증서 요청(certificate request)에 기록될 정보를 물어볼 때이다.
%입력될 것은 구별되는 이름(Distinguished Name) 이나 DN으로 부른다.
%당신이 입력할 항목은 몇개 되지 않으며, 기본값을 취할때는 빈칸으로 대신할수 있다.
%만일 당신이 '.'를 입력한다면, 그 항목은 공백으로 남을것이다.
Country Name (2 letter code) [IT]: %2-문자 국가코드
INFN (accettare il default!) [INFN]: %도메인명 같은데요?
Locality Name (p.e. Firenze) []:Firenze %지역명
Organization Name (p.e. Sezione di Firenze) []:Sezione di Firenze %기관명
Server type [Server IMAP]: %서버타입
Server name (p.e. postino.fi.infn.it) []:postino.fi.infn.it %서버이름
Email Address []:cecchini@fi.infn.it
> chmod 600 key.pem
|
key.pem 은 서버 비밀키(private key)를 평문으로 담고 있다!
req.pem 을 인증서를 보내줄 CA로 보낸다(참고: 자필 서명 인증서 생성: 서정룡님의 번역중 일부).
(에디터를 이용하여) /usr/local/ssl/certs/stunnel.pem 를 작성하는데, 이는 서버 비밀키와 서버 인증서를
담고 있다. 하나의 빈 줄을 두 부분 사이에 삽입하고, 또하나의 빈줄을 파일 가장 밑에다 삽입하라.
역자주: 실제적으로 한줄이 별도로 첨가되지 않아도 잘 동작하였다. 따라서 지은이의 의도는 각 부분이 끝나고 다음줄로 넘어가라는 뜻으로 받아들이면 되겠다. 다음은 stunnel.pem의 내용의 예이다.
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDHkqs4YDbakYxRkYXIpY7xLXDQwULR5LW7xWVzuWmmZJOtzwlP % 서버 비밀키 부분
7mN87g+aaiQzwXUVndaCw3Zm6cOG4mytf20jPZq0tvWnjEB3763sorpfpOe/4Vsn %
VBFjyQY6YdqYXNmjmzff5gTAecEXOcJ8CrPsaK+nkhw7bHUHX2X+97oMNQIDAQAB
AoGBAMd3YkZAc9LUsig8iDhYsJuAzUb4Qi7Cppj73EBjyqKR18BaM3Z+T1VoIpQ1
DeXkr39heCrN7aNCdTh1SiXGPG6+fkGj9HVw7LmjwXclp4UZwWp3fVbSAWfe3VRe
LM/6p65qogEYuBRMhbSmsn9rBgz3tYVU0lDMZvWxQmUWWg7BAkEA6EbMJeCVdAYu
nQsjwf4vhsHJTChKv/He6kT93Yr/rvq5ihIAPQK/hwcmWf05P9F6bdrA6JTOm3xu
TvJsT/rIvQJBANv0yczI5pUQszw4s+LTzH+kZSb6asWp316BAMDedX+7ID4HaeKk
e4JnBK//xHKVP7xmHuioKYtRlsnuHpWVtNkCQQDPru2+OE6pTRXEqT8xp3sLPJ4m
ECi18yfjxAhRXIU9CUV4ZJv98UUbEJOEBtx3aW/UZbHyw4rwj5N511xtLsjpAkA9
p1XRYxbO/clfvf0ePYP621fHHzZChaUo1jwh07lXvloBSQ6zCqvcF4hG1Qh5ncAp
zO4pBMnwVURRAb/s6fOxAkADv2Tilu1asafmqVzpnRsdfBZx2Xt4oPtquR9IN0Q1
ewRxOC13KZwoAWtkS7l0mY19WD27onF6iAaF7beuK/Va
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIECTCCA3KgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBujELMAkGA1UEBhMCVVMx % 인증서 부분
EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1NlYXR0bGUxHzAdBgNVBAoT %
FkJsdXJkeWJsb29wIEluZHVzdHJpZXMxFjAUBgNVBAsTDUlTIERlcGFydG1lbnQx
ITAfBgNVBAMTGEJvbWJhc3RpYyBULiBCbHVyZHlibG9vcDEoMCYGCSqGSIb3DQEJ
ARYZYm9tYmFzdGljQGJsdXJkeWJsb29wLmNvbTAeFw0wMDA2MDYwMDUxMTRaFw0x
MDA2MDQwMDUxMTRaMIG6MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
bjEQMA4GA1UEBxMHU2VhdHRsZTEfMB0GA1UEChMWQmx1cmR5Ymxvb3AgSW5kdXN0
cmllczEWMBQGA1UECxMNSVMgRGVwYXJ0bWVudDEhMB8GA1UEAxMYQm9tYmFzdGlj
IFQuIEJsdXJkeWJsb29wMSgwJgYJKoZIhvcNAQkBFhlib21iYXN0aWNAYmx1cmR5
Ymxvb3AuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHkqs4YDbakYxR
kYXIpY7xLXDQwULR5LW7xWVzuWmmZJOtzwlP7mN87g+aaiQzwXUVndaCw3Zm6cOG
4mytf20jPZq0tvWnjEB3763sorpfpOe/4VsnVBFjyQY6YdqYXNmjmzff5gTAecEX
OcJ8CrPsaK+nkhw7bHUHX2X+97oMNQIDAQABo4IBGzCCARcwHQYDVR0OBBYEFD+g
lcPrnpsSvIdkm/eol4sYYg09MIHnBgNVHSMEgd8wgdyAFD+glcPrnpsSvIdkm/eo
l4sYYg09oYHApIG9MIG6MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
bjEQMA4GA1UEBxMHU2VhdHRsZTEfMB0GA1UEChMWQmx1cmR5Ymxvb3AgSW5kdXN0
cmllczEWMBQGA1UECxMNSVMgRGVwYXJ0bWVudDEhMB8GA1UEAxMYQm9tYmFzdGlj
IFQuIEJsdXJkeWJsb29wMSgwJgYJKoZIhvcNAQkBFhlib21iYXN0aWNAYmx1cmR5
Ymxvb3AuY29tggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAwEEk
JXpVXVaFTuG2VJGIzPOxQ+X3V1Cl86y4gM1bDbqlilOUdByUEG4YfSb8ILIn+eXk
WzMAw63Ww5t0/jkO5JRs6i1SUt0Oy80DryNRJYLBVBi499WEduro8GCVD8HuSkDC
yL1Rdq8qlNhWPsggcbhuhvpbEz4pAfzPkrWMBn4=
-----END CERTIFICATE-----
|
req.pem 과 key.pem 을 삭제하고, stunnel.pem 을 보호하라 (chmod 600). 지금 이 파일은 서버 비밀키를 평문으로 담고 있다.
다음과 같이 간단한 절차를 따른다(stunnel-3.14 기준).
$ ./configure
$ make
$ make install
|
stunnel을 데몬으로서 작동할 것을 권한다. 부트시에 다음 명령들을 이용한다.
(두번째 명령은 오직 POP3 연결이 필요할 때만 이용한다.)
stunnel -d 993 -p /usr/local/ssl/certs/stunnel.pem -r localhost:imap
stunnel -d 995 -p /usr/local/ssl/certs/stunnel.pem -r localhost:pop
|
역자주: 여기서 -d 옵션과 -r옵션이 병행하는 것을 주의해 볼 필요가 있다. -d 옵션은 주어진 포트에 대하여 데몬모드로 작동하라는 뜻인데
예를 들어 POP3에서는 995번 포트를 감시하다가, SSL접속이 되면 그 내용을 복호화하여 pop3포트로 포워딩한다. 이 방법의 경우 반드시 상응하는 데몬도 같이 작동하고 있어야 하며 - 포워딩할 포트가 있어야 한다 -
모든 사용자가, SSL을 이용한 접속을 한다는 가정이 없기 때문에 그다지 효과적이지 못하다. 여기서 -l옵션을 이용한 두번째 방법을 생각해 본다.
stunnel -d 993 -p /usr/local/ssl/certs/stunnel.pem -l /usr/sbin/imapd
stunnel -d 995 -p /usr/local/ssl/certs/stunnel.pem -l /usr/sbin/ipop3d
stunnel -d 995 -p /usr/local/ssl/certs/stunnel.pem -l /usr/local/lib/popper -- popper qpopper -s
|
이것은 주어진 포트를 감시하다가 접속되면, 그 내용을 복호화하여 -l 이 지정한 프로그램에 넘기라는 뜻이다. 여기서는 포워딩할 포트가 따로 필요없어 앞의 방법보다 효과적이다.
Qualcomm사의 qpopper처럼 실행할 프로그램이 옵션이 필요한 경우 3번째 예제처럼 -- 뒤에 옵션을 준 완전한 형태로 쓰면 된다.
-L 옵션도 존재하는데, 차이점은 -l 옵션은 inetd 타입의 프로그램(ipop3d등)을 실행할때 사용되는 특별한 경우를 뜻한다. -L옵션의 경우 local pty를 열고 프로그램을 실행한다.
SSL을 지원하는 클라이언트(Netscape Messanger, Outlook, Pine etc)들에 대해서 오직 해 주어야 할 일은 그것들이 보안
접속(Secure connection)을 할 수 있도록 설정을 해 주는 것이다.
역자주: Netscape Messanger는 (v4.75까지)서버에 POP3접속시 SSL을 지원하지 않는다(설정의 SSL은 보내는 메일 서버의 설정이다).
여기서는 브라우저들이 서버 인증서를 발급한 CA의 인증서를 포함하는가의 여부는 꼭 필요하지 않다. 물론 서버 인증서를
포함한다면 더 좋다.
SSL을 지원하지 않는 메일 클라이언트들에 대해서는 다음과 같이 설정한다.
stunnel을 클라이언트에 설치한다.
만일 당신이 서버 인증서(옵션이지만, 권한다)를 확인하기를 원한다면 서버 CA 인증서를 /usr/local/ssl/certs/CAcert.pem
에 복사한다. 그리고
> cd /usr/local/ssl/certs/
> ln -s CAcert.pem `/usr/local/ssl/bin/openssl x509 \ -noout -hash < CAcert.pem`.0
|
다음 명령으로 stunnel을 구동한다(통상적으로 시스템을 구동할때이다).
> stunnel -c -v 2 -d 143 -r imap_server:993
> stunnel -c -v 2 -d 110 -r pop3_server:995
|
여기서 -v 2 옵션은 2번(서버 인증서 확인시)에만 해당된다.
역자주: -c는 클라이언트 모드를 나타낸다. 클라이언트 모드에서는 -d 와 -r에 할당되는 포트 번호가
서버의 경우와 반대임을 볼 수 있다. -d 에서 할당된 포트에서 나오는 내용을 암호화하여 -r로 할당된 포트로 포워딩한후 서버와 통신을 한다고 이해하면 되겠다.
e-mail클라이언트가 imap(또는 pop3) 포트를 확인할 수 있도록 설정하라.
SSL을 지원하는 클라이언트(예: Netscape Messanger, Outlook, Pine)들에 대해서 오직 해 주어야 할 일은 그것들이 보안
접속(Secure connection)을 할 수 있도록 설정을 해 주는 것이다.
역자주: Netscape Messanger는 (v4.75까지)서버에 pop3접속시 SSL을 지원하지 않는다(설정의 SSL은 보내는 메일 서버의 설정이다). Outlook Express 5는 서버에 POP3접속시 SSL을 지원한다.
여기서는 브라우저들이 서버 인증서를 발급한 CA의 인증서를 포함하는가의 여부는 꼭 필요하지 않다. 물론 서버 인증서를
포함한다면 더 좋다.
SSL을 지원하지 않는 메일 클라이언트들에 대해서는 다음과 같이 설정한다.
stunnel을 클라이언트에 설치한다.
winstun.zip 을 다운로드한다.
ssleay32.dll, libeay32.dll, stunnel.exe 을 같은 디렉토리에 푼다(원한다면 dll파일들은 \windows\system으로 옮겨도
된다).
stunnel을 다음 명령을 이용하여 실행하여라.
stunnel -c -d 143 -r imap_server:993
stunnel -c -d 110 -r pop3_server:995
|
e-mail클라이언트가 imap(또는 pop3) 포트를 확인할 수 있도록 설정하라.