안녕하세요. 까막임돠~

오랜만에 글을 쓰네요, 언제나 항상 오랜만인... 게으른 까막 ㅡㅠ;


오늘은 최근 Open SSL 1.0.2 를 적용하면서 나온 부산물을 글로 적어볼까 합니다.

항상 그렇듯이 windows 기반이고요, 이제는 64 bit OS 만 대상으로 작업을 하게 되네요.

32 bit 는 빌드 환경만 바꾸면 되니, 사실 2개의 작업은 차이가 없습니다.


개발 환경은 Windows 2008 Server R2 x64 이고요, 툴은 MSVS-2013 공짜 버전을 사용하였습니다.


1. 우선 최신 버전을 다운 받아야 겠죠?

   https://www.openssl.org/source/


2. Active Perl 사이트에서 커뮤니티 에이션을 다운 받습니다.

   http://www.activestate.com/activeperl/downloads


3. 소스는 적당한 곳에 압축을 풀고, 펄은 설치를 합니다.


4. MSVS 2013 에서 콘솔 컴파일을 하려면 손으로 환경설정하는 노가다가 아주 끝내줍니다.

   자동으로 이런 환경을 제공해주니 사용해 주어야 겟지요..ㅎ

  

  

   해당 메뉴를 이용하면 다음과 같은 창이 열립니다.



  

  64비트 컴파일 환경을 수행하면 이런 환경 변수가 모두 적용된 cmd 창이 뜹니다.

  모든 작업이 완료될 때까지 쭉 써야할 이쁜이죠..


5. 우선 기본 소스가 풀린 폴더 BASE 라고 표현하죠. 해당 경로로 cmd 창에서 이동합니다.

   가장 첫 번째 작업으로 perl 을 이용하여 64비트 빌드 환경을 마춰주죠.

   cmd> perl Configure VC-WIN64A


   두 번째로. win64a 배치 파일을 수행하여 빌드 환경을 다시 마춰줍니다.

   cmd> ms\do_win64a


   마지막으로, nmake를 이용하여 빌드하면 끝~

   cmd> nmake -f ms\ntdll.mak


   이렇게만 해줘도, BASE 폴더에 out32dll 폴더와, tmp32dll 폴더에 빌드된 파일이 쭉 생기죠.

   모든 lib, dll, exe 는 BASE\out32dll 폴더에 다 들어있습니다.


   이번 1.0.2 버전은 windows 빌드 환경에 세심하게 신경썼는지, 아주 이쁘게 한방에 빌드가 되네요.

   

6. 이렇게 만 끝내면 상당히 아쉽지요?

   다음으로는 보통 가져다 쓰는 libeay32.lib 및 ssleay32.lib 를 사용하게 되는데, 이것 저것 좀 건드리다 보면

   unresolved external symbol 에러를 마주 치는 경우가 많습니다.

   

   분명 소스에는 있는 함수인데, 내가 만드는 프로그램에서 호출해서 쓰면 못쓰는 경우죠.

   라이브러리를 만들 때, 해당 함수를 export 하지 않았기 때문에 외부에서 못쓰는 거죠.


   BASE 폴더의 하위 폴더중에 util 폴더가 있습니다.

   libeay.num파일과 ssleay.num 파일이 있습니다. 


   내가 호출하는 함수가 어느 라이브러리 연관있는지는 개발자 본인이 가장 잘 알테고,

   그렇게 사용해야할 함수를 해당 파일을 열어서 등록해주면 됩니다.

   

   노트패드나 다른 에디터로 열어보시면 그냥 아실 수 있습니다.


   문제는 이러한 export 등록만 하면 되는게 아니고, 해당 함수의 정의부를 사용하는 해더에도 정의 해주어야 합니다.

   BASE\SSL\ssl.h 파일에 내가 사용하는 함수의 정의부를 함께 기록해주어야 합니다.


   이렇게 해주시면 ssl 내부의 함수도 내가 만드는 프로그램에서 자유자재로 쓸 수 있습니다.

 

   요렇게 해서 5번 과정을 이용하여 빌드하고 나면 ms 폴더에 있는 ssleay32.def 나 libeay32.def 파일에 추가한 함수가

   등록되어 있는걸 볼 수 있습니다. 사실 요걸 직접 수정해도 되는데, 환경 설정할 때마다 자동으로 덮어써지는 파일이기 

   때문에 귀찬고 실수 할 여지가 많죠.


