前言:
cURL若要支持https即SSL/TLS协议,则需要移植开源ssl库,用的最多的则是openssl、若是在嵌入式设备中使用openssl库,则编译后的大小比较大,不适合用在嵌入式设备。于是转向更小巧的mbedTLS(PolarSSL),CyaSSL 。
一、移植mbedTLS:
本次移植选用mbedTLS进行移植。
1.下载:mbedTLS 本次选用mbedtls-2.6.0-apache.tgz版本。
2.解压
tar -xvf mbedtls-2.6.0-apache.tgz
3.根据不同的需要,可以设置不同的配置。可从mbedtls-2.6.0/configs目录下选取适合自己的config配置文件重命名为confi.h覆盖至mbedtls-2.6.0/include/config.h
4.编译命令:
make CC=arm-hisiv300-linux-gcc SHARE=1
编译前保证交叉编译工具安装,如果SHARED=1省略,会只编译静态库。
make install
二、移植cURL
1.下载 cURL 本次选择curl-7.54.0.zip版本。
2.配置需要的功能,本次只需要http/https,配置如下:
./configure --host=arm-hisiv300-linux CC=arm-hisiv300-linux-gcc --with-mbedtls=/usr/local/ --enable-optimize --disable-debug --disable-curldebug --disable-symbol-hiding --disable-dict --disable-gopher --disable-imap --disable-pop3 --disable-rtsp --disable-smtp --disable-telnet --disable-sspi --disable-smb --disable-ntlm-wb --disable-tls-srp --disable-soname-bump --disable-manual --disable-file --disable-ldap --disable-tftp --enable-http --disable-ftp --disable-ipv6
注:在刚开始编译的时候,SSL supoort看不到mbedtls显示需要查看 –with-mbedtls=/usr/local/ 此配置中mbedtls是否正确。
正确显示如下:
3.编译
make
make install
4.可执行arm-hisiv300-linux-strip 对相应的应用程序和库进行去注释信息,进一步减小大小。处理之后curl的大小102K,库的大小为643K。
5.将编译好的库以及可执行文件拷贝到板端。应用程序curl在/usr/local/bin下,库libcurl.so.4,libcurl.so.4.4.0,libcurl.so在/usr/local/lib,实际只有一个库,另外两个是软链接。
查看是否正常工作:
此时表明可以正确运行了
接着需要添加DNS到板端/etc/resolv.conf文件中,无则创建。
nameserver 114.114.114.114
试试连接百度
curl https://www.baidu.com
curl:(51) Cert verify failed: BADCERT_NOT_TRUSTED
表明没有安装证书,找一个证书放在当前目录,我下载了一个ca-bundle.crt 一些常用网站的证书在这里面。
再次运行
curl -k -cert ca-bundle.crt https://www.baidu.com
运行结果说明https访问成功了: