아는 분의 요청으로 후다닥 만들어본 pthread용 쓰레드 세이프 큐.
conditional wait 기능이 추가된 버전도 만들어 보려고 했지만, 귀찮아서...

테스트용 코드가 같이 있으므로, pthread가 돌아가는 방식을 대충 보고 싶어도 도움이 되리라 생각됨.

License: absolute free for any purpose. Use this at your own risk.



Posted by 고댱
Windows Vista 시절부터 탐색기에 도입되기 시작한 이전 버전 복원 메뉴.
영문 버전에는 Restore Previous Versions 이라고 표시된다.

문제는 이게 귀찮으면서 쓸 일이 없다는 것이다.
마우스 오른쪽 버튼을 누를 때마다 튀어 나오니, 영 걸리적거리지.


하지만 다행히도 없앨 수 있는 방법이 있다.
관리자 권한으로 레지스트리 에디터를 실행한 후 다음의 경로에서 DWORD 값을 추가나 수정을 하면 된다.

경로 : HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\
이름 : NoPreviousVersionsPage
타입 : DWORD (32bit)
값 : 1

이렇게 하면 파일 속성 탭에서 뿐만 아니라, 마우스 오른쪽 버튼을 눌렀을때 나오는 메뉴에서도 없어진다.


참고 : http://www.techoh.com/1116-remove-or-restore-previous-versions-tab-in-windows-vista/
Posted by 고댱
버추얼 호스팅(Virtual Hosting)은 사실 꽤나 오래된 주제다.
뭔고 하니 한 IP를 가진 서버에서 여러개의 웹서비스를 도메인별로 독립적으로 운영할때 쓰이는 기술이다.

예를 들어 1.2.3.4 라는 IP를 가진 서버를 소유하고 있는 상황에서
80번 포트를 공용으로 사용하면서 www.a.com 이라는 웹페이지와 www.b.com 이라는 웹페이지를 별도로 서비스하고 싶을때 버추얼 호스팅 기술이 쓰인다.


아마 인터넷 프로토콜에 대해서 조금 아는 사람이라면 의문이 들 수도 있을 것이다.
들어오는 접속을 어떻게 구분해서 각 도메인별로 처리할 수 있는 걸까?


비결은 HTTP 프로토콜 헤더의 Host 필드에 있다.
클라이언트에서는 서버에 TCP 접속이 성사되면 HTTP Request를 보내는데, 이때 Host 필드에 웹브라우저에 입력된 도메인을 넣어주도록 되어 있다.

대충 캡쳐해본 HTTP 프로토콜 Request 헤더 부분


사실 HTTP 1.0 표준에서는 Host 필드가 강제적인 규약이 아니었다.
하지만 현재 대부분의 웹브라우저에서 표준으로 쓰이고 있는 1.1 표준에서는 반드시 Host 필드를 서버에 전송해야 하도록 되어있다.

그 결과 오늘날 웹서버에서도 부담없이 버추얼 호스팅을 운영할 수 있다.
이로서 웹 호스팅 업체도 서버 관리 비용을 굉장히 절약할 수 있고, 그 결과 사용자도 보다 저렴하게 호스팅받을 수 있게 된 것이다.


하지만 얄궂게도 이런 축복받은 기술이 SSL과 같은 암호화 프로토콜과 접목되면 상황이 전혀 달라진다.
SSL은 그 특징상 어플리케이션 레이어 아래에서 동작하는데,
그렇기 때문에 HTTP 헤더들을 전송하기 전에 앞서 우선 서버와 클라이언트 간의 SSL 세션부터 열어야 한다.

문제는 SSL 세션을 열 때 웹브라우저에서 웹서버의 인증서를 검사하는 과정에서 발생한다.
웹서버의 인증서의 Common Name 필드는 반드시 해당 서버의 도메인을 가리키도록 되어있는데,
그렇지 않으면 잘못된 인증서라고 경고가 발생한다.