7. ssl 을 이용하여 개발할 때 필요한 필수 항목이 디버깅 환경을 갖추는 거죠?

   지금까지는 그냥 release 환경 하에서, 쓸 수 만 있는거지 디버깅은 안됩니다.


   설치 폴더의 ms 폴더에 가서 do_win64a.bat 를 복사하여, do_win64a_debug.bat 파일을 하나 만듭니다.


   

   이 그림이 오리지널 파일이고요.



   

   요 그림이 디버깅 환경으로 변경한 그림입니다. 아주 쉽죠 @.@???

   cmd> ms\do_win64a_debug 

   cmd> nmake -f ms\ntdll_debug.mak


   이렇게 빌드하시면, 디버깅 환경도 짠 갖췄습니다.

   

   라이브러리나 dll 을 .dbg 폴더에 있는걸 가져다 쓰시면 디버깅 준비도 끝났습니다.


8. 이렇게 openssl 1.0.2 를 디버깅 환경하에서 사용할 수 있도록 모든 준비가 끝났지만

   openssl.exe 툴을 이용하여 디버깅을 하려면 저 소스를 이용해서 직접 빌드하고 수정할 수 있어야겠지요?

   저 실행 파일을 직접 디버거에 물려서 소스랑 같이 수정해가면서 빌드하면 좋겠지요?

    

sample.zip


   위의 sample.zip 파일의 압축을 풀어서 해당 내부에 있는 파일 4개를 BASE 폴더의 하부에 있는 apps 폴더에 

   복사하여 넣어 둡니다.

   

   요렇게 선택된 4개의 파일입니다.


   openssl.vcxproj 프로젝트 파일을 열어서 간단하게 F5 키를 눌러서 빌드해 줍니다.


   8.1 아무 문제 없으면 좋겠지만 첫번째 오류는 e_os.h 를 찾을 수 없다는 겁니다.

      BASE\tmp32dll 폴더나 BASE\tmp32dll.dbg 폴더에 있는 e_os.h 를 복사하여

      BASE\apps 폴더에 넣어주고, 다시 빌드 합니다.


   8.2 이렇게 끝나주면 가장 좋구요. 다음과 같이 winsock  관련 오류가 뜨면 한가지 작업을

      더 진행해 주어야 합니다.



     그림과 같이 윈속 관련된 에러가 뜬다. 저번 버전은 안그랬는데.. 안뜨면 좋고 위와 같이 윈속 관련 에러가 뜨면 apps.c 파일의 다      음 위치에 아래 코드를 추가한다.



     

     요렇게 한줄 추가해 주시고, 빌드해주시면 이제 openssl.exe 플젝을 디버거를 걸어 가면서 놀 수 있습니다.

     새로운 플젝을 만들 때도, 위에 소스 대충 가져다 만들면 별다른 문제 없이 쓸 수도 있구요..




     해당 플젝에 디버거 걸어서 소스 트레이스 하는 모습입니다.

     모두 잼난 열공.. 하셔요.. ~





   



SSL Cipher Suites Issue


Windows RT 8.1, Windows 8.1 and Windows Server 2012 R2 Update April, 2004 

해당 업데이트에서 신규 Cipher 와 보안상 문제 취급되던 TLS_RSA_WITH_RC4_128_MD5, TLS_RSA_WITH_RC4_128_SHA

이슈가 발생하고 있네요. 문서상에서는 위 2개의 Cipher를 지원하는 것으로 기록되어 있지만 업데이트된 서버나 

클라이언트 OS의 특성에 따라 해당 2개의 Cipher 가 SSL Cipher Order List에서 사라지는 현상이 있습니다.


또한 Windows 7, Windows Server 2008 부터 Cipher top order 에 있던 AES가 클라이언트 오더링에서 하위로 밀리는

현상도 발생하고 있어서 TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA 해당 우선 순위가 

밀려서 다른 Cipher 로 통신하는 현상도 발생되고 있는데.. 같은 OS를 가진 여러서버를 업데이트 하였을 경우

간혹 위 문제를 발생시키는 서버가 발견되고 있습니다.



아래는 해당 업데이트로 새로 추가된 Cipher들의 목록

Cipher suite

FIPS mode enabledProtocolsExchangeEncryptionHash
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384YesTLS 1.2DHAESSHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256YesTLS 1.2DHAESSHA256
TLS_RSA_WITH_AES_256_GCM_SHA384YesTLS 1.2RSAAESSHA384
TLS_RSA_WITH_AES_128_GCM_SHA256YesTLS 1.2RSAAESSHA256

 

