本次编译操作版本是:openssl-1.0.0a

一、下载源码

1、打开下面的链接,选择下载 openssl-1.0.0a.tar.gz

https://www.openssl.org/source/old/1.0.0/

2、将下载的openssl-1.0.0a.tar.gz源码包拷贝到linux下,并执行如下命令解压

tar xvzf openssl-1.0.0a.tar.gz

二、配置openssl

下面配置方式,二选一即可

方式一:

./Configure no-asm no-shared no-async linux-generic32 --prefix=/data1/mayue/work/myProject/project/opensource/openssl-1.0.0a --cross-compile-prefix=/opt/buildroot-mips-gcc492-uclibc/usr/bin/mipsel-linux-

方式二:

./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=arm-linux-

之后,打开Makefile,删除里面所有的-m64和-m32编译选项。


由于是新项目编译工具链发生变化需要重新交叉编译openssl,但是交叉编译后使用时发现总是出现公钥加密失败的情况,定位到RSA_size得到的位数都不对。

之前交叉编译openssl静态库/动态库都使用的方式二,但都不好使,百度发现方式一的配置方式,尝试后终于OK,关键的不同是是否带编译参数 linux-generic32

验证demo:

//test_rsa.c#include <stdio.h>
//#include <openssl/rsa.h>
//#include <openssl/x509.h>
#include "./openssl/rsa.h"
#include "./openssl/x509.h"int main()
{int i=0;printf("hello world\n");unsigned char pub_ras_str[140] = {0x30,0x81,0x89,0x02,0x81,0x81,0x00,0xa5,0x31,0x06,0xc6,0xfc,0x89,0x5a,0x9c,0x73,0x21,0x9b,0xa2,0x0f,0x37,0x7f,0xb5,0xa1,0x73,0x0e,0xc2,0x05,0xa2,0x61,0x5e,0x9a,0x74,0x56,0x1a,0xcf,0xc4,0xe6,0x82,0x6b,0xfe,0x97,0xdc,0xb8,0x96,0x49,0x54,0x96,0xef,0x6c,0xbc,0x7a,0xbb,0x30,0xdc,0x73,0xfe,0x4f,0xde,0xa4,0x5c,0xc5,0x59,0x40,0xd0,0x66,0xee,0xfd,0x28,0x42,0x22,0xf6,0xa0,0xeb,0x45,0xe6,0x62,0x46,0x6a,0x71,0xaa,0x72,0x94,0xf7,0xdd,0xe2,0x6a,0x2e,0x8a,0x1b,0x61,0x00,0x09,0x2f,0x8b,0x9e,0x25,0x4e,0xcf,0x7f,0xce,0x59,0xdb,0xfb,0x52,0x3d,0x59,0x3e,0xd2,0x31,0x6c,0xf1,0xe8,0x31,0x7b,0xe7,0xa9,0x1f,0x19,0x1e,0xe3,0x27,0x86,0xad,0xcf,0x64,0xaf,0x60,0xd4,0x30,0x8f,0x30,0x2d,0x40,0x33,0x02,0x03,0x01,0x00,0x01};for(i=0;i<sizeof(pub_ras_str);i++){printf("pub_ras_str[%d] = %#x\n",i,pub_ras_str[i]);}unsigned char *pPubKeyBuff = pub_ras_str;int pPubKeyLength = 140;RSA *pPubRsa = NULL;int iRsa_len = -1;pPubRsa = d2i_RSAPublicKey(NULL, (const unsigned char **)&pPubKeyBuff, (long)pPubKeyLength);if (NULL == pPubRsa){printf("d2i_RSAPublicKey failed\n");return -1;}iRsa_len = RSA_size(pPubRsa) - 11; //RSA_size(pPubRsa)应该为128if (iRsa_len < 0){printf("RSA_size failed, iRsa_len[%d]\n", iRsa_len);RSA_free(pPubRsa);return -1;}printf("RSA_size ok, iRsa_len[%d] RSA_size(pPubRsa)=%d\n", iRsa_len,RSA_size(pPubRsa));return 0;
}

上面RSA_size(pPubRsa)应该为128,pub_ras_str公钥字符数组是抓包拷贝出来的。

配置参数说明:

