Windows용 Apache 2.0.4x 에서 SSL 지원하도록 컴파일
현재 Apache에서는 Windows용 Apache 2.0.59 버전이하에서는 SSL을 지원하는 바이너리 파일을 제공하고 있지 않다.
지인의 다급한 요청으로 Windows용 Apache 2.0.4x(2.0.40, 2.0.43)에서 SSL이 지원하도록 컴파일을 해야했다.
필요한 소프트웨어
- Microsoft Visual C++ 6.0
- ActivePerl 5.10.0
- Windows용 Apache 2.0.40 소스
- OpenSSL 0.9.7m 소스
- zlib 1.1.4 소스
※ 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 소스의 정의 값이 일치하지 않기 때문이다.
- Visual C++ 실행 > Project > Setting 메뉴 선택
- 왼쪽의 빌드 대상에서 abs 를 선택하고, Settings For를 All Configurations 로 선택
- 오른쪽의 C/C++ 탭을 선택하고 Preprocessor definitions에 ,OPENSSL_NO_RC5,OPENSSL_NO_IDEA,OPENSSL_NO_MDC2 추가 (처음에 콤마가 있어야 하며 이미 동일한 정의 값이 있는 경우는 필요 없음)
- 왼쪽의 빌드 대상에서 mod_deflate 를 선택하고, Settings For를 All Configurations 로 선택
- 오른쪽의 C/C++ 탭을 선택하고 Preprocessor definitions에 ,_WIN32 추가
- 왼쪽의 빌드 대상에서 mod_ssl 을 선택하고, Settings For를 All Configurations 로 선택
- 오른쪽의 C/C++ 탭을 선택하고 Preprocessor definitions에 ,OPENSSL_NO_RC5,OPENSSL_NO_IDEA,OPENSSL_NO_MDC2 추가 (이미 있는 경우는 필요 없음)
- OK 클릭

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

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