아래는 해당 업데이트 이후 새로 정렬된 기본 오더 리스트

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_AES_128_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384 TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 TLS_DHE_DSS_WITH_AES_256_CBC_SHA TLS_DHE_DSS_WITH_AES_128_CBC_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA TLS_RSA_WITH_RC4_128_SHA TLS_RSA_WITH_RC4_128_MD5 TLS_RSA_WITH_NULL_SHA256 TLS_RSA_WITH_NULL_SHA SSL_CK_RC4_128_WITH_MD5 SSL_CK_DES_192_EDE3_CBC_WITH_MD5


현재 위의 분홍색2개로 통신하던 어플리케이션들은 분명 오더 리스트에 있음에도 불구하고 통신이 안되는 

폭탄을 맞는 일이 발생하고 있습니다.. 


저 같은 경우는 그런 경우는 아닙니다만, 젤 위의 파랑생 Cipher를 지원하기 위한 OpenSSL 업데이트 작업

그에 따른 프로그램 수정, 테스트와 배포.. 여러가지 폭탄을 맞은듯 ㅠㅠ;;;

요건 MS기술 링크: http://support.microsoft.com/kb/2929781


프로그램을 작성하다 보면, 처음에 제일 문제였던것이 bio 설정에 관한 것이었다.
컴파일해서 잘 돌아가다가 bio 에 멀 쓰던가 하면 OPENSSL_Uplink(00509010,07): no OPENSSL_Applink 
위와 같은 에러가 발생하여 사람 참~ 난감하게 만든다.

처음에는 저걸 해결하지 못해서, bio 쓰는 부분을 몽땅 털어버리는 무식한 노가다를 하기도 했었다.

혹시나 비슷한 에러로 고생하는 사람이 없도록 http://www.openssl.org/support/faq.html 에 나와 있는 내용중에
위 에러를 해결하기 위한 방법을 적어본다.

아래는 해당 사이트 원문이다.
결국은 프로그램을 설정할 때 스레드 모델을 아래 사항에 맞도록 설정해 주면 아주 미끈하게 잘 돌아간다 -_-;;;
디버깅 하느라 날려버린 내 아까운 시간 흐~~

2. I've compiled a program under Windows and it crashes: why?

This is usually because you've missed the comment in INSTALL.W32. Your application must link against the same version of the Win32 C-Runtime against which your openssl libraries were linked. The default version for OpenSSL is /MD - "Multithreaded DLL".

If you are using Microsoft Visual C++'s IDE (Visual Studio), in many cases, your new project most likely defaulted to "Debug Singlethreaded" - /ML. This is NOT interchangeable with /MD and your program will crash, typically on the first BIO related read or write operation.

For each of the six possible link stage configurations within Win32, your application must link against the same by which OpenSSL was built. If you are using MS Visual C++ (Studio) this can be changed by:

 1. Select Settings... from the Project Menu.
 2. Select the C/C++ Tab.
 3. Select "Code Generation from the "Category" drop down list box
 4. Select the Appropriate library (see table below) from the "Use
    run-time library" drop down list box.  Perform this step for both
    your debug and release versions of your application (look at the
    top left of the settings panel to change between the two)

Single Threaded /ML - MS VC++ often defaults to this for the release version of a new project. Debug Single Threaded /MLd - MS VC++ often defaults to this for the debug version of a new project. Multithreaded /MT Debug Multithreaded /MTd Multithreaded DLL /MD - OpenSSL defaults to this. Debug Multithreaded DLL /MDd

Note that debug and release libraries are NOT interchangeable. If you built OpenSSL with /MD your application must use /MD and cannot use /MDd.

As per 0.9.8 the above limitation is eliminated for .DLLs. OpenSSL .DLLs compiled with some specific run-time option [we insist on the default /MD] can be deployed with application compiled with different option or even different compiler. But there is a catch! Instead of re-compiling OpenSSL toolkit, as you would have to with prior versions, you have to compile small C snippet with compiler and/or options of your choice. The snippet gets installed as <install-root>/include/openssl/applink.c and should be either added to your application project or simply #include-d in one [and only one] of your application source files. Failure to link this shim module into your application manifests itself as fatal "no OPENSSL_Applink" run-time error. An explicit reminder is due that in this situation [mixing compiler options] it is as important to add CRYPTO_malloc_init prior first call to OpenSSL.


소스 컴파일을 마치고, 필요한 프로젝트에 넣어서 사용하는데는 별 문제가 없지만..
역시나 문제가 생기면 디버깅을 해야죠.

