交叉编译PolarSSL和curl

2019-07-12 23:09发布

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这个库。我把编译完成的libpolarssllibpolarssl.so.7打包,放到交叉编译工具的arm-unknown-linux-gun/lib目录下,就可以找到了。把polarssl的头文件直接和curl的头文件方一起。 然后执行make就可以得到libcurl的库了,在curl-7.41.0/lib/.libs里面,动态库有3libcurl,libcurl.so.4libcurl.so.4.3.0。 在curl-7.41.0/src/.lib下面有一个curl命令行工具,可以测试最后编译完成的库是否可以工作。
polarsslcurl的动态库放到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 会显示一些网页信息,说明可以正确运行了。