no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程;
shared: 生成动态连接库,shared和no-shared二选一;
no-shared: 生成静态连接库,shared和no-shared二选一;
no-async: 交叉编译工具链没有提供GNU C的ucontext库;
--prefix: 安装路径;
--cross-compile-prefix: 交叉编译工具;
linux-generic32: 表示标准32位linux,平台类型选项;

三、编译

1.执行make编译工程;

2.执行make install,安装openssl到指定路径;

值得注意的是,在arm交叉编译环境中,引用库的顺序为:-lssl -lcrypto,如果为 -lcrypto -lssl就会编译错误。

四、其他

1、目前openssl目标平台可支持目前支持的包括:
https://blog.csdn.net/ty3219/article/details/77717478

BS2000-OSD BSD-generic32 BSD-generic64 BSD-ia64 BSD-sparc64 BSD-sparcv8
BSD-x86 BSD-x86-elf BSD-x86_64 Cygwin Cygwin-i386 Cygwin-i486 Cygwin-i586
Cygwin-i686 Cygwin-x86 Cygwin-x86_64 DJGPP MPE/iX-gcc OS390-Unix QNX6
QNX6-i386 UEFI UWIN VC-CE VC-WIN32 VC-WIN64A VC-WIN64A-masm VC-WIN64I aix-cc
aix-gcc aix64-cc aix64-gcc android android-armeabi android-mips android-x86
android64 android64-aarch64 bsdi-elf-gcc cc darwin-i386-cc darwin-ppc-cc
darwin64-debug-test-64-clang darwin64-ppc-cc darwin64-x86_64-cc dist gcc
haiku-x86 haiku-x86_64 hpux-ia64-cc hpux-ia64-gcc hpux-parisc-cc
hpux-parisc-gcc hpux-parisc1_1-cc hpux-parisc1_1-gcc hpux64-ia64-cc
hpux64-ia64-gcc hpux64-parisc2-cc hpux64-parisc2-gcc hurd-x86 ios-cross
ios64-cross iphoneos-cross irix-mips3-cc irix-mips3-gcc irix64-mips4-cc
irix64-mips4-gcc linux-aarch64 linux-alpha-gcc linux-aout linux-arm64ilp32
linux-armv4 linux-c64xplus linux-elf linux-generic32 linux-generic64
linux-ia64 linux-mips32 linux-mips64 linux-ppc linux-ppc64 linux-ppc64le
linux-sparcv8 linux-sparcv9 linux-x32 linux-x86 linux-x86-clang linux-x86_64
linux-x86_64-clang linux32-s390x linux64-mips64 linux64-s390x linux64-sparcv9
mingw mingw64 nextstep nextstep3.3 purify qnx4 sco5-cc sco5-gcc
solaris-sparcv7-cc solaris-sparcv7-gcc solaris-sparcv8-cc solaris-sparcv8-gcc
solaris-sparcv9-cc solaris-sparcv9-gcc solaris-x86-gcc solaris64-sparcv9-cc
solaris64-sparcv9-gcc solaris64-x86_64-cc solaris64-x86_64-gcc tru64-alpha-cc
tru64-alpha-gcc uClinux-dist uClinux-dist64 unixware-2.0 unixware-2.1
unixware-7 unixware-7-gcc vms-alpha vms-alpha-p32 vms-alpha-p64 vms-ia64
vms-ia64-p32 vms-ia64-p64 vos-gcc vxworks-mips vxworks-ppc405 vxworks-ppc60x
vxworks-ppc750 vxworks-ppc750-debug vxworks-ppc860 vxworks-ppcgen
vxworks-simlinux debug debug-erbridge debug-linux-ia32-aes debug-linux-pentium
debug-linux-ppro debug-test-64-clang

参考资料
https://blog.csdn.net/weixin_42432281/article/details/87189341
https://blog.csdn.net/ty3219/article/details/77717478
https://blog.csdn.net/klkfl/article/details/90359186
https://blog.csdn.net/linyanxin2007/article/details/82048332
https://blog.csdn.net/jnjavelin/article/details/100134655