인증서에 등록된 CN 필드


왜 이런 상황이 문제가 되는 걸까????
자... 예제로 한번 살펴보자.

일단 웹서버를 한대 운영하고 있다고 가정하자.
이 웹서버에는 www.a.com 과 www.b.com 두개의 웹사이트를 버추얼 호스팅을 이용하여 서비스하고 있다.
그리고 이 모든 웹사이트에 대해서 SSL 접속을 제공한다고 가정하자.
SSL 인증서는 www.a.com, www.b.com 이름으로 각각 발급받았다.

이 상황에서 한 클라이언트가 https://www.a.com/ 으로 접속을 시도하면 어떻게 될까?
SSL 접속 요청이 들어왔기 때문에, 웹서버에서는 HTTP 통신에 앞서 SSL 채널을 열려고 할 것이다.

이때 웹서버는 자신의 인증서를 클라이언트에게 보내줘야하는데 여기서 문제가 발생하는 것이다.
www.a.com 인증서를 보내줘야하나? 아니면 www.b.com 인증서를 보내줘야 하나???

현 상황에서는 HTTP 헤더를 전송하기 전이기 때문에, 당연히 HTTP Request 프로토콜의 Host 필드값을 알 수 없는 상태다.
따라서 서버 측에서 당췌 이놈이 어디를 노리고 접속을 시도하는 것인지 이 상황에서는 알 방법이 없다.
결국 서버에서는 기본값으로 세팅된 인증서를 보내줄 수 밖에 없다.
여기서 www.a.com 인증서를 기본값으로 세팅해놨다고 보자.

이 상황에서 www.a.com 으로 들어오는 접속은 별 문제없이 처리할 수 있을지 몰라도,
www.b.com 으로 접속이 들어와서 SSL 채널을 열려고 시도한다면 당연히 웹브라우저에서는 보안 경고를 출력해서 접속을 막는다.

혹시 다른 웹사이트에서 인증서를 훔쳐서 쓰고 있는 것 아냐? 라고 웹브라우저가 의심하는 상태


이 쯤 오면 웹서버 관리자는 슬슬 짜증이 올라오게 되어있다.
비싼 돈 주고 인증서는 여러장 발급받아놨는데, 정작 쓸 수 있는건 1개밖에 없으니 짜증날만 하지.


하지만 왜 내가 여기 글을 쓰겠는가?
대안이 있기 때문이지.
바로 인증서의 Subject Alternative Name (또는 줄여서 SAN) 필드를 이용해서 추가로 도메인을 인증서에 등록할 수 있다.

Subject Alternative Name 필드를 이용해서 여러개의 도메인을 등록한 인증서

참고로 SAN 필드를 이용한 다중 도메인 인증서는 UCC (Unified Communications Certificate) 또는 MDC (Multi-Domain Certificate) 라고 불리기도 하므로, 헷갈리지 말고 동일한 놈으로 취급해도 무방하다.

아쉽게도 버추얼 호스팅 상황에서 SSL을 적용하고 싶을 경우, 기존에 SAN 필드가 없는 상태로 발급받은 인증서는 폐기해야한다.
환불이나 업그레이드에 관련된 사항은 해당 인증기관에 연락해서 확인해봐야 할 것이다.


마지막으로 남은 문제는 어떤 인증기관(Certificate Authority)에서 UCC 인증서를 발급해주는가이다.
다행히도 오늘날 많은 인증기관에서 UCC 인증서를 발급해주고 있다.

하지만 대게 일반 인증서보다 더 비싸고, 도메인 갯수에 비례해서 돈을 더 받는 곳이 많다.
그래도 이게 어딘가? 일단 불가능에서 가능으로 바뀌었잖아.


개인적으로 UCC 인증서를 제공하고 있는 인증기관 중 추천하고 싶은 곳은 이전에도 언급한 이스라엘의 StartCom 이다.
$39.90 이라는 말도 안되는 저렴한 비용으로 2년간 도메인 갯수에 상관없이 무제한 인증서를 발급받을 수 있다.

