윈디하나의 솔라나라: OpenSSL
- 분류: 어플리케이션
- 문서정보: OpenSSL의 설치방법과 실행에 대해 설명
- 업데이트: 2009-06-15
- 이 문서는 윈디하나의 솔라나라, http://www.solanara.net/에서 최근에 갱신된 문서를 찾을 수 있다.
목차
개요OpenSSL 설치
소스 설치
번들 사용
패키지 설치
OpenSSL 인증서 만들기
Root CA가 되기
정리
개요
- OpenSSL은 보안 향상을 위해 사용된다. 그러나 OpenSSL에는 아직 버그가 존재하기 때문에, 수시로 OpenSSL의 버전을 확인해 업데이트 해주어야 한다.
- SSL은 주로 패킷 스나이핑과 IP스푸핑으로 인한 피해를 줄여줄 뿐이다. 그 이상은 안된다. 만능이 아니다! SSL 설치하고 '보안은 끝'이라고 생각하는 것은 오산일 뿐이다. [SSL을 설치했는데 왜 해킹을 당했나요?]라는 질문은 참 바보같은 질문이다. (실제로 받아본 질문이다) 해킹에는 수십~수백가지 방법이 있으며, SSL은 그중 하나인 패킷 스나이핑을 무력화할 뿐이다. (패킷스나이핑이 되지 않도록 하는게 아니라, 스나이핑 해봤자 내용이 암호화되어있어 무슨 내용인지 알 수 없도록 만드는 것이다)
- SSL의 단점? 한가지있다. 느리다는 것이다. 느려도 너무 느리다. 패킷의 인코딩/디코딩에 많은 CPU자원을 소모하기 때문이다. 필자는 이런 서버에는 과감히 다음과 같이 말한다. [서버 업그레이드 할거 아니면 SSL 쓰지마세요] 패킷 암호화를 하지 않아도 보안을 향상시킬 수 있는 다른 방법도 많다.
- OpenSSL의 소스가 공개되어있다고 해서 '무료'인것은 아니다. OpenSSL의 많은 알고리즘은 저작권이 있고, 특허가 취득되어 있다. 만약 OpenSSL의 특정 알고리즘을 사용하려면 사용하기 전에 법률가와 상의 하는것이 좋다. [./config no-idea no-mdc2 no-rc5]와 같이 저작권 문제가 될만한 알고리즘은 아예 사용 안하도록 설정하는 것도 하나의 방법이다. 자세한 사항은 README 파일의 PATENTS 섹션을 참고하자.
- 공식 홈페이지
OpenSSL 설치
아래의 세가지 방법중 어떤것을 사용해도 된다. 솔라나라는 첫번째에 있는 소스 설치방법을 따랐다.-
소스 설치
root@wl ~ # wget http://www.openssl.org/source/openssl-0.9.8k.tar.gz root@wl ~ # tar xvfz openssl-0.9.8k.tar.gz root@wl ~ # cd openssl-0.9.8k root@wl ~/openssl-0.9.8k # ./config shared 메시지 생략 Configured for solaris-x86-cc. root@wl ~/openssl-0.9.8k # make 메시지 생략 making all in tools... root@wl ~/openssl-0.9.8k # make test 1) 메시지 생략 compiler: cc -KPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -fast -O -Xa OPENSSLDIR: "/usr/local/ssl" `test' is up to date. root@wl ~/openssl-0.9.8k # make install 메시지 생략 chmod 644 /usr/local/ssl/lib/pkgconfig/openssl.pc root@wl ~/openssl-0.9.8k # # 환경 설정 root@wl ~ # vi /etc/profile # for OpenSSL located at /usr/local/ssl if [ -d /usr/local/ssl ] then PATH=$PATH:/usr/local/ssl/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib fi
1) OpenSSL은 반드시 테스트를 하자. 흔하지는 않지만 gcc, cc의 버그로 인해 테스트에 실패하는 경우가 있다. 이런경우 패치를 하거나, gcc, cc, openssl 버전을 낮추거나 gcc, cc의 옵티마이징을 꺼야 한다. [compiler: cc ...] 부분은 시스템마다 다를 수 있다. -
번들 사용
# 솔라리스 10에 0.9.7d 이 설치되어있다. 경로만 걸어준다. root@wl ~ # cd /usr/local/bin root@wl /usr/local/bin # ln -s /usr/sfw/bin/openssl openssl
-
패키지 설치
root@wl ~ # wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.4.6-sol10-x86-local.gz root@wl ~ # gunzip libgcc-3.4.6-sol10-x86-local.gz root@wl ~ # pkgadd -d libgcc-3.4.6-sol10-x86-local root@wl ~ # wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/openssl-0.9.8h-sol10-x86-local.gz root@wl ~ # gunzip openssl-0.9.8h-sol10-x86-local.gz root@wl ~ # pkgadd -d openssl-0.9.8h-sol10-x86-local
OpenSSL 인증서 만들기
root@wl ~ # cd /usr/local/ssl/certs root@wl /usr/local/ssl/certs # openssl req -newkey rsa:2048 -nodes -out req.pem -keyout req.key 1) Generating a 2048 bit RSA private key .......++++++ .......++++++ writing new private key to '/usr/local/ssl/certs/root.cert' ----- 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. ----- Country Name (2 letter code) [AU]:KR State or Province Name (full name) [Some-State]:GyungGiDo Locality Name (eg, city) []:Suwon Organization Name (eg, company) [Internet Widgits Pty Ltd]:Solanara Organizational Unit Name (eg, section) []:SolanaraTeam Common Name (eg, YOUR name) []:*.solanara.net 2) Email Address []:admin@solanara.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: root@wl /usr/local/ssl/certs # ls -alF 3)1) OpenSSL 버전이 낮으면 [-newkey rsa:2048]에서 오류가 난다. [-new]로 대체한다.
2) Apache 설정파일인 httpd.conf의 ServerName에 들어갈 값을 적어준다. 아파치는 이부분을 검사한다. www.solanara.net 과 같이 전체를 다 써줘도 되고, 위와 같이 '별표'를 사용할 수 있으며, 192.186.0.1과 같이 IP를 써도 된다. 다른 내용을 쓰면 인증을 다시 받아야 하는 불상사가 생길 수 있다. 유료 루트 인증기관에 보내기 전에 반드시 확인해야 한다.
3) 총 2개의 파일이 생성되었다. req.key는 공개키로, 유출되지 않고 잃어버리지 않도록 보관해야한다. req.pem (certificate signing request)파일은 CA(Certification Authority=인증기관, 예: 베리사인, 타우트)에게 보내 인증 받아야 한다.
Root CA가 되기
CA에서 인증 받으려면 비용이 들기 때문에 테스트용으로는 자신이 CA가 될 필요가 있다. 그런데 CA가 되려면 Root CA(최상위 인증 기관)의 인증이 필요하다. 그리고 그 인증을 받기 위해서는 비용이 든다. 따라서 여기서는 Root CA가 되는 방법을 소개한다. Root CA도 CA중 하나이므로 CA가 하는 일을 모두 할 수 있다.root@wl /usr/local/ssl/certs # openssl genrsa -des3 -out ca.key 2048 1) Generating RSA private key, 2048 bit long modulus ............................++++++ ............++++++ e is 65537 (0x10001) Enter pass phrase for ca.key:***** Verifying - Enter pass phrase for ca.key: ***** root@wl /usr/local/ssl/certs # openssl req -new -x509 -days 365 -key ca.key -out ca.crt 2) Enter pass phrase for ca.key: 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. ----- Country Name (2 letter code) [AU]:KR State or Province Name (full name) [Some-State]:GyungGiDo Locality Name (eg, city) []:Suwon Organization Name (eg, company) [Internet Widgits Pty Ltd]:Solanara Organizational Unit Name (eg, section) []:SolanaraTeam Common Name (eg, YOUR name) []:Solanara CA Email Address []:admin@solanara.net root@wl /usr/local/ssl/certs # openssl x509 -req -CA ca.crt -CAkey ca.key -days 365 -in req.pem -out signed-req.pem -CAcreateserial 3) Signature ok subject=/C=KR/ST=GyungGiDo/L=Suwon/O=Solanara/OU=SolanaraTeam/CN=wl.solanara.net/emailAddress=admin@solanara.net Getting CA Private Key Enter pass phrase for ca.key:***** root@wl /usr/local/ssl/certs # chmod 600 * root@wl /usr/local/ssl/certs # ls -alF 4) 총 18 drwxr-xr-x 2 root bin 512 10월 26일 13:44 ./ drwxr-xr-x 10 root bin 512 10월 26일 13:40 ../ -rw------- 1 root other 1671 4월 8일 11:27 ca.crt -rw------- 1 root other 1751 4월 8일 11:26 ca.key -rw------- 1 root other 17 4월 8일 11:49 ca.srl -rw------- 1 root other 1679 4월 8일 11:48 req.key -rw------- 1 root other 1074 4월 8일 11:48 req.pem -rw------- 1 root other 1330 4월 8일 11:49 signed-req.pem root@wl /usr/local/ssl/certs #1) Root CA의 2048bit private key 파일을 만든다. 결과 파일은 ca.key 이다.
2) 인증서를 만든다. 결과파일은 ca.crt파일이다. ca.crt를 Internet Explorer에 등록해주면 '올바르지 않은 CA'라는 에러메시지를 없앨 수 있다.
3) 이제 Root CA가 되는 일은 끝났다. 클라이언트가 요청한 req.pem을 싸인해주자. 결과파일은 signed-req.pem이다. 베리싸인과 같은 인증 기관은 이 명령 한줄만 실행 해주면 된다. (그러면서 도대체 얼마를 받는거야... ㅡ,.ㅡ)
4) ca.key와 req.key는 소중하게 보관해야 한다. 절대 외부에 유출되서는 안된다.
※ 아파치를 포함한 유닉스 데몬에서 SSL을 사용할 때 사용하는 필수 정보는, req.key와 signed-req.pem 파일에 저장되어있다. 몇몇 데몬은 ca.crt의 내용까지 요구하는 경우도 있다. (형태가 파일인 경우가 대부분이지만 DB에 저장된 문자열일 수도 있다. 실제로 req.key 와 signed-req.pem 은 vi 에디터등으로 열어 내용을 볼 수 있는 텍스트 파일이다)
정리
인증서를 빨리 생성하기 위한 명령을 정리했다.root@wl /usr/local/ssl/certs # openssl req -newkey rsa:4096 -nodes -out req.pem -keyout req.key \ -subj "/C=KR/ST=GyungGiDo/L=Suwon/O=Solanara/OU=SolanaraTeam/CN=*.solanara.net/emailAddress=admin@solanara.net" root@wl /usr/local/ssl/certs # openssl genrsa -des3 -out ca.key 4096 Enter pass phrase for ca.key:12345 Verifying - Enter pass phrase for ca.key:12345 root@wl /usr/local/ssl/certs # openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \ -subj "/C=KR/ST=GyungGiDo/L=Suwon/O=Solanara/OU=SolanaraTeam/CN=Solanara CA/emailAddress=admin@solanara.net" Enter pass phrase for ca.key:12345 root@wl /usr/local/ssl/certs # openssl x509 -req -CA ca.crt -CAkey ca.key -days 3650 -in req.pem -out signed-req.pem -CAcreateserial Enter pass phrase for ca.key:12345 root@wl /usr/local/ssl/certs #
'Server' 카테고리의 다른 글
[서버운영] MySQL 백업용 쉘스크립트 (0) | 2009.12.10 |
---|---|
PHP 사용을 위한 Windows Server 2008 구성 절차 (0) | 2009.11.24 |
Windows 2008에서 telnet 사용하기 (0) | 2009.11.10 |
Apache,PHP,MySQL,Zend,OpenSSL 설치 동영상 (0) | 2009.11.03 |
[Apache] apache + openssl 설치 및 연동 ( ssl ) (3) | 2009.11.03 |