交叉编译openssl相关推荐

  1. 更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL)

    更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL) 参考文章: (1)更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL) (2)https:// ...

  2. linux交叉编译openssl,交叉编译openssl for linux arm-v5te-linux-gnueabi工具链

    我遇到了同样的问题并写了一本关于如何交叉编译openssl for arm的手册 . 我希望本手册能给你一些想法: 这个过程非常简单 . 在本手册中,我们将给出一个在Ubuntu Linux系统中交叉 ...

  3. 交叉编译openssl到aarch64

    交叉编译openssl到aarch64 openssl下载地址 解压 tar xvzf openssl-1.1.1.tar.gz 下载 aarch64 交叉编译工具链 linaro官网下载 https ...

  4. linux 交叉编译 openssl

    <openssl简介> SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输.Netscape公司在推出第一个Web浏览器的同时 ...

  5. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 交叉编译 OpenSSL 开源库 )

    文章目录 一.OpenSSL 开源库简介 二.OpenSSL 源码及环境变量脚本下载 三.修改环境变量脚本 四.OpenSSL 交叉编译 五.OpenSSL 交叉编译相关资源下载 参考博客 : [An ...

  6. 【经验分享】linux交叉编译 - openssl动态库

    一.准备工作 1.到openssl官网下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(如上传到目录/home/test下),并使用tar -xvf ...

  7. Linux 裁剪并交叉编译openssl库

    openssl介绍 OpenSSL是功能强大的,商业级,功能齐全的工具包,可用于传输层安全性(TLS)和安全套接字(SSL)协议. 由于与很多软件保持依赖关系,所以很多情况需要安装它- 下载地址 ht ...

  8. arm-xm-linux交叉编译openssl

    编译环境 Ubuntu 16.04 x86_64 arm-xm-linux.tar.gz 下载openssl源码 $ wget https://www.openssl.org/source/opens ...

  9. Ubuntu16.04交叉编译openssl、openssh

    一.交叉编译安装openssl 1.进入openssl官网下载源码,入口地址,个人选择的版本入口地址. 2.上传到Ubuntu解压. 3. 进入解压目录创建一个存放编译输出结果的目录. 4.执行配置生 ...

  10. 交叉编译openssl不修改Makefile的方法

    网上流传的方法都是要修改Makefile的cc值,我来说个不用修改的方法 作者:帅得不敢出门   C++哈哈堂<31843264> openssl 下载 http://www.openss ...

最新文章

  1. 产品经理跪求程序员修改需求
  2. 400全集python全套视频教程-千锋出品全套python视频教程,400大全集,你了解吗?...
  3. HBase简单代码实例(Java)
  4. 什么是网络套接字(Socket)?
  5. macbook不能进系统 备份数据_外卖骑手,困在系统里;绩效考核与奖惩激励,不能困在数据里...
  6. xenserver 虚拟机扩容lvm磁盘分区的方法_Linux磁盘扩容
  7. 关于平方根倒数速算法(雷神之锤3,牛B)
  8. mysql、oracle在Linux和Windows下的简单自动备份
  9. AVDictionary结构体相关源码介绍
  10. Pytorch安装步骤
  11. 程序员桌面都这么秀?网友:用砖头当杯垫这样合适吗?留着吓谁
  12. 思科Cisco Nexus 9508交换机的QSFP+端口高速线缆DAC布线方案
  13. 2018年烽火通信c语言笔试题,2018-9-19 烽火通信C++面经
  14. 微信小程序-历史搜索记录保存与清空
  15. ORACLE 8023学习总结
  16. Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表
  17. 汽车的主要结构参数和性能参数
  18. dede栏目添加自定义字段方法
  19. context.getApplicationContext()与context的差别
  20. select中选中option的方法

热门文章

  1. 计算机安全模式win7,win7安全模式下怎么恢复系统
  2. Microsoft Edge逃离360之路
  3. AI插画设计,用AI制作一个只可爱的短腿柯基插画
  4. Python入门之烤地瓜练习
  5. Python查询快递订单信息
  6. 使命召唤9怎么样使用计算机,玩家实测COD9 教你如何使用FXAA、TXAA
  7. Java程序员该如何准备明年的「金三银四」跳槽季,你准备好了吗?
  8. 去湘菜馆,该不该来壶酸梅汁?
  9. 软件工程-什么是热重载,如何使用热重载?
  10. bitbucket配置_如何配置Bitbucket的ssh