참고로 VeriSign에서는 UCC 인증서를 발급받기 위해서는 반드시 그쪽에서 관리하는 PKI 프로그램에 가입해야 하는데, 이 비용만 해도 1년에 $3,000 이 넘는다...
StartCom과 비교해서 거의 150배 이상 차이나는군...



지금까지 버추얼 호스팅과 SSL이 접목되면 발생하는 문제, 그리고 그 해결책을 맛보기로 알아보았다.
다음번에는 EV 인증서에 대해서 한번 포스팅해볼까 계획 중.
Posted by 고댱
최근 StartCom에서 제공하는 인증기관(Certificate Authority, CA)이 드디어 MS의 저장소에 기본적으로 탑재되었다.
이로서 현재 유일무이하게 거의 모든 웹브라우저에서 무료 SSL 인증서를 사용할 수 있는 인증기관이 생기게 된 것이다.

이젠 인터넷 익스플로러에서도 OK


기존의 유명한 인증기관에서 아주 고가에 제공하던 인증서를 무료로 사용할 수 있다니, 감회가 새로울 뿐이다.
일례로 이 분야에서 유명한 VeriSign은 1년에 $399 라는 초고가로 인증서를 판매하고 있다.

물론 무료 인증서로 모든 기능을 다 사용할 수 있는 것은 아니다.
클래스 2 이상의 기능들(코드서명, 다중도메인 처리, EV인증서, 하위CA 운영 등등...)은 본인 확인을 위해 소정의 비용이 필요하긴 하지만, 그래도 웹사이트, E-mail 보안에는 제약이 없으니 사실상 중소기업 수준에서 필요한 모든 기능을 사용할 수 있다고 봐야한다.

이로서 아마 상당 수의 기업, 개인들이 이쪽으로 넘어가지 않을까 추측된다.
물론 네임밸류로 먹고사는 인증기관들은 여전히 유료로 남겠지만, 점점 입지가 줄어들 것은 명백하겠지.


개인적으로 요 StartCom의 행위가 하도 기특해서(?) StartSSL 씰을 웹사이트에 부착했다.
씰을 이용하면 직접적으로 이 웹사이트는 SSL을 사용하여 보안이 강화되어 있습니다~ 라는 것을 알릴 수 있다.
(물론 StartSSL 광고도 될 수 있다)

요러케 우측 하단에 뜬다. 이 기능은 옵션이니 필요한 사람만 쓰면 된다.


씰을 부착하려면 웹페이지에서 다음처럼 HTML 코드를 작성하면 된다.

<html>
<head>
</head>
<body>
<script type="text/javascript" src="https://www.startssl.com/seal.js"></script>
</body>
</html>


만약 https 접속 중일 때만 띄우고 싶다면 다음과 같이 php 코드를 작성하면 된다.
ASP, JSP 등도 조금만 응용하면 적용할 수 있을 것이다.

<html>
<head>
</head>
<body>
<?php
if ($_SERVER["HTTPS"] == "on")
{
    ?><script type="text/javascript" src="https://www.startssl.com/seal.js"></script><?
}
?>
</body>
</html>

Posted by 고댱
최근 도메인 메일 관리하기가 영 껄끄러워져서 대안책을 찾던 중, 구글 앱스를 발견했다.
헌데 구글 앱스를 설정하는 도중 모바일 관련 메뉴가 눈에 들어오더군.


응??? 설마 내 폰에서 될까???


사실 난 이제까지 저 메뉴는 스마트폰 전용 메뉴인 줄 알았다.
보통 스마트폰 하면 윈도우 모바일이 탑재된 폰이나 아이폰, 안드로이드, 블랙베리 등을 의미하거든.

