wolfssl替换openssl

在嵌入式项目中,因OpenSSL导致固件体积过大,WolfSSL作为更小巧的替代方案,不仅满足SSL/TLS需求,还能显著减小固件大小。本文介绍WolfSSL的下载、编译过程及如何无缝替换OpenSSL,无需修改代码接口。

在嵌入式工程中,为了实现一个小的功能,引用了一个openssl,编译生成的固件太大了,flash装不下了。而wolfssl在满足基本需求的同时,又能大大减小固件的大小。wolfssl以前称为cyassl,它提供了一个针对嵌入式和rtos环境的嵌入式ssl/tls库。它具有完全的客户端和服务器支持,具有相互认证,并且可以在各种平台上使用,它非常容易编译。

wolfssl 除了本地API之外,wolfssl还提供了一个openssl兼容性头文件wolfssl/openssl/ssl.h ,以简化转换为使用wolfssl或帮助将现有的openssl应用程序移植到wolfssl。openssl兼容层将最常用的openssl命令的子集映射到wolfssl的本地API函数。这样在应用程序或项目中通过wolfssl轻松替换openssl,而无需更改大量代码。

1、下载

地址:https://www.wolfssl.com/download/

或者使用:https://www.softpedia.com/get/Programming/Components-Libraries/CyaSSL.shtml#download

2、编译

进入目录后,我们mkdir一个目录,用于编译后,头文件和lib的生成路径;

之后我们需要执行configure,执行configure的目的是为了生成Makefile。configure后面可以跟很多选项,比如指明编译链、安装路径、静态库或者动态库等。具体说明可以执行 ./configure –help。其中需要用–host选项来指明交叉编译链。

./configure --prefix=$(pwd)/ISVP --host=mips-linux-uclibc  --enable-openssh --enable-tlsv10 --enable-static --disable-shared CC=/opt/mips-gcc472-glibc216-64bit/bin/mips-linux-uclibc-gnu-gcc CXX=/opt/mips-gcc472-glibc216-64bit/bin/mips-linux-uclibc-gnu-g++  --without-zlib --with-pic=no

make

make install

在自己所建的目录中就可以得到响应的头文件和静态库

3、应用

我们知道libcurl要支持HTTPS就需要依赖openssl,因此我们直接使用wolfssl替换openssl,该替换是无需改动任何代码接口的,因此使用很方便。

libcurl依赖wolfssl,编译libcurl的方法和如下描述一样:https://blog.youkuaiyun.com/Swallow_he/article/details/98478466

之后我们使用HTTPClient访问加密的HTTPServer(https访问),得出所有的功能正常。

 

我给你libtpsocket的makefile:# # Copyright (c) 2018 TP-Link Systems Inc. # # Author : Jinfu Chen # Version : 1.0 # Date : 18 Mar, 2018 # include $(TOPDIR)/rules.mk PKG_NAME:=libtpsocket PKG_RELEASE:=1 PKG_VERSION:=1.0 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) include $(INCLUDE_DIR)/package.mk define Package/$(PKG_NAME) SECTION:=TP-Link CATEGORY:=TP-Link iplatform apps MAINTAINER:=Jinfu Chen DEPENDS:=+libubox +zlib +libpthread +librt +TPSOCKET_MBEDTLS:libmbedtls \ +TPSOCKET_OPENSSL:libopenssl +TPSOCKET_WOLFSSL:libcyassl TITLE:=LibTPSocket endef define Package/$(PKG_NAME)/config menu "Configuration" choice prompt "ssl lib version" default TPSOCKET_MBEDTLS help Select ssl lib version. config TPSOCKET_MBEDTLS bool "use mbedtls lib" config TPSOCKET_OPENSSL bool "use openssl lib" config TPSOCKET_WOLFSSL bool "use wolfssl lib" config TPSOCKET_NOSSL bool "use no ssl lib" endchoice endmenu endef ifeq ($(CONFIG_TPSOCKET_WOLFSSL),y) TARGET_CFLAGS += -DTPSOCKET_USE_WOLFSSL=1 -lcyassl SSL_SETTING_DEFINE=\#define TPSOCKET_USE_WOLFSSL 1 endif ifeq ($(CONFIG_TPSOCKET_OPENSSL),y) TARGET_CFLAGS += -DTPSOCKET_USE_OPENSSL=1 -lssl -lcrypto SSL_SETTING_DEFINE=\#define TPSOCKET_USE_OPENSSL 1 endif ifeq ($(CONFIG_TPSOCKET_MBEDTLS),y) ifeq ($(CONFIG_PACKAGE_mbedtls_version),2) TARGET_CFLAGS += -DMBEDTLS_VERSION_TWO endif TARGET_CFLAGS += -DTPSOCKET_USE_MBEDTLS=1 -lmbedtls -lmbedx509 -lmbedcrypto SSL_SETTING_DEFINE=\#define TPSOCKET_USE_MBEDTLS 1 endif ifeq ($(CONFIG_TPSOCKET_NOSSL),y) TARGET_CFLAGS += -DTPSOCKET_USE_NOSSL=1 SSL_SETTING_DEFINE=\#define TPSOCKET_USE_NOSSL 1 endif ifeq ($(CONFIG_HTTP_HMAC_HKDF_SUPPORT),y) TARGET_CFLAGS += -DHTTP_HMAC_HKDF_SUPPORT endif define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ mkdir -p $(STAGING_DIR)/usr/include/$(PKG_NAME)/ $(CP) ./src/*.h $(STAGING_DIR)/usr/include/$(PKG_NAME)/ echo "$(SSL_SETTING_DEFINE)" > $(STAGING_DIR)/usr/include/$(PKG_NAME)/tpsocket_ssl_setting.h endef define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/lib $(INSTALL_BIN) $(PKG_BUILD_DIR)/libtpsocket.so $(1)/usr/lib $(INSTALL_DIR) $(STAGING_DIR)/usr/lib/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/libtpsocket.so $(STAGING_DIR)/usr/lib/ #$(INSTALL_DIR) $(1)/usr/bin #$(INSTALL_BIN) $(PKG_BUILD_DIR)/testsocket $(1)/usr/bin $(CP) -rf ./filesystem/* $(1)/ endef $(eval $(call BuildPackage,$(PKG_NAME)))
09-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值