개발자는 오늘도 달립니다.
[openssl] openssl 빌드 on unix / linux / windows 본문
OpenSSL 은 Eric A. Young 이 만든 SSLeay 라이브러리를 기반으로
상용수준의 데이타암복호/SSL/TLS 라이브러리를 만들기 위한 프로젝트이다.
Linux 라면 apt-get이나 yum 으로 한방에 설치 가능하지만
Unix 나 Windows 에서는 컴파일 할 일이 가끔 생겨서 빌드 방법을 정리해 본다.
사전 준비
- C/C++ Compiler가 필요하다. Windows 에서는 Visual Studio 2010 Express 버전을 사용하였고 HP-UX 에서는 aCC compiler 를 사용하였다.
- perl 이 필요하므로 Windows는 ActivePerl 이나 Strawberry Perl 을 미리 설치해 놓는다.
(대개의 Unix 는 미리 설치되어 있다.)
빌드
- openssl 홈페이지에서 라이브러리를 다운받는다.
- 압축을 풀고 나온 Install로 시작되는 파일들을 읽어 본다. 플랫폼별로 존재하며 확장자에는 플랫폼명이 있다.
예로 Win32 에서 빌드할 경우 Install.w32, Win64는 Install.w64를 참고하며 Unix는 Install 를 읽어 본다 - perl 로 작성된 ./Configure 스크립트를 수행하여 Makefile 을 생성하고 build 환경을 구성하게 된다.
기본적으로 static library 로 빌드되므로 dynamic library 로 빌드할 경우 shared 옵션을 추가한다.
※ openssl 에는 특허가 걸려있는 알고리즘이 있다. 오래되서 취약하고 쓸 일도 없는 알고리즘들이므로 다음 옵션을 꼭 추가해서 build 시 제외시키자.
no-idea no-md2 no-mdc2 no-rc5 no-rc4
openssl . Unix / Linux 빌드 방법
- ./Configure os-cpu-compiler 추가 옵션을 수행하면 된다. 다음은 HP-UX 에서 64bit 로 dynamic library 로 컴파일 하기 위한 설정이다.
./Configure hpux64-parisc2-cc shared no-md2 no-mdc2 no-rc5 no-rc4 no-asm --prefix=/usr/local ./Configure darwin-i386-cc shared no-md2 no-mdc2 no-rc5 no-rc4 --prefix=/usr/local ./Configure linux-x86_64 shared no-md2 no-mdc2 no-rc5 no-rc4 --prefix=/usr/local - PARISC HP-UX 에서 64bit로 컴파일
- OS와 compiler를 잘 모를경우 다음과 같이 ./config 를 수행하면 해당 시스템에 맞게 자동으로 진행한다.(보통 32bit 로 build 하므로 64bit 가 필요할 경우 수동으로 os/compiler 주어야 한다.)
bash-4.2$ ./config Operating system: 9000/800-hp-hpux1x WARNING! If you wish to build 64-bit library then you have to invoke './Configure hpux64-parisc2-cc' *manually*. You have about 5 seconds to press Ctrl-C to abort. |
- --prefix 옵션을 주지 않으면 기본적으로 /usr/local/ 밑에 나눠서 들어간다. header (.h)는 /usr/local/include/openssl, openssl 실행 파일은 /usr/local/bin, library 는 /usr/local/lib/openssl 폴더에 설치된다.
./config no-asm enable-seed enable-cms no-idea no-md2 no-md4 no-mdc2 no-rc2 no-rc4 no-rc5 no-zlib-dynamic - 기본적으로 정적 라이브러리(static library)로 컴파일되며 만약 동적 라이브러리(shared library) 로 컴파일할 경우 ./config 시 shared 옵션을 추가한다. (기본값 no-shared)
- 설정이 완료되었으면 make 명령어로 컴파일한다.
make depend && make
make test - 컴파일된 프로그램과 라이브러리/헤더를 설치한다. --prefix 로 경로를 지정했으므로 설치 경로는 /usr/local/ssl 이 된다.
make install
openssl . Windows 용 빌드 방법
- cmd를 열고 Visual Studio 에 포함되어 있는 vcvars32.bat를 실행해서 cmd에서 Visual C++ Compiler를 사용할 수 있게 환경 변수를 설정한다.
- 다음 명령어를 수행한다.(--prefix 뒤에는 설치될 경로를 입력)
64bit 로 빌드할 경우는 VC-WIN32 대신 VC-WIN64A 를 사용한다.perl Configure VC-WIN32 no-idea no-md2 no-mdc2 no-rc5 no-rc4 no-asm --prefix=d:\devel\openssl\openssl-1.0.0d_vc2010 - enable-static-engine 를 Configure 시 입력하면 engine 을 libeay32.dll 에 포함시킬수 있다.(기본은 별도의 dll)
- Debugging symbol로 빌드하려면 VC-WIN32 대신 debug-VC-WIN32 를 입력한다.
- Makefile을 만들기 위해 다음 명령어 실행 (32bit 빌드)
64bit 로 빌드할 경우는 ms\ do_win64a 를 실행한다.ms\do_ms.bat - nmake로 빌드 시작(static 의 경우 ms\nt.mak 를 사용)
nmake -f ms\ntdll.mak - test 를 수행하려면 다음 명령어 실행
nmake -f ms\ntdll.mak test - prefix로 지정해준 경로에 설치하려면 다음 명령어 실행
nmake -f ms\ntdll.mak install
openssl . TroubleShooting
- Windows에서 빌드시 다음 같은 오류가 나면 해당 소스 파일을 에디터에서 열어서 UTF-8 형식으로 저장하거나 소스의 처음 부분에 ''#pragma warning(disable: 4819)'' 를 추가해 준다.
- 현재 코드 페이지(number)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드 형식으로 저장하십시오.
The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss. - 어셈블러 에러가 나면 config 에 no-asm 옵션을 추가한다.
md5-x86_64.s: Assembler messages:
md5-x86_64.s:41: Error: 0xd76aa478 out range of signed 32bit displacement
openssl . Pre Compiled Binary
OpenSSL Wiki 에 Windows용 미리 컴파일 한 바이너리를 다운받을 수 있는 사이트가 정리되어 있다.
- 실행 파일과 DLL만 배포 - https://indy.fulgan.com/SSL/openssl-1.0.2h-i386-win32.zip
- header 와 library 포함 배포판 - https://slproweb.com/download/Win32OpenSSL-1_0_2h.exe
'보안' 카테고리의 다른 글
[보안 인증서] Let's Encrypt 인증서 발급 방법 with Apache (0) | 2021.09.01 |
---|
Comments