Programming

OpenSSL VC에서 Compile하기

콜러스 XXII 2007. 8. 30. 13:04

 

OpenSSL을 한번씩 프로그램에 적용해야 할 경우가 있을 것이다. 나도 또한 필요할 때 이용하게 되는데 굳이 통신뿐만 아니라 보통의 데이타를 Encrypt/Decrypt하는데도 쓰일 수 있다. MSCryptAPI보다 더 기능이 많지만 쓰기 어렵다.

 

일단 소스는 www.openssl.org에서 다운로드 받을 수 있다. 보통 Linux에는 패키지로 같이 있지만 윈도에는 없으므로 Compile을 해야만 한다. 사전에 Active Perl (http://www.activestate.com)을 다운로드 받아서 설치해 두어야 한다. 그리고 Compiler VS2005에서 한다고 가정한다. 지금 현재의 OpenSSL 버전은 0.9.8e라고 하네...

 

다음은 Compile 절차이다. (INSTALL.W32에 있는 내용이다. -.-a)

 

1. 압축을 푼다.

 

2. VS2005 Command Prompt를 연다.

 

3. OpenSSL 압축 푼 곳의 Root Folder로 이동한다.

 

4. 다음을 입력해서 실행한다.

 

   perl Configure VC-WIN32 --prefix=C:/openssl

  

   C:/OpenSSL Compile결과를 두겠다는 말이다. 원하는 곳에 두자.

  

5. 다음을 입력해서 실행한다.   

 

   ms\do_masm

 

6-1. ms\ntdll.mak를 에디터로 연다. 위에서 좀 내려 오다보면 CFLAG 라인이 있다. 이 라인에 보면 /WX라는 것이 있는데 이것을 없애야 한다Warning Error로 취급해서 Compile이 안되게 하는 것이다그냥 해보면 Warning이 하나 나오는데 소스 문자셋이 Unicode어쩌고 하는 것이다. 그냥 무시하면 된다. 즉 다음과 같은 라인을

    

     CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE

         

     다음과 같이 하라는 말이다.

    

     CFLAG= /MD /Ox /O2 /Ob2 /W3 /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE

    

     혹시 모르니깐 ms\nt.mak도 같이 손봐두자.    

  

6-2. 다음을 입력해서 실행한다.   

 

   nmake -f ms\ntdll.mak  

  

7. 다음을 입력해서 실행한다. 라이브러리가 잘 만들어 졌는지 Test 하는 것이다.  

 

   nmake -f ms\ntdll.mak test 

  

   실행 뒤엔 반드시 passed all test라는 말이 마지막에 나와야 한다.  

  

8. 다음을 입력해서 실행한다.

  

   nmake -f ms\ntdll.mak install

  

   그러면 C:\OpenSSL에 각종 파일들이 보관 될 것이다.

  

 

다음은 OpenSSL을 처음 시작하기에 좋은 참고 사이트이다.

 

http://www.ibm.com/developerworks/kr/library/l-openssl.html?ca=drs-kr

 

OpenSSL은 자체 BIO라는 것을 이용해서 BSD기반의 Socket을 바로 이용 할 수도 있고 나름의 Socket을 만들어서 그 위에 얹어도 된다. IOCP에도 가능은 하지 싶다.