在window平台下,自己DIY編譯OpenSSL,Libcurl ,來支持HTTPS傳輸協議


1 緣起

  原來就了解些libcurl,一直沒有機會在項目實際使用libcurl.
   恰好最近一個雲存儲的項目,服務器使用openstack 恰好我負責現在的一個雲存儲SDK c++版本的開發中。 與服務器的通信都是基於HTTP/HTTPS協議通信。先做window下的sdk,在逐步移植到linux和MAC平台下。

  在curl的官方網站 **http://curl.haxx.se/download.html** 提供編譯好libcurl包,用於老外的使用的 VC++編譯器過高,本人使用VC2010,所以不兼容,所以參照網上的文章,一步一步搭建起基於OpenSSL和OpenSSH的的libcurl,能 夠支持Https協議。

   最后寫一個demod工程,演示下libcurl強大的威力和自己使用libcurl的一些心得。

2 curl/libcurl 介紹

     先看的baidu 百科是怎么介紹curl

它支持很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。
curl同樣支持HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證,HTTP上傳, 代理服務器, cookies, 用戶名/密碼認證, 下載文件 斷點續傳,上載文件斷點續傳,http代理服務器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務器,通過http代理服務器上傳文件到 FTP服務器等等,功能十分強大。
Windows 操作系統下的 網絡螞蟻網際快車(FlashGet)的功能它都可以做到。准確的說,curl支持文件的上傳和下載,所以是一個綜合傳輸工具,但是按照傳統,用戶習慣稱curl為 下載工具。          
     
     libcurl就是curl的庫,其中在C++/C 在程序涉及到url協議通迅的時候,libcurl是首選。現在流行的網盤客戶端(百度的,360的),在與服務器回話的,都是使用libcurl作為底層庫
         

3 安裝OpenSsl開發包

     libcurl主要通過SSL(Secure Sockets Layer  安全套接層)和TLS(Transport Layer Security 傳輸層安全),在 傳輸層對網絡連接進行加密。
     本文使用OpenSSL使用作為開發庫。 也可以使用GnuTLS來支持TLS/SSL協議
 
  
     libcurl要支持ssh協議可以通過libssh2庫進行支持。
     
     用解壓工具解壓包解壓到硬盤上,方便可以解壓大C:\openssl-1.0.2-stable-SNAP-20140704
     解壓工具haozip ( http://haozip.2345.com/)
 

4  安裝perl程序

    openssl編譯 Configure的時候,使用到perl程序,在window 下比較流行當仁不讓就是 activeperl
    安裝比較簡單,默認安裝就可以了 ,來幾張截圖
  
 

5  安裝NASM 匯編器

  
   編譯可以使用vc++編譯器來編譯OpenSSL,使用匯編器編譯有更快的速度,本人使用匯編器是nasm
    http://www.nasm.us/pub/nasm/releasebuilds/2.11.05/win32/nasm-2.11.05-installer.exe 
   安裝過程如下圖所示
 
  

6  使用匯編器NASM編譯OpenSSL庫
   

   本人安裝是VS2010開發環境, OpenSSL需要使用Visual Studio 命令行方式編譯。

      1) 點擊 開始->所有程序->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 命令提示(2010)

      2)再打開編譯窗口將上面安裝NASM的路徑添加到PATH環境變量里  PATH=%PATH%;"c:\Program Files (x86)\nasm"
      3)進入OpenSSL的工作目錄 C:\openssl-1.0.2-stable-SNAP-20140704

      4)  新建一個編譯好的程序的輸出目錄 mkdir C:\openssl_lib

     
  

       5) 配置OpenSSL的安裝目錄 perl Configure VC-WIN32  --prefix=c:/openssl_lib

          輸出結果如下

        

        6) 生存Makefile 文件 ms\do_nasm

         如果不是使用nasm匯編器,這一步使用其他的命令代代替(如ms\do_ms)

         輸出如下

        

         7)開始編譯如果要編譯成動態庫使用  nmake -f ms\ntdll.mak

              如果要編譯成靜態庫使用nmake -f ms\nt.mak

              本次編譯成靜態鏈接庫,所以使用nmake -f ms\nt.mak

              需要等待一段時間。  可以運動下。

        8) 安裝到配置目錄

             所以使用nmake -f ms\nt.mak install 

             前面第5步 已經設置好了安裝目錄 c:/openssl_lib ,現在去里面看看 是什么

           

 

 7 編譯curl/libcurl

      將下載curl-7.37.0.tar的包,解壓到一個文件目錄,本例解壓到E:\curl-7.37.0\

   進入winbuild目錄,通過 nmake /f Makefile.vc 查看下幫助

     

 

      執行 nmake /f Makefile.vc mode=dll VC=10 WITH_DEVEL=C:\openssl_lib WITH_SSL=static ENABLE_SSPI=no ENABLE_IPV6=no

     

     命令注釋 mode=dll 編譯libcurl位動態鏈接庫,如果static 就是把libcurl編譯位靜態庫 

     VC=10 代表使用的是VC2010

     WITH_DEVEL=C:\openssl_lib 表示用到第三方開發包的目錄,本例上面已經將openssl編譯好的開發包,安裝到此目錄

     WITH_SSL=static ,代表使用libssl庫 是靜態庫

     ENABLE_SSPI=no ENABLE_IPV6=no(禁用SSPI,ipV6功能)

     稍等片刻就編譯成功了。

 

8  測試 編譯后的libcurl是否支持HTTPS協議 ?

       在第7步,編譯成功以后,會生成libcurl 還有外殼程序curl .

       安裝上面的配置,找到curl和libcurl

     

       

        下面測試 www.baidu.com 和支持加密 https://mail.qq.com

       

       

         經過測試訪問加密HTTPS協議傳輸,和不用加密的HTTP都能成功。。  所以編譯libcurl 就算圓滿成功 大功告成!!!

   

      9 總結:

       libcurl可以通過openssl作為底層庫,來支持HTTPS協議,比較麻煩就是編譯openssl

       本文使用nasm+acitiveperl的工具去編譯openssl,一般都很順利,。

       通過仔細閱讀libcurl的makefile,還是很容易配置編譯libcurl.

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM