2011년 3월 24일 목요일

Windows 환경에서 OpenSSL 빌드하기

OpenSSLSSL을 지원하는 많은 프로그램에서 사용하는 라이브러리 모듈이기 때문에 버그나 보안 관련 이슈가 발견되어 그것을 수정한 새로운 소스가 릴리즈될 경우 영향을 받을 수 있는 프로그램들은 최대한 빨리 업그레이드 해줄 필요가 있습니다. 다행스러운 점은 OpenSSL을 사용하는 대부분의 프로그램들이 (Windows 환경 기준으로) 두 개의 DLL 파일(ssleay32.dll & libeay32.dll)만 교체해주면 OpenSSL 모듈 업그레이드가 가능하다는 것입니다. -- DLL을 사용하지 않고 정적(static)으로 링크해버린 경우는 어쩔 수 없고, DLL을 사용했다고 하더라도 DLL 파일만 교체했을 때 드물게 오류를 일으키는 경우도 있습니다.

그러나 주의할 점이 하나 있는데, OpenSSL 1.0.x 버전과 0.9.x 버전의 라이브러리 인터페이스가 서로 다르기 때문에 DLL 파일 교체 시에 각각 인터페이스가 호환되는 버전으로 대체해야 한다는 것입니다. 예를 들어, 기존에 0.9.8q 버전의 DLL 파일이 사용되고 있었다면 0.9.8r 또는 그 이후 버전의 DLL 파일로 대체해야지 1.0.0d 버전이나 그 이후 버전의 DLL 파일로 대체하면 안 된다는 뜻이지요. DLL 파일의 속성 보기를 통해 버전 정보를 확인할 수 있으므로 적절한 대체 버전을 결정하는 것은 그리 어렵지 않습니다.

[libeay32.dll 속성 대화창]
[ssleay32.dll 속성 대화창]

빌드 준비

Windows 환경에서 OpenSSL 소스를 직접 빌드하는 것은 아주 간단합니다. 빌드에 사용되는 도구들도 모두 무료로 구할 수 있는 것들이기 때문에 비용에 대해 고민할 필요도 없습니다. (Visual C++ 64bit Compiler는 상용 제품에서만 제공됩니다.) 빌드에 필요한 도구들을 나열해보면 다음과 같습니다.

  • Perl: ActivePerl 또는 Strawberry Perl(@euler_kr 님 지적해주심)
  • C Compiler: Visual C++ 또는 Borland C 또는 GCC(Cygwin 또는 MinGW)
  • Assembler: nasm 또는 MASM

소스와 빌드 도구 다운로드 및 설치

소스는 OpenSSL 공식 홈페이지에서 다운로드 가능합니다. 1.0.x 버전과 0.9.x 버전이 함께 업데이트가 되고 있으므로 둘 다 받거나 둘 중 필요한 것으로 골라서 받습니다.

LINK: OpenSSL Source Downloads

이 글에서는 주로 많이 사용하는 Visual C++과 nasm을 가지고 Win32 환경으로 빌드하는 방법을 설명하겠습니다. 다른 도구 구성으로 빌드하고 싶은 분들은 OpenSSL 소스에 포함된 INSTALL.xxx 파일을 참고하시기 바랍니다. (Win32 빌드에 대해서는 INSTALL.W32 파일을, Win64 빌드에 대해서는 INSTALL.W64 파일을 참고)

가장 먼저 아래의 도구들을 각각 다운로드하여 설치합니다. OpenSSL 빌드에 사용되는 도구들은 특별히 버전에 대한 제약이 없으므로 최신 안정 버전을 받으면 됩니다. 단, Microsoft Visual C++은 빌드에 사용한 버전에 따라 결과물로 만들어진 DLL 파일이 해당 MSVC Runtime 버전에 대한 의존성을 가지게 되므로 외부에 전달할 때는 반드시 필요한 MSVC Runtime 버전을 알려주거나 재배포 가능한 패키지를 함께 제공할 필요가 있습니다.

LINK: ActivePerl 또는 Strawberry Perl 둘 중 하나

LINK: Microsoft Visual C++ Express Edition

LINK: Netwide Assembler(nasm)

빌드

  1. Windows 시작 메뉴에서 Visual Studio 명령 프롬프트를 실행합니다.

  2. nasmw.exe 파일의 위치를 PATH 환경 변수에 추가하거나 이미 PATH에 포함된 경로로 복사해줍니다.

    주의: 최근 nasm 배포본에서는 실행 파일명이 nasm.exe가 되었으므로 OpenSSL 빌드를 위해서는 nasmw.exe로 이름을 변경줄 필요가 있습니다.

  3. OpenSSL 소스가 풀려 있는 폴더로 경로를 변경합니다.

  4. Perl 스크립트를 통해 빌드 환경을 설정해줍니다.

    perl Configure VC-WIN32 --prefix=설치될_경로

    주의: 위와 같이 OpenSSL 기본 옵션으로 빌드하게 되면 미국과 몇몇 나라에서 특허로 보호받고 있는 암호화 알고리즘을 포함하게 되어 이것을 개발 중인 제품에 적용하거나 재배포할 때 법적인 문제를 야기할 수 있습니다. 그러므로, 특허로 보호되는 알고리즘을 제외하고 빌드하고 싶은 경우 no-idea no-mdc2 no-rc5 옵션을 추가해주어야 합니다. (greenfish77 님 지적해주심) 더 자세한 내용은 소스 내 README 파일의 PATENTS 항목과 FAQ 파일의 LEGAL 항목에서 확인할 수 있습니다.

    perl Configure VC-WIN32 no-idea no-mdc2 no-rc5 --prefix=설치될_경로
    또한 여기에 덧붙여, OpenSSL을 사용(또는 포함)한 어떠한 형태의 배포도 OpenSSL에 적용되고 있는 두 가지의 라이센스에 대해 표기해야 합니다. 자세한 것은 소스에 포함된 LICENSE 파일 내용을 참고하시기 바랍니다.

  5. Assembler로 nasm을 사용할 것임을 지정해줍니다.

    ms\do_nasm
  6. nmake로 빌드합니다. (한글 Windows 환경이라면 빌드 도중 에러가 발생할 수 있습니다. 이 에러에 대해서는 다음 단락을 참고하세요.)

    nmake -f ms\ntdll.mak
  7. 빌드가 잘 되었는지 테스트합니다.

    nmake -f ms\ntdll.mak test
  8. 최종적으로 만들어진 바이너리를 설치될_경로로 설치합니다.

    nmake -f ms\ntdll.mak install

빌드 중 compile error 해결하기

한글 Windows 환경에서 OpenSSL 소스를 빌드하게 되면 도중에 컴파일 에러를 만나게 됩니다. 소스 파일 중 딱 두 개가 컴파일 오류를 일으키는데, 그 원인은 소스 파일이 iso-8859-1 인코딩으로 저장되어 있고 그 내용 중에 확장 ASCII 문자가 포함되어 있기 때문입니다. Visual C++ Compiler(.NET 이후 버전부터)는 소스를 읽어 들일 때 UTF-8으로 인코딩된 파일인지 확인하고 그렇지 않다면 시스템 기본 인코딩(한글 Windows에서는 CP949)으로 간주합니다. 이 때 그 확장 ASCII 문자가 적절하지 못한 문자로 처리되어 컴파일 오류를 발생시키게 되는 것입니다.

컴파일 에러가 발생하는 소스 파일은 다음과 같습니다.

crypto\x509v3\v3_pci.c
crypto\x509v3\v3_pcia.c

해결 방법은 간단합니다. 문제가 되는 확장 ASCII 문자(ö)는 소스 파일 첫 부분(line 5)에 있는 주석 중 저작권 표기 부분에 포함되어 있습니다.