ms\do_ms.bat 를 보시면 다음과 같이 나와있습니다.

perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def

위의 환경은 일반적인 디버깅이 빠진 상태의 메이크 파일을 만드는 과정이고..
아래와 같이 debug 라고 하는 키워드를 추가하시면 디버깅이 가능한 메이크 파일을 생성해 줍니다.

perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl dll debug no-asm VC-WIN32 >ms\ntdll.mak
perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def

저렇게 수정하신 후 command line 에서 ms\do_ms.bat 를 돌리시면 새로운 환경 설정이 적용된 ntdll.mak 파일 생성됩니다.
해당 파일을 열어 보시면 다음과 같이 바껴 있는걸 볼 수 있습니다.

CFLAG= /MDd /Od -DDEBUG -D_DEBUG /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 -DOPENSSL_USE_APPLINK -I. /Fdout32dll -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_CMS -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE    

일단 저렇게 만들어서 컴파일을 해보니 out32dll.dbg tmp32dll.dbg 처럼 디버깅용 폴더가 생기면서 필요한 파일이 작성됩니다.
그런데, 메뉴얼 대로 다 해서 소스와 물려 돌려봤는데, -_-??? 역시나 디버깅시 openssl 함수 호출부를 추적하면 내부로 못들어 가네요.

CFLAG= /nologo /MDd /W3 /Gm /GX /ZI /Od /I /FR"Debug/" -DDEBUG -D_DEBUG   -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DOPENSSL_USE_APPLINK -I. /Fdout32dll -DOPENSSL_NO_RC5  -DOPENSSL_NO_MDC2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_CMS -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED

위에 꺼는 이전에 맨땅에 해딩하면서 만들었던 (0.9.8b 버전 당시..) 내용을 추려서, 0.9.8i 버전에 맞도록 수정한 내용입니다.

이렇게 수정해 놓고, 다시 몽땅지우고 재컴파일 한 후, 새로 생성된 라이브러리와 dll을 복사해놓고.. 
작업 프로그램을 빌드 한 후, 소스 추적에 들어가니 ssl 소스로도 잘 추적이 들어가네요.. 

수고하세요..

PS. 다 만들어진 라이브러리를 작업하는 프로젝트에 첨부하고 빌드했을 때, unresolved external symbol 류의 에러가 발생하면
      ssleay32.def 에 해당 함수를 추가 하시면 됩니다. 참고로 ssleay32.def의  마지막 오디너리 넘버가 293번 이니까..
      294번 부터 추가하세요.. 그리고, openssl 을 다시 한번 빌드하셔서 복사하시고 사용하시면 됩니다.


 

지금까지 0.9.8b 버전을 사용하다가, 추가된 cipher를 지원하기 위하여 0.9.8i 버전을 사용하게 되었습니다.
이거 받아서 컴파일 하다보니, 이전 버전과는 또 다른 문제가 튀어나오네요..ㅎㅎ;
이런 종류의 라이브러리 받아서 처음 컴파일하다보면 당황스런 경우가 많은데요 도움이 되셨으면 합니다.

1. ActivePerl 다운 받아서 설치하세요.
   http://www.activestate.com/Products/activeperl/index.mhtml
   경로에서 다운 받고, 그냥 인스톨 하시면 됩니다.

2. Perl 의 사용상 편의를 위해서 Perl의 설치 경로를 환경 변수에 등록해 주시면
   지속적으로 사용하는데 아주 편합니다.

   
   제어판->시스템->고급 탭을 선택합니다.
 


  
  환경변수를 클릭한다.
 


  편집을 클릭한다.
 


  제일 끝에, 세미콜론을 하나 찍고, 펄의 bin 경로를 추가한다.
  이렇게 되면 어떤 경로에서든 Perl을 바로 실행할 수 있다.

3. 다음으로 VC-WIN32 환경에서 컴파일 할수 있도록 컴파일 환경을 설정한다.
   => perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
   => 위의 예에서 처럼 오픈SSL을 압축 풀어서 놓은 경로를 지정하여 환경을 설정한다.

4. 필요한 Makefile과 관련 오브젝트를 생성한다.
   openssl의 경로로 가서, 콘솔창에 아래의 명령중에 하나를 입력한다.
   별문제 없이 넘어가고 싶으면 ms\do_ms 를 추천한다.

   => masm 이 있으면 > ms\do_masm
   => nasm 이 있으면 > ms\do_nasm
   => 어셈블러 없으면> ms\do_ms

