今天在windows下安裝OpenSSL將過程和遇到的問題及解決方案簡記之。
前提:安裝了vc++6.0(配置時用到其中工具)
資源:
openssl-0.9.8e
ActivePerl-5.8.8.822-MSWin32-x86-280952
過程:
一、準備:下載並安裝perl,解壓openssl-0.9.8e
二、運行“cmd”,cd改變目錄到openssl-0.9.8e源碼所在目錄
三、執行" perl Configure VC-WIN32 --prefix=c:/openssl-0.9.8e" 目的是指定OpenSSL編譯好後的安裝路徑。
四、運行“ms\do_ms”
五、運行“nmake -f ms\ntdll.mak”
1、此時出現“nmake不是內部或者外部命令或者.bat檔案” 的情況
解決方案:nmake.exe的檔案,這個檔案應該位於C:\Program Files\Microsoft Visual Studio\VC98\Bin目錄中,配置環境變數即可。操作:按右鍵我的電腦-->屬性-->進階-->環境變數--系統變數(找到path)-->編輯,將C:\Program Files\Microsoft Visual Studio\VC98\Bin加到未尾(注意要和前一個路徑用";"隔開,並以";"結束;最後要提醒一點,一定要重啟機器,新的path才會生效;
2、 此時以為問題解決,重新執行命令“nmake -f ms\ntdll.mak”發現彈出警告框,標題為cl.exe提示缺少mspdb60.dll。
解決缺少mspdb60.dll問題將目錄\Common\MSDev98\Bin下的mspdb60.dll檔案,複製到C:\Program Files\Microsoft Visual Studio\VC98\BIN下,VC6.0即可正常運行。
3、此時以為問題解決,重新運行“nmake -f ms\ntdll.mak”命令,發現出現問題,
“ms\uplink.c(11) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory NMAKE : fatal error U1077: 'cl' : return code '0x2' Stop.錯誤的時候”
解決:先運行vcvars32命令,vcvars32.bat用於設定VC命令列編譯的環境變數。
重新運行“nmake -f ms\ntdll.mak”命令,大功告成。執行通過
4、檢查下是否成功,執行命令:“nmake -f ms\ntdll.mak test”。
六、運行“nmake -f ms\ntdll.mak install”安裝編譯後的OpenSSL到指定目錄。
七、查看安裝結果C:\openssl-0.9.8.e下包含了三個檔案夾Bin、include、lib。bin下包括openssl.exe(openssl指令程式)、ssleay32.dll(ssl協議動態庫)、libeay32.dll(密碼演算法庫)。lib下包括libeay32.lib,ssleay32.lib。Include目錄包括了OpenSSL開發設計的標頭檔。
至此,OpenSSL在windows下編譯完成了。
開發環境配置
在建立的項目中,功能表列,“工具--選項--目錄”設定include和lib指定到C:\openssl-0.9.8.e下包含的檔案夾include和lib。
做一個簡單的測試程式並設定串連如
以上資料摘自:windows下安裝OpenSSL及開發環境的配置簡記(原創)
補充:
1、在第3步的命令一定要注意大小寫;
2、在第5.3步的時候可能會提示不同的檔案未找到,這時可以多嘗試幾次"vcvars32"命令。開始的時候,編譯到第5.3步時提示EC_PRIVATEKEY_it重定義,原因是第3步命令輸入不對,要區分大小寫。
3、上述的IDE是vc6.0,也可以用vs2008,其他IDE沒有測試,不過記得第5步中環境變數的設定。如果是VC6.0以外的IDE編譯的話出現“return code '...' Stop”錯誤,請再次執行"vcvars32"命令。
4、 如果不太習慣在windows下使用linux下的這種編譯方式(其實windows底層也是這個樣子,只是微軟的IDE屏蔽了),那麼可以去下載openssl的windows安裝檔案,請自行搜尋“Win32OpenSSL”關鍵字。
5、有了現成的加解密,就不用自己去實現了,而且現在ssl使用這麼廣泛,應該不會有漏洞吧?接下來整理怎麼使用openssl。
【參考資料 感謝作者】
1、windows下安裝OpenSSL及開發環境的配置簡記(原創)
2、編譯openssl的錯誤,“ECPKPARAMETERS_it” : 重定義