在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。
3 安装OpenSsl开发包
4 安装perl程序
5 安装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.
在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议的更多相关文章
- Ubuntu+NDK编译openssl(为了Android上使用libcurl且支持HTTPS协议)
为了Android上使用libcurl且支持HTTPS协议,需要依赖openssl,因此先来了解一下如何编译OpenSSL1.编译ARM下的共享库(默认的)我使用的是guardianproject的o ...
- 深度学习-Windows平台下的Caffe编译教程
一.安装CUDA7.5 Cuda是英伟达推出的GPU加速运算平台 我这里安装的是cuda7.5,已经安装过的忽略,还没有安装过的这里有安装教程.windows下面安装还是非常简单的. https:// ...
- Window平台下tree 命令使用
WIndow 平台要想打印目录树,可以用cmd工具或者power shell 的tree命令实现 tree 命令格式和参数: TREE [drive:][path] [/F] [/A] /F 显示每个 ...
- window平台下的MySQL快速安装。(不好意思,未完成待续,请飘过)
MySQL安装方式 MSI安装(Windows Installer) ZIP安装 最好选择ZIP安装,比较干净,也快速搞好. 下载链接:http://pan.baidu.com/s/1sjFZZul ...
- Window平台下React Native 开发环境搭建
1. 安装Node.js 2. 安装react-native-cli 命令行工具 npm install -g react-nativew-cli 3. 创建项目 $ react-native ini ...
- 问题总结——window平台下grunt\bower安装后无法运行的问题
一.问题: 安装grunt或者bower后,在cmd控制台运行grunt -version 或者 bower -v会出现:“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”,
- window平台下 cmd 命令窗口的编码设置
在WINDOWS上打开控制台界面,发现默认的编码是GBK,这样有时候写完的代码运行的时候就会出码,基于此,查阅各方资料,终于得出两种方案. 一.临时解决方案(只针对本次会话有效) 1. 打开控制台,输 ...
- 解决Ubuntu(Linux)平台下Sublime Text 3 安装中文输入支持库后 开启gnome-terminal报错的问题
在Ubuntu下安装Sublim Text3后发现无法输入中文,按照此链接的方法解决后.然后用下列代码配置C++的编译系统: { "cmd":["g++",&q ...
- 使用openSSL构造一个支持https的nodejs服务器
首先通过下面的链接下载openSSL https://slproweb.com/products/Win32OpenSSL.html 下载完毕后,执行openssl进入交互式界面: 使用命令生成pri ...
随机推荐
- js map/reduce
map 由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x) { r ...
- (轉)EasyUI - DataGrid 去右边空白滚动条列
熟悉 EasyUI - DataGrid 的童鞋应该会注意到这样一个情景: 想去掉这块,找了下资料,发现也有人同样纠结:http://www.cnblogs.com/hantianwei/p/3440 ...
- PAT 1018 锤子剪刀布(20)
1018 锤子剪刀布 (20)(20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方 ...
- IIS7.0上传在大小限制
修改 IIS7的上传文件大小限制的方法: 1.打开IIS管理器,并定位于想要修改限制的网站 2.双击右侧窗口中的asp图标 3.展开最下面那个“限制属性”,将最下面的“最大请求实体主体限制”右边属性框 ...
- JoyOI1391 走廊泼水节
一道另类生成树 原题链接 将输入的树的\(n-1\)条边按从小到大排序,然后\(Kruskal\)在生成该树的过程中计算新增边的总长. 当在连第\(i\)条边,设该边的两端点为\(x,y\),长度为\ ...
- ArrayList、Vector、LinkedList的特点和区别
ArrayList.Vector.LinkedList类均在java.util包中,均为可伸缩数组. 1)ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会 ...
- Python学习1 基础数据类型
一.字符串 1.去除首尾字符 str_test = 'Hello World!' str_test.split()#将字符串分割为列表str_test. ...
- 获取input输入框中的值的方法
方法一:获取input的文本值 <input class="form-text-normal" id="txtName" name="Name& ...
- JS closure
闭包的概念 闭包,不同于一般的函数,它允许一个函数在立即词法作用域外调用时,仍可访问非本地变量. --维基百科 闭包就是能够读取其他函数内部变量的函数. --阮一峰 由于在Javascript语言中, ...
- django 静态文件
django中的静态文件,如图片,css样式jquery等等 在url最下面加上 from django.conf.urls.static import staticfrom django.conf ...