您的位置:首页 > 其它

交叉编译PolarSSL和curl

2015-07-17 17:47 603 查看
1、编译PolarSSL
下载地址
https://tls.mbed.org
我使用的版本为PolarSSL-1.3.8

根据不同的需要,可以设置不同的配置,需要修改polarssl-dev/include/polarssl/config.h。为了尽量缩小体积,我把自己使用的config.h贴出来。

#ifndefPOLARSSL_CONFIG_H
#definePOLARSSL_CONFIG_H

/*System support */
#definePOLARSSL_HAVE_LONGLONG
#definePOLARSSL_HAVE_ASM
#definePOLARSSL_HAVE_TIME
#definePOLARSSL_HAVE_IPV6

/*PolarSSL feature support */
#definePOLARSSL_CIPHER_MODE_CBC

#definePOLARSSL_CIPHER_PADDING_PKCS7
#definePOLARSSL_CIPHER_PADDING_ONE_AND_ZEROS
#definePOLARSSL_CIPHER_PADDING_ZEROS_AND_LEN
#definePOLARSSL_CIPHER_PADDING_ZEROS

#definePOLARSSL_KEY_EXCHANGE_PSK_ENABLED
#definePOLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED
#definePOLARSSL_KEY_EXCHANGE_RSA_ENABLED

#definePOLARSSL_GENPRIME

#definePOLARSSL_FS_IO

#definePOLARSSL_PKCS1_V15
//#definePOLARSSL_PKCS1_V21 //add

#definePOLARSSL_SSL_MAX_FRAGMENT_LENGTH //add
#definePOLARSSL_SSL_PROTO_SSL3
#definePOLARSSL_SSL_PROTO_TLS1
#definePOLARSSL_SSL_PROTO_TLS1_1
#definePOLARSSL_SSL_PROTO_TLS1_2 //add

#definePOLARSSL_SSL_SESSION_TICKETS
#definePOLARSSL_SSL_SERVER_NAME_INDICATION

#definePOLARSSL_VERSION_FEATURES

#definePOLARSSL_X509_CHECK_KEY_USAGE
//#definePOLARSSL_X509_CHECK_EXTENDED_KEY_USAGE
//#definePOLARSSL_X509_RSASSA_PSS_SUPPORT //add

/*PolarSSL modules */
#definePOLARSSL_AESNI_C //add
#definePOLARSSL_AES_C
#definePOLARSSL_ARC4_C
#definePOLARSSL_ASN1_PARSE_C
#definePOLARSSL_ASN1_WRITE_C
#definePOLARSSL_BASE64_C

#definePOLARSSL_BIGNUM_C

#definePOLARSSL_CERTS_C
#definePOLARSSL_CIPHER_C
#definePOLARSSL_CTR_DRBG_C
#definePOLARSSL_DES_C
#definePOLARSSL_DHM_C

#definePOLARSSL_ENTROPY_C
//#definePOLARSSL_ERROR_C

#definePOLARSSL_MD_C
#definePOLARSSL_MD5_C
#definePOLARSSL_NET_C
#definePOLARSSL_OID_C

#definePOLARSSL_PEM_PARSE_C

#definePOLARSSL_PK_C
#definePOLARSSL_PK_PARSE_C

#definePOLARSSL_PLATFORM_C

#definePOLARSSL_RSA_C
#definePOLARSSL_SHA1_C
#definePOLARSSL_SHA256_C

#definePOLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO
#definePOLARSSL_SSL_CACHE_C
#definePOLARSSL_SSL_CLI_C
#definePOLARSSL_SSL_SRV_C
#definePOLARSSL_SSL_TLS_C

#definePOLARSSL_TIMING_C

#definePOLARSSL_VERSION_C
#definePOLARSSL_X509_USE_C
#definePOLARSSL_X509_CRT_PARSE_C
#definePOLARSSL_X509_CRL_PARSE_C
#definePOLARSSL_X509_CSR_PARSE_C

#definePOLARSSL_XTEA_C

/*For testing with compat.sh */

#include"polarssl/check_config.h"

#endif/* POLARSSL_CONFIG_H */


编译命令:
#makeCC=arm-linux-gcc SHARE=1
编译前保证交叉编译工具安装,如果SHARED=1省略,会只编译静态库。
最后的体积为196kB。

2.编译curl
下载地址curl.haxx.se
我使用的版本为curl-7.41.0
需要根据自己的需求进行配置
./configure--host=arm-linux --without-ssl --with-polarssl --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

如果最后出现下面的信息,就说明配置正确了

configure:Configured to build curl/libcurl:

curlversion: 7.41.0
Hostsetup: arm-unknown-linux-gnu
Installprefix: /usr/local
Compiler: arm-linux-gcc
SSLsupport: enabled (PolarSSL)
SSHsupport: no (--with-libssh2)
zlibsupport: enabled
GSS-APIsupport: no (--with-gssapi)
TLS-SRPsupport: no (--enable-tls-srp)
resolver: default (--enable-ares / --enable-threaded-resolver)
IPv6support: no (--enable-ipv6)
Unixsockets support: enabled
IDNsupport: no (--with-{libidn,winidn})
Buildlibcurl: Shared=yes, Static=yes
Built-inmanual: no (--enable-manual)
--libcurloption: enabled (--disable-libcurl-option)
Verboseerrors: enabled (--disable-verbose)
SSPIsupport: no (--enable-sspi)
cacert bundle: no
cacert path: no
LDAPsupport: no (--enable-ldap / --with-ldap-lib /--with-lber-lib)
LDAPSsupport: no (--enable-ldaps)
RTSPsupport: no (--enable-rtsp)
RTMPsupport: no (--with-librtmp)
metalinksupport: no (--with-libmetalink)
HTTP2support: disabled (--with-nghttp2)
Protocols: HTTP HTTPS
在刚开始编译的时候,SSLsupoort看不到PolarSSL显示,就是说系统没有找到polarssl这个库。我把编译完成的libpolarssl和libpolarssl.so.7打包,放到交叉编译工具的arm-unknown-linux-gun/lib目录下,就可以找到了。把polarssl的头文件直接和curl的头文件方一起。
然后执行make就可以得到libcurl的库了,在curl-7.41.0/lib/.libs里面,动态库有3个libcurl,libcurl.so.4和libcurl.so.4.3.0。
在curl-7.41.0/src/.lib下面有一个curl命令行工具,可以测试最后编译完成的库是否可以工作。

把polarssl和curl的动态库放到arm文件系统的/lib或者/usr/lib库里,curl工具放到用户目录
#./curl-V
curl7.41.0 (arm-unknown-linux-gnu) libcurl/7.41.0 PolarSSL/1.3.8zlib/1.2.3
Protocols:http https
Features:Largefile SSL libz UnixSockets
说明库可以正确运行了。

打开网站看看。
#./curl https://www.baidu.com curl:(51) Cert verify failed: BADCERT_NOT_TRUSTED
上面的信息表示没有安装证书。我们从台式机的linux系统里直接找些证书放到curl目录,CentOS在/etc/pki/tls/certs/ca-bundle.crt,一些常用网站的证书在这里。

#./curl-k –cert ca-bundle.crthttps://www.baidu.com
会显示一些网页信息,说明可以正确运行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: