http://www.barney.pe.kr/blog/1389

현재 Apache에서는 Windows용 Apache 2.0.59 버전이하에서는 SSL을 지원하는 바이너리 파일을 제공하고 있지 않다.

지인의 다급한 요청으로 Windows용 Apache 2.0.4x(2.0.40, 2.0.43)에서 SSL이 지원하도록 컴파일을 해야했다.

필요한 소프트웨어

※ OpenSSL 0.9.8k 과 zlib 1.2.3으로 컴파일을 하려고 했으나 Apache 소스와 호환이 되지 않는 문제가 있었다.

컴파일 준비

OpenSSL 준비 및 컴파일

다운로드 받은 OpenSSL 소스를 Apache 소스의 srclib 디렉토리안에 압축 해제하고 openssl 디렉토리명으로 변경하고

Perl을 사용하여 Makefile을 생성하여 Visual C++에 포함된 nmake를 사용하여 컴파일 한다.

C:\httpd-2.0.40\srclib> ren openssl-0.9.7m openssl
C:\httpd-2.0.40\srclib> cd openssl
perl Configure VC-WIN32 --prefix=c:/USR/openssl
perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl dll no-asm no-mdc2 no-rc5 no-idea VC-WIN32 > Makefile.win
perl util\mk1mf.pl dll debug no-asm no-mdc2 no-rc5 no-idea VC-WIN32 > Makefile.dbg
perl util\mkdef.pl 32 libeay no-asm no-mdc2 no-rc5 no-idea > ms\libeay32.def
perl util\mkdef.pl 32 ssleay no-asm no-mdc2 no-rc5 no-idea > ms\ssleay32.def
nmake -f Makefile.win
nmake -f Makefile.dbg

zlib 준비

다운받은 zlib 소스를 역시 Apache 소스의 srclib 디렉토리 안에 압축 해제하고 zlib 디렉토리명으로 변경한다.

zlib는 사전에 컴파일 할 필요가 없다.

C:\httpd-2.0.40\srclib> ren zlib-1.1.4 zlib

Makefile 수정

Visual C++의 IDE에서 컴파일을 해도 되지만 편의를 위해서 명령 프롬프트에서 컴파일할 수 있도록 Makefile을 수정한다.

이렇게 수정하는 이유는 Apache 소스에 포함된 Makefile이 OpenSSL 0.9.7m 및 zlib 1.1.4 소스의 정의 값이 일치하지 않기 때문이다.

  1. Visual C++ 실행 > Project > Setting 메뉴 선택
  2. 왼쪽의 빌드 대상에서 abs 를 선택하고, Settings For를 All Configurations 로 선택
  3. 오른쪽의 C/C++ 탭을 선택하고 Preprocessor definitions에 ,OPENSSL_NO_RC5,OPENSSL_NO_IDEA,OPENSSL_NO_MDC2 추가 (처음에 콤마가 있어야 하며 이미 동일한 정의 값이 있는 경우는 필요 없음)
  4. 왼쪽의 빌드 대상에서 mod_deflate 를 선택하고, Settings For를 All Configurations 로 선택
  5. 오른쪽의 C/C++ 탭을 선택하고 Preprocessor definitions에 ,_WIN32 추가
  6. 왼쪽의 빌드 대상에서 mod_ssl 을 선택하고, Settings For를 All Configurations 로 선택
  7. 오른쪽의 C/C++ 탭을 선택하고 Preprocessor definitions에 ,OPENSSL_NO_RC5,OPENSSL_NO_IDEA,OPENSSL_NO_MDC2 추가 (이미 있는 경우는 필요 없음)
  8. OK 클릭
Visual C++ 6.0 Project Setting

Visual C++ 6.0 Project Setting

  1. Project > Export Makefile 메뉴 선택
  2. 기본적으로 모두 선택되어 있으므로 Select All 클릭 후 선택항목를 클릭하여 모두 선택 해제
  3. abs, mod_deflate와 mod_ssl 만 체크하고 OK 클릭
Visual C++ 6.0 Project Export Make

Visual C++ 6.0 Project Export Make

컴파일

이제 모든 컴파일 준비가 끝났다.

컴파일 대상은 다음과 같다.

  • _apacher: 릴리즈 모드로 컴파일
  • _apached: 디버그 모드로 컴파일
  • installr: 릴리즈 모드로 컴파일 후 설치
  • installd: 디버그 모드로 컴파일 후 설치
  • clean: 생성된 파일 삭제
  • _cleanr: 릴리즈 모드로 컴파일 할 때 생성한 파일 삭제
  • _cleand: 디버그 모드로 컴파일 할 때 생성한 파일 삭제

선택 사항은 다음과 같다.

  • INSTDIR: 설치 디렉토리 (기본 값: Apache2)
  • PORT: 포트 (80)
  • SERVERNAME: 서버명 (localhost)

예로는 포트 번호를 80으로 설정하고 설치 디렉토리를 C:USRApache-2.0.40으로 지정하고 릴리즈 모드로 컴파일 하고 설치하도록 했다.

C:\httpd-2.0.40> nmake /f Makefile.win PORT=80 INSTDIR="C:\USR\Apache-2.0.40" installr

참고

+ Recent posts