본문 바로가기
개발 및 운영/프로그래밍

OpenSSL FIPS 빌드

by Joseph.Lee 2019. 6. 19.

저의 빌드 환경은 Windows x86 64bit , Visual Studio 2015 환경입니다.

그리고 필요한 프로그램들은 (대략) 아래와 같습니다. (더 필요할 수 있음)

  • nasm (32bit/64bit 둘 다 따로 설치)

  • ActivePerl

  • D:\replace.bat (아래)

    @echo ON
    setlocal
    
    call :FindReplace %1 %2 %3
    
    exit /b 
    
    :FindReplace <findstr> <replstr> <file>
    set tmp="%temp%\tmp.txt"
    If not exist %temp%\_.vbs call :MakeReplace
    for /f "tokens=*" %%a in ('dir "%3" /s /b /a-d /on') do (
      for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
        echo(&Echo Replacing "%~1" with "%~2" in file %%~nxa
        <%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
        if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
      )
    )
    
    del %temp%\_.vbs
    
    exit /b
    
    :MakeReplace
    >%temp%\_.vbs echo with Wscript
    >>%temp%\_.vbs echo set args=.arguments
    >>%temp%\_.vbs echo .StdOut.Write _
    >>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
    >>%temp%\_.vbs echo end with

32bit/64bit 개별적으로 빌드해야 합니다.

https://www.openssl.org/source/ 에서 openssl-fips-2.0.16.tar.gz와 openssl-1.0.2s.tar.gz (당시 최신버전, FIPS는 1.0.2tlflwmaks rksmd)을 다운받습니다.

그리고 압축을 풀어야 하는데 주의할 점은 내부에 파일들이 symbolic link으로 되어있는것들이 있기때문에 관리자 권한으로 압축을 풀어야 합니다.

저는 7-Zip을 관리자 권한으로 실행 후 압축을 풀었습니다.

32bit 용으로 빌드하기 위해 저는 아래의 위치에 압축을 풀었습니다.

D:\development\openssl-fips-2.0.16-x86_32

D:\development\openssl-1.0.2s-x86_32

VS2015 x86 native tools command prompt를 실행한 뒤 해당 위치로 이동합니다.

그리고 아래와 같이 환경을 설정 후 do_fips 실행합니다.

> cd D:\development\openssl-fips-2.0.16-x86_32
> set PATH=C:\Program Files (x86)\NASM;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86;%PATH%
> set PROCESSOR_ARCHITECTURE=x86
> D:\replace.bat "/MD" "/MT" "util\pl\VC-32.pl"
> ms\do_fips.bat
...
***************************
****FIPS BUILD SUCCESS*****
***************************
(이러면 성공)

그럼 D:\usr\local\ssl\fips-2.0 가 생깁니다.

이제 OpenSSL를 빌드합니다.

> cd D:\development\openssl-1.0.2s-x86_32
> D:\replace.bat "/MD" "/MT" "util\pl\VC-32.pl"
> perl Configure VC-WIN32 fips --with-fipsdir=D:\usr\local\ssl\fips-2.0
...
Configured for VC-WIN32.
(이러면 성공)
> ms\do_nasm.bat
> nmake -f ms\ntdll.mak

이제 out32dll 에 빌드된 파일들이 있습니다.

D:\usr\local\ssl\fips-2.0와 out32dll을 따로 복사해 둡니다.

테스트합니다.
> out32dll\openssl version
OpenSSL 1.0.2s-fips
> out32dll\openssl md5 README
MD5(README)= 629ecea79d435f217d1a4b459797108a
> set OPENSSL_FIPS=1
> out32dll\openssl md5 README
Error setting digest md5
1724:error:060A80A3:digital envelope routines:FIPS_DIGESTINIT:disabled for fips:.\fips\utl\fips_md.c:180:
(오류가 뜨면서 동작하지 않아야 정상입니다.)

64bit용을 빌드하기 위해 위와 같은 방법으로 빌드하되 환경만 조금 바꿔줍니다.

VS2015 x64 native tools command prompt를 실행한 뒤 해당 위치로 이동합니다.

> rmdir /s/q D:\usr\local\ssl\fips-2.0
> cd D:\development\openssl-fips-2.0.16-x86_64
> set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;C:\Program Files\NASM;%PATH%
> set PROCESSOR_ARCHITECTURE=AMD64
> D:\replace.bat "/MD" "/MT" "util\pl\VC-32.pl"
> ms\do_fips.bat

> cd D:\development\openssl-1.0.2s-x86_64
> D:\replace.bat "/MD" "/MT" "util\pl\VC-32.pl"
> perl Configure VC-WIN64A fips --with-fipsdir=D:\usr\local\ssl\fips-2.0
> ms\do_win64a.bat
> D:\replace.bat "SSL=ssleay32" "SSL=ssleay64" "ms\ntdll.mak"
> D:\replace.bat "CRYPTO=libeay32" "CRYPTO=libeay64" "ms\ntdll.mak"
> D:\replace.bat "SSLEAY32" "SSLEAY64" "ms\ssleay32.def"
> D:\replace.bat "LIBEAY32" "LIBEAY64" "ms\libeay32.def"

> nmake -f ms\ntdll.mak

이제 out32dll 에 빌드된 파일들이 있습니다.

D:\usr\local\ssl\fips-2.0와 out32dll을 따로 복사해 둡니다.
반응형

댓글