今天在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” : 重定義
