1. 程式人生 > >OpenSSL在Win7 64位下的編譯與安裝

OpenSSL在Win7 64位下的編譯與安裝

由於工作原因,想編寫個基於OpenSSL的Server端用於測試,但沒想到安裝OpenSSL會那麼的艱難……

首先,在Windows下安裝OpenSSL有兩種方法:
1、懶人版:OpenSSL官網沒有提供windows版本的安裝包,可以選擇其他開源平臺提供的工具。例如 http://slproweb.com/products/Win32OpenSSL.html。上面可以下載直接安裝的.exe程式,狂點Nest即可(具體安裝方法可參看:https://blog.csdn.net/kitok/article/details/72957185 )。但網上的大神們好像不太推崇這種做法,後續想要找開發相關的都是基於第二種安裝方法下的lib,於是沒有辦法,只能硬著頭皮上
2、坎坷版:編譯的命令和步驟倒不復雜,只是每一步似乎都會有一些無法解釋卻又真實存在的bug等著你去解決……

一、安裝Perl
1、下載ActivePerl 5.24.0.2400
http://www.activestate.com/activeperl/downloads
2、安裝ActivePerl軟體
安裝成功後,設定環境變數,選中Path,單擊編輯按鈕,將C:\Perl64\site\bin;C:\Perl64\bin;加入其中,確認即可。
3、確認安裝成功,執行cmd,輸入perl -v,然後回車,出現perl版本號即可。
還有一個方法: 進入C:\Perl64\eg目錄,輸入“perl example.pl”,如果顯示:”Hello from ActivePerl!”,則也表示安裝成功。

二、安裝Microsoft Visual Studio 2010
這個一般都會有吧,就不說了,另外,別的文章裡提到要把路徑加入到PATH裡面去,但實際操作發現最後沒加進去倒是成功了,之前加進去倒是一堆問題,此為後話,按住不表。

三、安裝NASM
這個我一開始的時候沒有安裝,結果在configure的時候失敗了,安裝後再次嘗試可以成功,感覺還是有用的。
當前穩定版本為:2.12.02
http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/win64/
同樣也是將nasm的路徑新增至環境變數,例如我的nasm安裝在 C:\Users\lenovo\AppData\Local\NASM 目錄,則把 C:\Users\lenovo\AppData\Local\NASM ;加入PATH環境變數中。

四、下載OpenSSL
OpenSSL官方下載:https://www.openssl.org/source/
這裡寫圖片描述
目前支援的最新版本為1.1.1,但在configure的時候出錯,無論什麼方法都無法走下去了,於是換到1.1.0h版本(就是跟之前狂點Nest的exe同樣的版本),換了之後倒是順利的configure成功了(所以有點不清楚是NASM補安裝的原因還是換版本的原因)

五、初始化編譯環境
因為Visual Studio 2010安裝在目錄中D:\Program Files (x86)\Microsoft Visual Studio 10.0\ (我不喜歡裝軟體在C盤= =)
這裡使用的是在Visual Studio Tools資料夾下的Visual Studio x64 Win64命令提示(2010)工具,以管理員的身份執行(其實左鍵點開就是管理員,不需要右鍵選管理員的樣子。。)
然後進入Visual Studio 2010中的以下目錄: cd D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
執行命令:vcvars64.bat

六、吶吶吶,重點來了,準備那麼久,終於可以編譯OpenSSL了!!
1、首先進入到已解壓的OpenSSL目錄下:
在Visual Studio x64 Win64命令提示(2010)工具下:cd D:\openssl-1.1.0h
然後執行configure命令:perl Configure no-asm VC-WIN64A
在執行這個命令時,首先遇到了:
It looks like you don’t have either nmake or dmake.exe on your path
看了一堆的文章,有各種方法各種步驟,實在看不下去了。於是僅僅是按照提示去執行了一個命令:
ppm install dmake
再次執行就不提示這個錯誤了,但是!也沒有提示成功……可這次也沒有任何明顯的錯誤提示了。
再努力一下(其實是很久),還是不行,於是放棄了一會。。

