OpenSSL ์ปดํ์ผ(compile) & ๋น๋(build)
๊ฐ์
OpenSSL ์ Eric A. Young ์ด ๋ง๋ SSLeay ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฉ์์ค์ ๋ฐ์ดํ์๋ณตํธ/SSL/TLS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ๋ก์ ํธ์ด๋ค.
Linux ๋ผ๋ฉด apt-get์ด๋ yum ์ผ๋ก ํ๋ฐฉ์ ์ค์น ๊ฐ๋ฅํ์ง๋ง Un*x ๋ 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
Unix / Linux ๋น๋ ๋ฐฉ๋ฒ
./Configure os-cpu-compiler ์ถ๊ฐ ์ต์ ์ ์ํํ๋ฉด ๋๋ค. ๋ค์์ HP-UX ์์ 64bit ๋ก dynamic library ๋ก ์ปดํ์ผ ํ๊ธฐ ์ํ ์ค์ ์ด๋ค.
ยPARISC HP-UX ์์ 64bit๋ก ์ปดํ์ผ./Configure hpux64-parisc2-cc shared no-md2 no-mdc2 no-rc5 no-rc4 no-asm --prefix=/usr/local
Mac OSX์์ 64bit๋ก ์ปดํ์ผ./Configure darwin-i386-cc shared no-md2 no-mdc2 no-rc5 no-rc4 --prefix=/usr/local
Linux 64bit๋ก ์ปดํ์ผ./Configure linux-x86_64 shared no-md2 no-mdc2 no-rc5 no-rc4 --prefix=/usr/local
- 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 ํด๋์ ์ค์น๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(static library)๋ก ์ปดํ์ผ๋๋ฉฐ ๋ง์ฝ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(shared library) ๋ก ์ปดํ์ผํ ๊ฒฝ์ฐ ./config ์ shared ์ต์ ์ ์ถ๊ฐํ๋ค. (๊ธฐ๋ณธ๊ฐ no-shared)
./config no-asm enable-seed enable-cms no-idea no-md2 no-md4 no-mdc2 no-rc2 no-rc4 no-rc5 no-zlib-dynamic
์ค์ ์ด ์๋ฃ๋์์ผ๋ฉด make ๋ช ๋ น์ด๋ก ์ปดํ์ผํ๋ค.
make depend && make make test
์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/ํค๋๋ฅผ ์ค์นํ๋ค. --prefix ๋ก ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ผ๋ฏ๋ก ์ค์น ๊ฒฝ๋ก๋ /usr/local/ssl ์ด ๋๋ค.
make install
Windows ์ฉ ๋น๋ ๋ฐฉ๋ฒ
- cmd๋ฅผ ์ด๊ณ Visual Studio ์ ํฌํจ๋์ด ์๋ vcvars32.bat๋ฅผ ์คํํด์ cmd์์ Visual C++ Compiler๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค.(--prefix ๋ค์๋ ์ค์น๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ)
ย 64bit ๋ก ๋น๋ํ ๊ฒฝ์ฐ๋ VC-WIN32 ๋์ VC-WIN64Aย ๋ฅผ ์ฌ์ฉํ๋ค.32bit ๋ก ๋น๋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์ ๋ง๋ค๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด ์คํ
ย 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
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
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