热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c++curl+openssl编译包,以求支持HTTPS传输

c++curl+openssl编译包,以求支持HTTPS传输,Go语言社区,Golang程序员人脉社



在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库进行支持。

     

     下载OpenSsl的包  本文使用 ftp://ftp.openssl.org/snapshot/openssl-1.0.2-stable-SNAP-20140704.tar.gz

     用解压工具解压包解压到硬盘上,方便可以解压大C:openssl-1.0.2-stable-SNAP-20140704

     解压工具haozip (http://haozip.2345.com/)

 

4  安装perl程序


    openssl编译 Configure的时候,使用到perl程序,在window 下比较流行当仁不让就是 activeperl

  http://dl.softmgr.qq.com/original/Development/ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi

    安装比较简单,默认安装就可以了 ,来几张截图

   


 

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 文件 msdo_nasm

         如果不是使用nasm汇编器,这一步使用其他的命令代代替(如msdo_ms)

         输出如下

         

         7)开始编译如果要编译成动态库使用  nmake -f msntdll.mak

              如果要编译成静态库使用nmake -f msnt.mak

              本次编译成静态链接库,所以使用nmake -f msnt.mak

              需要等待一段时间。  可以运动下。

        8) 安装到配置目录

             所以使用nmake -f msnt.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.






推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
author-avatar
张淑男尧珊肇玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有