이런 폰에는 기본적으로 풀브라우징이 가능한 웹브라우저가 탑재되어 있어서, gmail 등과 같은 웹 어플리케이션을 사용하는데는 하등 지장이 없다.


반면에 일반적인 휴대폰에서는 그런 어플리케이션을 처리할만한 능력이 안되기 때문에, Wireless Application Protocol (WAP) 이라고 불리는, 보다 간략화된 프로토콜만을 사용한다.

이 때문에 만약 웹사이트 관리자가 일반 휴대폰에도 사용할 수 있도록 만들고 싶다면, HTML 기반으로 구성된 기존 페이지와는 별개로 WML로 이루어진 또다른 페이지를 만들어야 한다.
하지만 사실상 대형 포탈 사이트를 제외하고는 WAP 사이트를 별개로 운영하는 곳은 찾기가 힘들다.


하지만 우리의 gmail은 지원하더군...
전혀 몰랐다...

휴대폰의 네이트, 쇼, 오즈, ez-i 등등을 통해서 http://mobile.google.co.kr/ 로 접속하면, 화려하진 않지만 구글에서 제공하는 서비스를 이용할 수 있다.


사실 이게 되리라곤 생각하지 못했다.


장점이 뭐냐고?
언제 어디서든지 컴퓨터가 없어도 gmail 에 접속해서 메일을 확인할 수 있다는 것이지.
물론 편지쓰기도 포함해서 말이지.

급한 메일을 수신할게 있는데, 근처에 PC방이 없어서 마음을 졸이는 사람들에게 꽤나 유용할 것 같다.
단, 데이터 요금에 대한 책임을 질 수 있어야 겠지만...
Posted by 고댱
이번에 새로 나온 9.10 버전에서 로그인화면을 변경하기가 참으로 까탈스럽게 되었다.
시스템 메뉴에서 백날 뒤져봐야 답이 안나오거든...

윈도우처럼 웬만한 부분은 사용자가 손을 못 대도록 감추려는 전략인 것 같은데...
리눅스가 이러면 재미없지.


그래서 구글링하는 도중 다음의 사이트에서 로그인 화면을 변경하는 방법을 찾아냈다.
http://lionlix.wordpress.com/2009/10/23/hack-ubuntu-9-10-karmic-koala-gdm-login-screen/


1. 현재 X윈도우에 로그인되어 있는 사용자를 로그아웃 시키고 GDM 로그인 화면으로 간다.

2. Ctrl+Alt+F1 을 눌러서 콘솔을 띄운다.

3. 콘솔 화면에서 아무 사용자로 로그인한다.

4. export DISPLAY=:0.0 를 실행한다.

5. sudo -u gdm gnome-control-center 를 실행한다.

6. 다시 Ctrl+Alt+F7 눌러서 GDM 화면으로 가면, 제어판이 떠 있는 것을 확인할 수 있다.


근데 내가 디자인 감각이 없어서 그런지...
로그인 화면을 비롯한 기타 모양새를 바꿔도 바꿔도 점점 더 악화되는구나...
-_-;
Posted by 고댱
이번에 삼성 콤보드라이브의 지역코드 락을 풀기 위해서 펌웨어를 개조하던 중, 가장 마지막 작업인 체크섬 계산에 봉착했다.

계산기 실행시켜놓고 막 두드릴려니 귀차니즘이 도져서 환장하겠더구만...
그래서 펌웨어 체크섬 계산기를 만들었다.

사용법은 간단하다.
콘솔에서 다음과 같이 펌웨어 파일명을 인자로 넣어주면 땡.

와! 심플하군


이렇게 나온 결과를 이용해서 펌웨어 파일 내부의 체크섬 영역을 개조하면 된다.

이 프로그램 자체만으로는 ODD의 펌웨어를 변경시키지 않기 때문에 안전하다.
하지만 이 부분의 전문가가 아닌 사람이 다운로드하는 것은 별 의미가 없을 듯...



Posted by 고댱
IRC는 1993년 RFC 표준으로 제정된 이후, 오랫동안 쓰이고 있는 채팅 서버/클라이언트 프로토콜이다. 중간에 RFC-2812로 개정되기도 했지만, 여전히 가장 널리 쓰이고 있는 채팅 방법이며, 많은 기타 채팅 프로그램들도 이 기능을 본따서 적용하고 있는 실정이다.

하지만 이 프로토콜 자체적으로는 암호화된 통신을 지원하지 않고 있다. 이때문에 누군가 악의를 가지고 패킷을 감청한다면, 채팅 내용을 훤히 볼 수 있다는 문제가 발생한다. 물론 아무나 이렇게 감청할만한 조건을 갖출 수는 없지만, 그래도 평문으로 사생활이 노출되는 것에 대해서 찝찝함을 느낄 수도 있을 것이다.

이러한 찝찝함을 해소하기 위해서 만능 암호화 프로토콜인 SSL을 IRC 프로토콜에 씌울 수 있다. 실제로 많은 IRC 서버/클라이언트들이 SSL 기능을 지원하고 있으며, 설사 지원하고 있지 않더라도 sslwrap과 같은 프록시 프로그램을 통해 암호화된 통신을 할 수 있다.


다행스럽게 mIRC에서는 자체적으로 SSL을 지원하고 있다. 그래서 귀찮게 프록시 프로그램을 사용하지 않아도 편하게 SSL 기능을 이용할 수 있다. 하지만 이 기능을 사용하기 전에 반드시 윈도우즈용 OpenSSL 라이브러리를 다음의 사이트에서 반드시 설치해야 한다.

http://www.mirc.com/ssl.html

설치할 때 mIRC가 설치된 폴더(보통 C:\Program Files\mIRC)나 윈도우 시스템 폴더(보통 C:\Windows\System32)에 설치하면 된다. 만약 자신이 OpenSSL 전문가라면 VC++을 이용하여 직접 컴파일해서 만들어진 DLL 파일들을 복사해도 무방하다.

이후에 mIRC를 재실행하면 Connect -> Option 부분의 SSL 버튼이 활성화된다. 여기서 개인키나 신뢰가능한 CA 등을 설정할 수 있는데, 여기서는 이것에 대한 자세한 내용은 다루지 않겠다.


다시 본론으로 돌아오자. SSL을 이용해서 서버에 접속하기 위해서는 /server -e 옵션을 이용하여 접속할 수 있으며, 또는 포트 번호에 +7001과 같이 + 기호를 붙여서 SSL 포트라는 것을 지정할 수도 있다.

현재 SSL 포트를 지원하고 있는 네트워크로는 irc.distributed.net이 있다. 994번 포트나 6697번 포트를 통해서 SSL을 이용할 수 있으므로, 암호화된 통신을 하기 위해서는 다음과 같은 명령을 입력해야 한다.

/server irc.distributed.net:+994

이때 인증서 경고가 뜰 수 있는데, 살포시 Accept 해주자. 이 경고의 원인을 알기 위해서는 역시 전문적인 지식이 필요해서 자세한 설명은 생략하겠다. 어쨌든 Accept 버튼을 누르면 된다는 것만 알고 있자.


성공적으로 접속이 되었다면 다음과 같은 로그 메시지를 볼 수 있다.

[16:11] -irc.followell.net- *** You are connected to irc.followell.net with TLSv1-AES256-SHA-256bits

여기서 중요한 것은 가장 마지막의 256bits 부분이다. 이 부분을 통해서 현재 256비트로 암호화 통신이 이루어지고 있다는 것을 알 수 있다. 보통 온라인 뱅킹 등에서 128비트 암호화 통신이 이루어지고 있다는 것을 감안하면 꽤나 강력한 암호화 통신이라는 것을 알 수 있다.


