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
会显示一些网页信息,说明可以正确运行了。