2014. 4. 10. 17:40

Visual Studio 2008 (VC9.0)에서 Open SSL X86/X64 빌드하기

최근 openssl의 heartbeat 버그 취약점으로 새로운 버전(1.0.1g)이 릴리즈되었습니다.

이에 즈음하여, openssl를 윈도우에서 빌드하는 방법을 다시 정리하여 공유합니다.


[Research/Etc] - OpenSSL VC9.0에서 빌드하기

와 유사하게, X86과 X64를 함께 빌드하는 스크립트를 정리하겠습니다.


우선 빌드를 위해서, 위 "OpenSSL VC9.0"에서 언급한것 같이,


1) OpenSSL Source 다운로드
http://www.openssl.org/source/

2) 빌드 머신에 Active Perl 설치
http://www.activestate.com/activeperl/downloads


작업이 진행되어야 합니다.


Build.openssl-1.0.1g.zip

의 압축을 풀어,

와 같이 Build.bat를 실행하면,


아래와 같이 Build 경로와 함께 X86과 X64 두개의 빌드가 작성됩니다.

두개의 platform 모두 각각의 include가 있으며(서로 조금 다름), bin에는 배포 가능한 dll이 포함되어 있습니다. 물론, 해당 dll은 재배포 가능 패키지 혹은 private assembly가 필요할 수 있습니다.

이를 방지 하기 위해서는, Build.X64.bat / Build.X86.bat에,

call nmake -f ms\ntdll.mak clean

call nmake -f ms\ntdll.mak

call nmake -f ms\ntdll.mak install

call nmake -f ms\ntdll.mak clean

==>

call nmake -f ms\nt.mak clean

call nmake -f ms\nt.mak

call nmake -f ms\nt.mak install

call nmake -f ms\nt.mak clean

와 같이 각각 수정하면 재배포 가능 패키지와 같은 다른 의존성없이 실행 가능한 바이너리가 생성됩니다.


lib 경로에는 libeay32.lib, ssleay32.lib가 포함되어 있는데, 해당 lib를 link하여 사용하여 빌드할 수 있습니다. 단, 해당 모듈은 libeay32.dll과 libeay32.dll 의존성이 생기게 됩니다. 즉, 해당 dll 파일이 함께 배포되어야 합니다. 역시, 이러한 의존성을 제거하려면, 위 녹색 영역과 같이 ntdll.mak -> nt.mak으로 수정하시기 바랍니다. 그러면, 단독 빌드본으로 만들 수 있습니다.


Build.bat를 수정하여, 경로를 설정할 수 있습니다.

SET BUILDBASEPATH=%CD%\Build

SET OPENSSLNAME=openssl-1.0.1g

즉, 최종 build 경로를 설정할 수 있으며, 빌드할 openssl 빌드명을 넣어야 합니다.

실제 OPENSSLNAME은 openssl의 source 경로를 찾는데 응용됩니다.


[주의 사항]

- 앞선 설명과 같이, 재배포 가능 패키지 의존성이 있습니다. 의존성을 제거하려면, nt.mak로 수정하여  사용하십시요.

- 앞선 설명과 같이, libeay32.dll, libeay32.dll 의존성이 있습니다. 의존성을 제거하려면, nt.mak로 수정하여 사용하십시요.

- 사용시 각 platform (X86/X64) 별로 include를 분리하는 것이 좋습니다.

- Build.*.bat에는 에러 처리가 없습니다. call 다음에

   IF %ERRORLEVEL% NEQ 0 GOTO FAILURE

  와 같이 처리하면 좋습니다.