5. 이제 본격적으로 컴파일을 해보자.

   => nmake -f ms\ntdll.mak
   => 처음에 컴파일을 하면 제일 먼저 만나는 에러다, 에러 문구는 이것 저것 복잡한게 있지만 필요한 내용은 이거다.
  
  .\crypto\cversion.c(105) : warning C4129: 'k' : unrecognized character escape sequence

   => 해당 파일을 소스를 에디트 할수 있는 툴을 이용하여 열어보자.
   => 저위에서 'k'는 프로그램의 설치경로에 따라 각각 다른 캐릭터로 나타날 수 있다.

   #ifdef OPENSSLDIR
      return "OPENSSLDIR: \"" OPENSSLDIR "\"";
   #else
      return "OPENSSLDIR: N/A";
   #endif

   위의 빨간색 부분을 아래와 같이 바꾼다.

   #ifdef OPENSSLDIR
      return "OPENSSLDIR: \" OPENSSLDIR \"";
   #else
      return "OPENSSLDIR: N/A";

  대충 원인을 살펴보면, 프로그램(openssl) 설치 경로를 를 나타내는데 "가 앞뒤로 하나 더 붙어있어서 발생하는 문제이다.
  아마도 윈도우와 유닉스의 경로 구분문자 차이 때문에 발생하는 것으로 추측된다.

  이걸 잘 처리하고 컴파일을 다시 진행하면 다음과 같은 또다른 비슷한 유형의 에러를 만나게 된다.

  .\crypto\x509\x509_def.c(65) : warning C4129: 'K' : unrecognized character escape sequence
   => 열심히 해당 파일을 열어서 살펴보자.

   => ./crypto/x509/x509_def.c
   아래의 빨간색 항목을 주목하자, 윈도우즈에서는 저걸 프로그램 코드에 밖기 위해서는 역슬래시 두개로 바꾸어 주어야한다.
   #ifndef OPENSSL_SYS_VMS
   #define X509_CERT_AREA  OPENSSLDIR
   #define X509_CERT_DIR  OPENSSLDIR "/certs"
   #define X509_CERT_FILE  OPENSSLDIR "/cert.pem"
   #define X509_PRIVATE_DIR OPENSSLDIR "/private"
  
   => 자 다음과 같이 바꾸자 (웹에디터 때문인지, 글자 아래 밑줄이 보이는데 무시하자.)
   #ifndef OPENSSL_SYS_VMS
   #define X509_CERT_AREA  OPENSSLDIR
   #define X509_CERT_DIR  OPENSSLDIR "\\certs"
   #define X509_CERT_FILE  OPENSSLDIR "\\cert.pem"
   #define X509_PRIVATE_DIR OPENSSLDIR "\\private"

   위에서 살펴보면 OPENSSLDIR 라는 디파인이 보인다. 이것도 무언지 살펴보면 또다른 문제가 나타난다.

   => ./crypto/opensslconf.h
   => 아래는 컴파일 환경설정 경로이기 때문에, 사용자 설치 경로에 따라 다를 수 있다.
   #if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
   #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
   #define ENGINESDIR "D:\K4WORK\2_SRC_LIBRARY\k4lib_openss0.98i/lib/engines"
   #define OPENSSLDIR "D:\K4WORK\2_SRC_LIBRARY\k4lib_openss0.98i/ssl"

   #endif

   => 요거를 아래꺼로 변경
   #if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
   #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
   #define ENGINESDIR "D:\\K4WORK\\2_SRC_LIBRARY\\k4lib_openss0.98i\\lib\\engines"
   #define OPENSSLDIR "D:\\K4WORK\\2_SRC_LIBRARY\\k4lib_openss0.98i\\ssl"

   #endif

   이렇게 모든 작업이 끝나면 한방에 컴파일이 완료된다.
   자 이제 컴파일을 하면 끝...

이전에도 언급한적이 있지만, 역시나 VS에 물려서 디버깅은 않됩니다.. 그냥 돌아만 갈뿐...
아마도 이버전도 디버거에서 openssl 소스를 추적해 들어가려고 하면, ntdll.mak 파일을 수정해서
디버깅이 가능하도록 하는 버전과, release 에서 배포할 때 성능향상을 할 수 있도록 2가지 버전으로
모두 수정해서 처리해야 할거 같네요.

디버깅 버전을 생성하는건 다음에 시간나면 또 한번 올려보도록 하겠습니다.

+ Recent posts