/* Copyright (c) 2004 Kungliga Tekniska Högskolan

그러므로, 적절한 텍스트 편집기로 열어서 그 이름 부분을 지우고 저장한 다음 빌드하면 됩니다. (주의: OpenSSL 라이센스 정책에 따라, 배포하는 소스에서 위 저작권 관련 표기를 삭제하는 것은 허용되지 않습니다. 이것은 단지 빌드 시에 오류를 피하기 위한 방법일 뿐입니다.) 혹은 그냥 소스를 UTF-8 인코딩으로 변환해서 저장해주면 됩니다.

2011년 3월 20일 일요일

PChat - Windows 환경에서 쓸만한 IRC 클라이언트

Windows 환경에서 쓸만한 IRC 클라이언트 프로그램이라면 mIRC, XChat, KVIrc 정도가 있지 않을까 생각하는데, mIRC는 무료 소프트웨어가 아니고, 오픈소스 소프트웨어인 XChat마저도 공식 홈페이지에서 배포하는 Windows용 설치본은 일정 비용을 지불하고 구매해야만 합니다. -- 그러고 보니 비록 기본적인 수준의 기능일 뿐이지만 Opera 브라우저와 다중 프로토콜 메신저 Pidgin도 IRC를 지원네요.

완전히 무료로 사용할 수 있는 KVIrc는 QT 기반으로 개발된 다중 플랫폼 지원 IRC 클라이언트인데, 다른 IRC 클라이언트들에 비해서 약간 더 무거운 느낌은 있지만, 화려한 테마나 색상, 여러 가지 강력한 추가 기능들을 고려했을 때 상당히 좋은 IRC 클라이언트 프로그램이라고 할 수 있습니다. 그런데 직접 사용해본 바로는 아직 한글 인터페이스를 제공하지 않고 있고, 채팅창에 출력되는 일부 한글 문자들이 간혹 깨지는 현상이 있더군요. 한글 인터페이스는 없어도 크게 상관이 없지만, 채팅 내용이 가끔 깨지는 건 꽤 문제가 되는 부분이 아닐 수 없습니다. 결국 KVIrc는 단념.

그리고 근래에 다시 문득 생각이 나서 인터넷을 들쑤시고 다니다가 발견한 것이 PChat입니다. PChat은 XChat의 소스로부터 갈라져나온 것으로, XChat과 거의 유사한 기능을 제공하고 무료 Windows용 설치본도 제공합니다. 예전에 소개한 적이 있는 XChat 2 for Windows (Silverex 버전)도 비슷한 맥락이지만, 2.8.6-2 버전 이후로 더 이상 업데이트가 이루어지지 않고 있는 상황이라 PChat의 의미가 크다고 할 수 있습니다.

PChat은 현재 한글 인터페이스를 지원하고 한글 입력이나 출력에 아무런 문제가 없습니다. 서버 encoding도 잘 지원해주고 있어서 Freenode, 오징어 IRC 네트워크처럼 UTF-8을 사용하는 서버나 한IRC처럼 EUC-KR을 사용하는 서버 모두 문제 없이 접속할 수 있습니다.

[PChat 실행 모습]

PChat 다운로드 및 설치

PChat은 공식 홈페이지에서 다운로드 할 수 있습니다.

LINK: PChat Download 페이지

설치할 때는 한글 인터페이스와 확장 스크립트 기능을 사용하기 위해 몇 가지 선택을 변경해줄 필요가 있는데, 가장 무난한 옵션 선택은 아래 그림과 같습니다. Perl이나 Python, Tcl 같은 스크립트 인터프리터가 시스템에 설치되어 있고 이 언어들을 사용해서 스크립트를 작성할 생각이 있다면 해당하는 부분을 더 체크해주면 됩니다. -- Lua는 인터프리터 라이브러리가 플러그인 DLL 파일 내에 내장되어 있으므로 시스템에 별도로 Lua가 설치되어 있지 않아도 상관 없습니다.

[PChat 설치 옵션 지정]

PChat 기본 설정

취향에 따라 제법 다양하게 설정할 수 있지만, 이 글에서는 꼭 필요한 부분만 간단하게 설명하겠습니다.

네트워크 추가

File 메뉴 -> 네트워크 목록을 실행하면 네트워크 목록 대화상자가 뜹니다. 여기서 자신이 접속할 네트워크에 대한 정보를 추가해줄 수 있습니다. 기본으로 많은 네트워크들이 미리 등록되어 있는데, Freenode는 등록이 되어 있지만 주로 한국 사람들이 많이 이용하는 한IRC, 오징어 IRC 네트워크, 단군넷 등은 등록되어 있지 않습니다. 추가 버튼을 눌러서 새로운 네트워크 항목이 추가되면 이름을 변경해준 다음 편집 버튼을 눌러서 서버 주소와 닉인증 방법 등 필요한 정보를 입력해줍니다. 아래는 각각 Freenode, 한IRC, 오징어 IRC 네트워크에 대한 설정 예입니다. -- 암호 부분은 자신의 닉을 서버에 등록한 경우만 입력합니다. 그러므로, 특별히 닉을 등록해서 사용하는 것이 아니라면 그냥 비워두면 됩니다.

[Freenode 설정 - SSL 접속, UTF-8 인코딩, NickServ를 통한 닉(nick) 인증]
[오징어 IRC 네트워크 설정 - UTF-8 인코딩, 서버 자체 닉(nick) 인증 방식]
[한IRC 설정 - EUC-KR(CP949) 인코딩, 서버 자체 닉(nick) 인증 방식]

채팅창 글꼴 변경

설정 메뉴 -> 기본 설정 -> 사용자 환경 / 글월창 -> 글꼴 란 우측 찾아보기 버튼을 눌러서 채팅창의 글꼴을 변경할 수 있습니다. 한자나 전각기호문자 등을 제대로 보기 위해서는 굴림체, 돋움체, 궁서체, 바탕체 등으로 설정하는 편이 좋습니다. 그러나, 꼭 고정폭 글꼴을 고집하지 않을 경우 Segoe UI로 설정하면 좀 더 깔끔한 화면을 볼 수 있습니다.

[채팅창 글꼴 설정 - Segoe UI로 선택했다.]

기본 UI 글꼴 변경

채팅창 설정에서 글꼴을 변경해도 메뉴와 툴바 등의 기본 UI에 대한 글꼴은 변경이 되지 않습니다. PChat은 GTK 기반이므로 이 부분의 글꼴을 변경하려면 PChat 설치 폴더 아래etc/gtk-2.0/gtkrc 파일 내용을 직접 변경해주어야 합니다. 아래는 Windows Vista/7에서 시스템 기본 글꼴인 Segoe UI 10으로 설정한 파일입니다.

LINK: gtkrc

위 파일의 내용은 아래와 같습니다. 다른 글꼴로 바꾸고 싶은 분들은 gtkrc 파일을 텍스트 편집기로 연 다음 Segoe UI 10 부분을 적절히 변경해주면 됩니다. 예를 들어, 굴림으로 변경하고 싶다면 Gulim 10이 되겠죠.

style "user-font"
{
    font_name="Segoe UI 10"
}
widget_class "*" style "user-font"

마치며...

얼마 전, 웹페이지에 채팅창을 다는 내용으로 썼던 글에서 Web 기반 IRC 클라이언트를 소개한 적이 있습니다. 웹브라우저만 있으면 되고 IRC 포트가 차단된 환경에서도 IRC 서버 접속이 일부 가능하다는 장점 때문에 권장했었는데, 그래도 전용 IRC 클라이언트가 사용 가능한 환경이라면 그것을 사용하는 편이 좀 더 편리한 것은 사실입니다. 아직도 IRC를 사랑하는 많은 분들 중 Windows 환경에서 무료로 사용할 수 있는 IRC 클라이언트를 찾고 있는 분이 있다면 PChat이 좋은 답이 될 수 있을 겁니다.