최근 글 목록
-
- ramdisk 설정
- 종이한장
- 2010
-
- Ubuntu 8.04 Server에서 Vir...
- 종이한장
- 2008
-
- 우분투에서 듀얼모니터 설정
- 종이한장
- 2007
-
- 한샘테크 경보기 HS-5000.T ...
- 종이한장
- 2007
-
- dav_svn 사용하기
- 종이한장
- 2007
--------------------
2006.8.25
Wordpress 로 웹사이트를 운영하는 경우 관리자 계정이나 가입자 암호 등이 clear text로 네트웍을 오가는 것은 바람직하지 않습니다. 특히 오픈웹의 경우, 이제 곧, 금융결제원을 상대로 한 소송에 참여할 사람들의 개인정보 등이 웹페이지를 통하여 오고가게 되는데, 이런 민감한 정보는 ssl 서버를 거쳐가도록 하는 것이 좋습니다. 이것은 하나의 서버(컴퓨터)로도 가능합니다.
그동안 후니님께서 워드프레스가 무엇인지에 대하여 저에게 한수 가르쳐 주셨고, 원고인단 모집 스크립트 작업도 해주시고, 빛알갱이님, Cypher님 등께서 그 나머지 부분을 도와주셔서, 소송인단 모집이 그야말로 ‘초읽기’에 들어갔습니다. 이에 다음과 같이 제안합니다.
즉, 민감하지 않은 정보는 http 로, 민감한 정보는 https 로 처리하고자 합니다. Apache가 제공하는 rewrite 기능을 사용하면 됩니다.
다음과 같은 단계가 필요합니다.
첫 단계는 이미 된 것으로 전제 한다. 간단한 설명은 여기 참고.
자신이 서명한 서버인증서를 구비하는 방법은 여기에 설명되어 있다. 간단히 요약하면 다음과 같다.
1. 수퍼유저 권한으로 기존의 설정 파일을 백업해 둘 것: # tar zcvf Before.tgz /etc
2. 인증서를 저장할 폴더를 만든다.
root@korea.gnu.org:/home/glay# cd
mkdir gnuCA
chmod 700 gnuCA
cd gnuCA
3. 인증기관 인증서(CA certificate)를 생성하는데 사용되는 생성키(ca.key)를 다음과 같이 만든다:
# openssl genrsa -des3 -out ca.key 4096
암호를 요구하면, 기억할 수 있는 암호를 입력하고 잠시 기다리면 폴더에 ca.key 가 생성된다.
4. 이 생성키를 사용하여 CA 인증서를 다음과 같이 만든다.
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
다음 질문에 답변하고, 그 답변 내용을 정확히 적어 둔다.(여기 적어두었네요 )
Country Name (2 letter code): KO
State or Province Name (full name): South Korea
Locality Name (eg, city): Seoul
Organization Name (eg, company): GNU Korea
Organizational Unit Name (eg, section): Server Admin
Common Name (eg, YOUR name): korea.gnu.org CA
Email Address: glay@korea.gnu.org
이상을 입력하면, 폴더에 ca.crt 가 즉시 생성된다. 다음과 같이 확인.
root@korea.gnu.org:~/gnuCA# ls
ca.crt ca.key
5. 이렇게 만든 인증기관 인증서(ca.crt)를 사용하여 자신의 서버 인증서를 자기 스스로 발급한다.
먼저 서버인증서 생성키를 다음과 같이 만든다
openssl genrsa -des3 -out server.key 4096
키가 생성되는 과정에서 암호를 요구하면, 기억할 수 있는 암호를 입력한다. (위에 사용한 것과 같아도 무방함)
잠시후 server.key 가 생성되었음을 다음과 같이 확인한다.
root@korea.gnu.org:~/gnuCA# ls
ca.crt ca.key server.key
6. 이 키를 사용하여 인증신청파일(certificate signing request; .csr 파일)을 다음과 같이 만든다.
openssl req -new -key server.key -out server.csr
생성키를 만들때 사용한 암호를 요구하면, 이를 입력한다. 그러면 다음과 같은 질문(위와 같은 항목)이 나오는데, 그 대답은 끝에서 두번째 CN (Common Name) 을 제외하고는 위와 동일하다. 자기가 자신을 스스로 인증하기 때문이다. 그러나, CN이 위와 다르다는 점을 특히 주의!
Country Name (2 letter code): KO
State or Province Name (full name): South Korea
Locality Name (eg, city): Seoul
Organization Name (eg, company): GNU Korea
Organizational Unit Name (eg, section): Server Admin
Common Name (eg, YOUR name): korea.gnu.org
Email Address: glay@korea.gnu.org
7. 자신이 CA가 되어, 자기의 서버인증서를 다음과 같이 서명한다:
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
그러면 서버인증서 생성키를 만들때 사용하였던 암호를 요구하는데, 이를 입력하면 그 즉시 서명된 서버인증서(server.crt)가 생성, 발급된다. (금결원이 필요없지요… ) 다음과 같이 확인
root@korea.gnu.org:~/gnuCA# ls
ca.crt ca.key server.crt server.csr server.key
8. 서버인증서가 사용될 때마다 생성키를 만들때 사용한 암호를 서버관리자가 일일이 입력할 수는 없으므로, 암호 없이 읽혀질 수 있는 서버 인증서생성키를 다음과 같이 만든다.
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key
chmod 700 server.key
이렇게 발급완료된 서버인증서와 생성키를 다음 위치에 저장한다.
cp server.crt server.key /etc/apache2/ssl/
서버인증서 발급 및 설치가 이렇게 완료되었다. 이제 Apache ssl Server 를 설정하는 일이 필요한데, 이것은 다음 항목에서 설명한다.
컴퓨터 한대로 http 서버와 https 서버를 동시에 운영하는 것은 Virtual Hosting 기능이 제공한다. 이것을 이용하여 Wordpress 등의 웹페이지를 안전하게 운영하는 방법은 우분투 관련 사이트와 이곳, 그리고 워드프레스 코덱스 사이트에 설명되어 있는데, 간단히 요약하면 다음과 같다.
1. 서버 설정파일을 다음과 같이 두개로 만든다.
cd /etc/apache2/sites-available/
cp default ssl
2. 그 다음 default 파일의 처음 두 줄을 다음과 같이 수정한다.
NameVirtualHost *:80
조금 밑에 내려가, ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 라는 줄이 시작되기 직전에 다음과 같이, 주소 다시쓰기 규칙(Rewriting rules)을 삽입한다.
## Openweb stuff begins here! ##
Options -Indexes
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Order allow,deny
Allow from all
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^wp-(admin|login|register)(.*) https://%{SERVER_NAME}/openweb/law/wp-$1$2 [C]
RewriteRule ^.*$ - [S=40]
RewriteRule ^feed/(feed|rdf|rss|rss2|atom)/?$ /index.php?&feed=$1 [QSA,L]
## Openweb stuff ends here. ##
3. 그 다음, default에서 복사한 ssl 파일을 (/etc/apache2/sites-available/ssl)을 열어, 다음과 같이 수정한다:
NameVirtualHost *:443
ServerAdmin webmaster@localhostDocumentRoot /var/www
## Certificate related matters ##
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
## End here ##
그리고, 아까와 같이 ScriptAlias 어쩌구 하는 부분이 시작하기 전, (즉, DocumentRoot에 대한 부분이 선언되고 나면) 다음과 같이 새로쓰기 규칙을 삽입한다.
## Openweb stuff begins here ##
Options -Indexes
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Order allow,deny
Allow from all
RewriteEngine On
RewriteBase /
RewriteRule !^wp-(admin|login|register)(.*) - [C]
RewriteRule ^(.*) http://%{SERVER_NAME}/openweb/law/$1 [QSA,L]
4. 그런 다음, /etc/apache2/ports.conf 파일을 열어서, 다음과 같이 수정한다:
Listen 80
Listen 443
5. 다음과 같은 심링크(symbolic link)를 건다:
ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/
그리고 ssl server 와 관련된 모듈이 활성화 되어 있는지를 다음과 같이 확인한다:
ls /etc/apache2/mods-enabled/
라고 입력해 보았을때 다음과 같은 심링크들이 존재하면 ok.
auth_mysql.load@ php5.load@ proxy_html.load@ ssl.load@
cgi.load@ proxy.conf@ rewrite.load@ userdir.conf@
php5.conf@ proxy.load@ ssl.conf@ userdir.load@
이 중 하나라도 없으면 다음과 같이 심링크 하면된다:
ln -s /etc/apache2/mods-available/모듈파일 /etc/apache2/mods-enabled/
모듈 파일이 /etc/apache2/mods-enabled/ 에 존재하지 않으면, 해당 패키지를 설치하여야 하며, 이때 심링크가 혹시 자동으로 안되면 직접 위와 같이 한다.
6. 이상이 완료되면, Apache2 서버를 다음과 같이 재시작 한다.
# /etc/init.d/apache2 restart
이상의 과정이 문제 없이 이루어지고 나면, http://korea.gnu.org/openweb/law 로 접속하면 http 서버가 처리하고, 그 웹페이지에서 민감한 정보가 있는 부분은 https 서버가 처리하게 된다. 페이지 내용은 clear text로 보면되고, 로그인 정보, 회원의 이메일 주소 등은 https 프로토콜로 처리된다.
제가 집에서 테스트 해본 Apache2 설정 파일은 http://korea.gnu.org/openweb/sslSAMPLE.txt 와 http://korea.gnu.org/openweb/sslSAMPLE.txt 에 있습니다.
Topics: 웹사이트 운영 | 트랙백(trackback) |
open.unfix.net 의 경우, https 로 접속하는 경우 인증서는 메일서버용이 제시되는데.. 즉, https://open.unfix.net 에 접속했는데, mail.unfix.net 의 인증서가 제시됩니다. 이경우 opera와 firefox, konqueror 등의 브라우저는 일회성으로만 접속이 가능하고, 매번 경고 메시지가 뜹니다.
korea.gnu.org 의 경우, secure web server 는 없지만, 메일서버 용 인증서는 있습니다. 이 경우에도 메일서버의 호스트네임과 인증서에 표시된 호스트 네임이 달라서, 일회성으로 밖에 설치가 되지 않습니다. 메일 프로그램을 새로 실행한 다음, korea.gnu.org 메일 서버를 ssl 로 접속하여 메일을 발송하려면 매번 경고 메시지가 뜹니다.
제가 위에서 설명한 방법과 같이, 인증서에 표시된 host name (CN, 즉 Common Name) 과 실제 host name 이 완전히 일치하면, 최초에 한번 경고 메시지가 뜨고 [= 알지 못하(기 때문에 믿을 수 없)는 인증기관이 인증한 인증서라는 내용], 사용자가 이를 영구히 설치하면, 다음부터는 아무런 경고메시지 없이 ssl 교신이 가능합니다.
Mysql 엔코딩 문제에 대하여는 다음 글을 보세요:
http://open.unfix.net/mysql-%ED%95%9C%EA%B8%80-%EC%97%94%EC%BD%94%EB%94%A9-%EB%AC%B8%EC%A0%9C/
안 녕하세요 언픽스 서버를 운영하고 있는 정태영이라고 합니다. https 의 경우 name based virtual host 를 지원하지 않기 때문에 https 기본 포트로는 제공해 드릴 수가 없지만 필요하시다면 10000번 port 등을 이용해서 https 를 제공해드릴 수 있습니다.
필요하시다면 메일 주시기 바랍니다
mysql 한글 문제 페이지에 있는 내용에도 약간의 오류가 있는 듯 해서 그 곳에 코멘트를 달려고 했지만 달리지 않는군요
mysql-4.1 버젼 이상에서는 client to server 에 사용되는 인코딩과 server to client 로 사용하는 인코딩 설정이 가능합니다.
client 에서 server 로 데이타가 전송될 때는 character_set_client 에서 character_set_connection 으로 변환이 되고 server 에서 client 로 전송될 때는 db, table, column charset 에서 character_set_results 로 변환이 되게 되구요
gnu korea 의 character_set_results, character_set_client, character_set_connection 값이 어떻게 되있는 지에 따라서 위 페이지의 내용은 맞는 내용이 되기도 하고 틀린 내용이 되기도 합니다.
결론만 말하자면 mysql 5, 4.1 버젼 에 들어있는 데이타를 utf-8 로 dump 할 경우 charset 이 latin1 으로 설정되어 있는 mysql 4.0 에 되돌리더라도 한글이 깨지지 않습니다.
얼마전 mysql 을 업그레이드 하면서 관련된 내용을 조금 정리한 글이 있어서 링크 걸고 갑니다. 즐거운 하루 보내세요~
http://b.mytears.org/2006/08/362
mysql 기본 설정 값을 확인하기 위해서는 mysqladmin -p variables 를 실행시키시고 mysql 비밀번호를 입력하시면 됩니다
본의 아니게 도배를 하고 가게 되는군요
https 같은 경우는 도메인이 큰 문제가 되는게 아니라면 https://unfix.net/open/ 정도로 alias 를 걸어드릴 수도 있겠네요.
그렇게 할 경우 아래 링크를 걸게 되는 인증서만 등록해 두면 보안 경고창은 보이지 않을 겁니다.
http://unfix.net/resources/unfix.crt
이메일 보내드렸습니다. 가입, 로그인, 관리 등의 경우 ssl 서버로 리디렉트가 잘되고, https 에서 다시 http 로도(보안의 필요가 없는 사이트로 갈때) 정확히 잘 전환되는 군요.
고맙습니다 Very much!