用VS2015編譯OpenSSL

一、Openssl簡介
OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
OpenSSL被曝出現嚴重安全漏洞後,發現多數通過SSL協議加密的網站使用名爲OpenSSL的開源軟件包。OpenSSL漏洞不僅影響以https開頭的網站,黑客還可利用此漏洞直接對個人電腦發起“心臟出血”(Heartbleed)攻擊。據分析,Windows上有大量軟件使用了存在漏洞的OpenSSL代碼庫,可能被黑客攻擊抓取用戶電腦上的內存數據。(摘自百度百科)

二、Openssl編譯準備
1)安裝VS2015。
2)下載Openssl-1.1.0f官方源碼。地址: https://www.openssl.org/source/  。解壓縮 openssl 源代碼包到指定目錄, 如 C:\openssl-1.1.0f。源碼一定要下載openssl-1.1.0以後的版本,以前的版本編譯方式不一樣。
3)安裝 ActivePerl。 下載地址:http://www.activestate.com/activeperl/downloads,下載最新版本。
安裝過程中如果沒有勾選"Add Perl to the PATH environment variable",則需要安裝完成後自己手動在系統環境變量中進行配置。


4)安裝dmake。使用 VS2015 下的 Visual Studio 2015 Command Prompt 進入控制檯模式。安裝命令:ppm install dmake

如果ActivePerl下載有問題,可以去我的百度網盤上找,如果dmake安裝失敗,那麼就聯網多試幾次。


三、編譯步驟

1、編譯win32 release版本

使用 VS2015 下的 Visual Studio 2015 Command Prompt 進入控制檯模式。VS2017等都一樣

1)進入Openssl-1.1.0f目錄。
命令:cd /d  C:\openssl-1.1.0f


2)配置Openssl-1.1.0f。下面配置命令默認編譯生成release版本

生成x86版本的libcrypto.dll,libssl.dll,libcrypto.lib,libssl.lib
命令:perl Configure VC-WIN32  shared no-asm --prefix="C:/openssl-1.1.0f/win32-release" --openssldir="C:/openssl-1.1.0f/win32-release/ssl"

如果只想編譯出靜態庫libcrypto.lib,libssl.lib,則加入命令參數no-shared
命令:perl Configure VC-WIN32 no-shared no-asm --prefix="C:/openssl-1.1.0f/win32-release"--openssldir="C:/openssl-1.1.0f/win32-release/ssl"

這條命令必須進入到Openssl的源碼所在文件夾後才能執行。

cd /d  C:\openssl-1.1.0f

參數解析:

     Configure是openssl源碼中自帶的命令文件。必須有

     VC-WIN32表示編譯x86版本, VC-WIN64A表示編譯x64版本。必須有

     shared表示編譯成動態鏈接庫dll模塊,no-shared表示編譯成靜態鏈接看lib模塊。必須有

     no-asm 如果要本地優化,還需要下載NASM,這裏直接用no-asm選項可以跳過,因此不需要下載NASM.只在openssl-1.1.0以後的版本支持良好。必須有

    --debug 編譯出來的是調試Debug版本, --release編譯出來的是發佈版本,默認是release版。不必須;

     --prefix是Openssl編譯完後的安裝路徑,必須有

     --openssldir是Openssl編譯完後的生成的配置文件的安裝路徑,不必須;


3)編譯Openssl-1.1.0f。
命令:nmake

4)測試編譯的Openssl-1.1.0f
命令:nmake test
出現如下,則表示測試通過。過程可能很慢。

5)安裝編譯的Openssl-1.1.0f
命令:nmake install
此時,在C:/openssl-1.1.0f/win32-release目錄下已經可以看到編譯好的Openssl相關文件了。過程可能很慢。

6)清除編譯Openssl-1.1.0f時產生的相關文件,不會清除C:/openssl-1.1.0f/win32-release目錄下編譯好的Openssl
命令:nmake clean

7)以上命令合集:
cd /d  C:\openssl-1.1.0f
perl Configure VC-WIN32  shared no-asm --prefix="C:/openssl-1.1.0f/win32-release" --openssldir="C:/openssl-1.1.0f/win32-release/ssl"
nmake
nmake test
nmake install
nmake clean


2、編譯win64 release版本
編譯步驟同上:
win64配置參數需要根據自身系統確定:perl Configure { VC-WIN64A | VC-WIN64I }。
命令合集:
cd /d  C:\openssl-1.1.0f  
perl Configure VC-WIN64A  shared no-asm --prefix="C:/openssl-1.1.0f/win64-release" --openssldir="C:/openssl-1.1.0f/win64-release/ssl"  
nmake  
nmake test  
nmake install  
nmake clean  

3、編譯window debug版本
編譯步驟同上:
配置參數加上--debug即可
a) win32 debug版本
命令合集:
cd /d  C:\openssl-1.1.0f  
perl Configure VC-WIN32  shared no-asm --debug --prefix="C:/openssl-1.1.0f/win32-debug" --openssldir="C:/openssl-1.1.0f/win32-debug/ssl"  
nmake  
nmake test  
nmake install  
nmake clean  

b) win64 debug版本
命令合集:
cd /d  C:\openssl-1.1.0f  
perl Configure VC-WIN64A  shared no-asm --debug --prefix="C:/openssl-1.1.0f/win64-debug" --openssldir="C:/openssl-1.1.0f/win64-debug/ssl"  
nmake  
nmake test  
nmake install  
nmake clean

4、後續編程需要用到的是: 

  (1)動態鏈接庫方式:
     C:/openssl-1.1.0f/win32-release/lib中的:libcrypto.lib、libssl.lib 
     C:/openssl-1.1.0f/win32-release/bin中的:libcrypto-1_1-x64.dll、libssl-1_1-x64.dll 

 (2)靜態鏈接庫方式:

    libcrypto.lib、libssl.lib 

 

注意點:

這裏補充 一下,如果是需要靜態庫,需要加上no-shared 參數, 那麼你必須先安裝dmake工具,用vc自帶的nmake會失敗,安裝指令是 在perl安裝完成後,以管理員權限打開命令行,執行ppm install dmake, 這需要聯網執行的.

然後將配置修改成perl Configure VC-WIN32 no-asm no-shared --prefix="c:\download\opensslh110\build_release32"  ,64位修改成 perl Configure VC-WIN64A no-asm no-shared --prefix="c:\download\opensslh110\build_release64" ,這樣就可以通過編譯了,如果在自己的項目裏使用編譯出來的靜態庫失敗,那麼請加上類似crypt32.lib等依賴庫,一般就可以解決,但是注意,加了no-shared以後,最後的nmake install 命令可能失敗,需要手動拷貝了

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章