이상으로 간략하게 mIRC + SSL 을 이용해서 암호화된 IRC 통신을 하는 방법을 알아보았다. 이 외에도 SSL을 이용한 암호화가 어디까지 나를 보호해줄 것인가에 대해서도 다루고 싶었지만, 내용이 지나치게 전문적이고 길어질 것 같아서 생략한다. 단지 SSL을 사용하면 조금 더 안전해질 뿐, 100% 안전하지는 않다는 것만 알아두자.
Posted by 고댱
한참 코딩 삼매경에 빠져있을 도중...

유닉스 툴인 sort 와 less를 윈도우용으로 포팅한 프로그램을 편의 목적으로 사용하던 중,
이전에 전혀 보지 못했던 블루스크린을 보고야 말았다.


도대체 화면만 보고서는 원인이 뭔지 당췌 모를 에러 메시지


구글링을 좀 해보니, 시스템 프로세스가 죽어버린 상황이라고 하는데...
잘 살아있는 상태에서 갑자기 죽는게 이상하지 않은가?

좀 더 구글링을 해보니 드라이버 단에서 문제가 발생하는게 주된 원인이며,
PC Anywhere 라는 소프트웨어가 주로 이런걸 야기한다고 한다.

이 경우에는 %systemroot%\system32\drivers\gernuwa.sys 파일을 제거하면 효과가 있다고 하는데,
문제는 지금 쓰고있는 PC에는 저딴 것들이 전혀 설치되어 있지가 않다.


그럼 남은건 다른 드라이버들을 뒤져야 하는데...
현재 설치된 드라이버들이 워낙 많아서 추적하기가 사실상 거의 불가능한 상황.

물론 하나씩 Disable 시키면서 살펴볼 수도 있겠지만,
어렵게 이 문제를 해결한다고 쳐도, 이 외에도 현재 블루스크린이 확실하게(!!!) 뜨는 상황이 발생하고 있기 때문에 머리가 아프다.
(일례로 현재 Samba로 공유한 디렉토리를 윈도우 공유 기능을 통해서 접근하면 바로 블루스크린이 작렬하는 상태임)


다행히 이번 블루스크린으로 자료가 손상된 것은 없는 것 같다.
일단 관련 작업은 VMWare를 띄워서 그 속에서 처리해서 확인한 상황임.

그나저나 윈도우 재설치는 정말 사양하고 싶은 일인데......
Posted by 고댱
개인적으로 끄적이고 있는 한글닉 지원되는 IRC 서버를 위한 작업 도중...

첨에 위키피디어의 CP949 정보를 뒤져봤는데, 어랍쇼? 제대로 동작이 안하는 것이었다.
알고보니 좀 잘못된 정보인 것 같다.
(역시 전문정보는 위키피디어를 신용하면 위험하다. -_-)

제대로된 CP949 표준은 다음의 Microsoft 웹사이트에서 확인할 수 있다.
http://www.microsoft.com/globaldev/reference/dbcs/949.mspx


문제는 저것을 코드로 구현하는 방법인데...
대부분의 경우가 그렇다시피, 오토마타를 사용해서 구현하면 좀 편하다.

문제는 한글 첫번째 바이트가 0x81 에서 0xC6 까지는 두번째 바이트 대역으로 0x41 ~ 0xFE 까지 사용하지만,
첫번째 바이트가 0xC7 ~ 0xFD 까지는 두번째 바이트 대역으로 0xA1 ~ 0xFE 까지 사용한다.
(사실 이것도 부정확한게, 중간중간에 예외로 비어있는 공간이 꽤나 있다. 자세한건 MS의 문서를 참고할 것.)

이걸 대충대충 구현하자면, 오토마타를 3개 정도로 정의해서 만들면 편리하다.




물론 중간에 이빨빠진 중요한 부분들(첫번째 바이트 부분의 0xC9 라든지, 기타 등등)은 처리해주는게 더 완벽한 프로그램을 만드는 지름길.
Posted by 고댱