2、再次回頭的時候,把所有開啟的文章全部關掉,重新開啟一個新的百度進行搜尋。
於是補上了之前沒有安裝的NASM(誰讓之前看到別人說“感覺沒什麼用,至少沒有壞作用,先列著”,而且我又懶),又下載了1.1.0h版本(之前用的最新版本,總擔心最新的版本出現新的問題而又沒有新的解決方法)。
還是執行configure命令:perl Configure no-asm VC-WIN64A
這次成功了!!提示:configured for VC-WIN64A.

3、但也只是高興了一小會,因為下一個命令又錯了
接著按照文章所說執行:
ms\do_nasm
提示了:
“ms\do_nasm或ms\do_*” 不是內部命令,也不是可執行的程式或批處理檔案。
有的介紹需要安裝MASM(什麼鬼!!)然後copy ml.exe檔案到VS2010目錄下就可以了,有的說VS2010的路徑問題,blabla。。。
其實,原來VC自帶的構建程式已經沒有”ms\do”系列的程式了。
感謝:https://bbs.csdn.net/topics/392193545?page=1
所以不再執行ms\do_nasm和ms\do_win64a 這兩個命令。

4、繞過這個大坑,繼續執行下一個命令:nmake
一如既往,這次還是報錯:

LINK :fatal error LNK1123: failure during conversion to COFF
我能怎麼樣,我也很絕望啊!!
又是一頓好找,
最後,感謝:http://www.cnblogs.com/newpanderking/articles/3372969.html
裡面提到:
當安裝VS2012之後,原來的.NET 4.0會被替換為.NET 4.5。解除安裝VS2012時,不會恢復.NET 4.0。
l 當VS2012安裝後,VS2010的cvtres.exe就無法使用了。如果你的PATH環境變數中VS2010的工具路徑第一個出現,而且連結器需要將.res檔案轉換為COFF 物件格式,就會導致LNK1123錯誤。
l 當VS生成PE檔案頭時,使用的cvtres.exe版本錯誤,不能與當前的.NET平臺相容。

所以,就是因為後續安裝的framework的新版本把之前安裝VS2010時的舊版本的cvtres.exe給換掉了,所以需要替換回來,這裡我沒有在PATH裡面設定,而是進行了兩處替換:用C:\Windows\Microsoft.NET\Framework\v4.0.30319目錄下的cvtres.exe替換掉D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin和D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64兩個目錄下的cvtres.exe檔案。
(另外,我由於絕望,把除了framework4.0的高版本解除安裝掉了,還重新修復了VS2010,以確保是framework 4.0)

在以上華麗的操作後,執行:nmake,華麗麗的成功了!!(因為沒有提示錯誤了!)

5、最後執行:nmake test
結果:一個大大的PASS甩在螢幕上,這一天的折騰總算值了!
這裡寫圖片描述

6、其實這裡還有真正的最後一步:nmake install
感謝:http://blogger.org.cn/blog/more.asp?name=OpenSSL&id=18972
是他讓我知道了網上為何各種版本的安裝攻略的存在原因:解壓OpenSSL以後, 在其目錄下可以發現有個INSTALL.W32檔案,這個檔案就是在windows下的安裝說明。你可以用UltraEdit開啟它。
是的,所有人的安裝攻略皆源於官方的安裝說明。但是!!每個版本的安裝說明都不盡相同,於是也就出現了文章裡面提及的各種方法。

7、安裝完成後根據INSTALL文件的說明可以找到預設的安裝目錄:
Windows: C:\Program Files\OpenSSL or C:\Program Files (x86)\OpenSSL
後續程式設計需要用到的是:
C:\Program Files\OpenSSL\lib中的:libcrypto.lib、libssl.lib
C:\Program Files\OpenSSL\bin中的:libcrypto-1_1-x64.dll、libssl-1_1-x64.dll
這裡寫圖片描述
需要將以上的lib和DLL加入到工程當中,參考:(或我的下一篇文章)
https://www.cnblogs.com/freeliver54/p/4414778.html

六、後續說明
每個人的環境不一樣,每個人遇到的問題也不一樣,所以文章不可盡信,要廣閱文章,吸其精華,去其糟粕。同時參考官方的安裝指南(這個最為靠譜),將兩者結合可以互相補充,因為官方文件中未提及遇到的問題解決方法。