현재 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 클릭
- Project > Export Makefile 메뉴 선택
- 기본적으로 모두 선택되어 있으므로 Select All 클릭 후 선택항목를 클릭하여 모두 선택 해제
- abs, mod_deflate와 mod_ssl 만 체크하고 OK 클릭
컴파일
이제 모든 컴파일 준비가 끝났다.
컴파일 대상은 다음과 같다.
- _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
참고
'Infrastructure' 카테고리의 다른 글
openssl-for-windows (0) | 2009.11.20 |
---|---|
Win32 기반 서버에서 (Apache + Tomcat) WAS 의 SSL 적용 (0) | 2009.11.20 |
Apache Module mod_ssl (0) | 2009.11.20 |
Apache + SSL on Windows 관련 URL (0) | 2009.11.20 |
윈도우 아파치 ssl 설치방법(window apache ssl) (0) | 2009.11.20 |