OpenSSL QuickStart

news2024/11/23 15:38:16

文章目录

  • 1. Windows环境
    • Perl
    • nasm
    • OpenSSL
    • 编译
    • VS测试项目
  • 2. Linux环境
    • 编译
    • 测试项目
  • 参考资料

1. Windows环境

  • Windows 10
  • VS 2019
  • nasm汇编工具:https://nasm.us/
  • Perl: 官网地址https://www.perl.org/get.html
  • OpenSSL:
    • 官网地址:https://www.openssl.org/
    • Github: https://github.com/openssl/openssl
    • Releases: https://www.openssl.org/source/old/
    • Tags: https://github.com/openssl/openssl/tags

Perl

Perl有Activestate和Strawberry两种版本,后者比前者多了许多模块,要大很多。

而Strawberry版本安装后带了一个300多M的C开发环境,删掉后把perl.exe路径添加到环境变量即可。

Github建议使用Strawberry版本,这样就不用额外构建模块了。使用msi安装包可以自动添加环境变量,如果使用压缩包版本记着手动添加一下。

装完执行 perl -v有版本回显则安装成功。

nasm

直接在官网安装最新版,并添加环境变量。

OpenSSL

OpenSSL源码使用3.0 LTS版本,该版本维护到2026年9月7日。本文使用的是3.0.5版本

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

除了源码,还有hash和签名,逐个验证一下。

# 先验证完整性。SHA1和SHA256,碰撞一个是有可能的,但两个都碰撞就几乎不可能了:
> certutil -hashfile .\openssl-3.0.5.tar.gz SHA1
SHA1 的 .\openssl-3.0.5.tar.gz 哈希:
a5305213c681a5a4322dad7347a6e66b7b6ef3c7
CertUtil: -hashfile 命令成功完成。
> certutil -hashfile .\openssl-3.0.5.tar.gz SHA256
SHA256 的 .\openssl-3.0.5.tar.gz 哈希:
aa7d8d9bef71ad6525c55ba11e5f4397889ce49c2c9349dcea6d3e4f0b024a7a
CertUtil: -hashfile 命令成功完成。
# 获取签名key
>gpg --verify openssl-3.0.5.tar.gz.asc openssl-3.0.5.tar.gz
gpg: Signature made Tue Jul  5 16:57:31 2022
gpg:                using RSA key 7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C
gpg:                issuer "levitte@openssl.org"
gpg: Can't check signature: No public key
# 从服务器导入公钥
>gpg --keyserver hkp://keys.gnupg.net --recv-key 7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C
gpg: key D5E9E43F7DF9EE8C: 1 duplicate signature removed
gpg: key D5E9E43F7DF9EE8C: public key "Richard Levitte <richard@levitte.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1
# 再次验签
>gpg --verify openssl-3.0.5.tar.gz.asc openssl-3.0.5.tar.gz
gpg: Signature made Tue Jul  5 16:57:31 2022
gpg:                using RSA key 7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C
gpg:                issuer "levitte@openssl.org"
gpg: Good signature from "Richard Levitte <richard@levitte.org>" [unknown]
gpg:                 aka "Richard Levitte <richard@opensslfoundation.org>" [unknown]
gpg:                 aka "Richard Levitte <richard@openssl.com>" [unknown]
gpg:                 aka "Richard Levitte <levitte@lp.se>" [unknown]
gpg:                 aka "Richard Levitte <levitte@openssl.org>" [unknown]
gpg:                 aka "Richard Levitte <richard@opensslfoundation.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7953 AC1F BC3D C8B3 B292  393E D5E9 E43F 7DF9 EE8C

编译

管理员身份打开vs的命令行:win键搜索“prompt”等关键词,或者执行vs安装目录\Community\VC\Auxiliary\Build下的对应架构脚本。VS官网文档对各个命令行的介绍:

Developer Command Prompt - Sets the environment to use 32-bit, x86-native tools to build 32-bit, x86-native code.
x86 Native Tools Command Prompt - Sets the environment to use 32-bit, x86-native tools to build 32-bit, x86-native code.
x64 Native Tools Command Prompt - Sets the environment to use 64-bit, x64-native tools to build 64-bit, x64-native code.
x86_x64 Cross Tools Command Prompt - Sets the environment to use 32-bit, x86-native tools to build 64-bit, x64-native code.
x64_x86 Cross Tools Command Prompt - Sets the environment to use 64-bit, x64-native tools to build 32-bit, x86-native code.

为了方便调试和学习,我用默认的Developer Command Prompt编译成32位。

执行OpenSSL下的Configure,生成makefile:

# 为了方便调试和学习 选择x86架构
# 所有支持的平台可以在\util\perl\OpenSSL\config.pm查看
# 默认架构则是与当前系统一致
# --prefix指定安装目录 
# --debug 生成调试符号
# 其它选项可以查看Configure文件中的注释 如-static
>perl Configure VC-WIN32 --prefix=E:\prooooooooooogram1\openssl\build_x86 --debug
Using os-specific seed configuration
Created configdata.pm
Running configdata.pm
Created makefile.in
Created makefile

**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL.md file first)      ***
***                                                                ***
**********************************************************************

开始编译,需要等几分钟:

nmake
nmake test

安装,这里如果一开始不指定prefix安装路径,则默认装在c盘ProgramFiles路径,需要管理员权限。

nmake install

这一步将编译结果复制到安装目录里,包括:

  • bin:可执行文件、动态库、调试符号;
  • html:文档;
  • include:头文件;
  • lib:为动态库配备的导入库(不是静态库)。
E:\prooooooooooogram1\openssl\build_x86> ls


    目录: E:\prooooooooooogram1\openssl\build_x86


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/12/14     17:33                bin
d-----        2022/12/14     17:36                html
d-----        2022/12/14     17:32                include
d-----        2022/12/14     17:32                lib

VS测试项目

在build_x86同级目录openssl下新建一个vs工程TestOpenSSL:

PS E:\prooooooooooogram1\openssl> ls


    目录: E:\prooooooooooogram1\openssl


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/12/15      9:59                build_x86		# 编译好的openssl库
d-----        2022/12/15      9:55                openssl-3.0.5	# openssl源码
d-----        2022/12/15     10:04                TestOpenSSL	# vs工程
-a----        2022/12/13     14:12       15074407 openssl-3.0.5.tar.gz
-a----        2022/12/13     14:16            862 openssl-3.0.5.tar.gz.asc
-a----        2022/12/13     14:16             42 openssl-3.0.5.tar.gz.sha1
-a----        2022/12/13     14:16             66 openssl-3.0.5.tar.gz.sha256

工程配置如下:

  • Debug 模式,Win32平台;
  • 调试-工作目录:..\build_x86\bin\,与依赖的dll放在同一目录;
  • VC++目录-包含目录,添加..\build_x86\include
  • 链接器-依赖库目录:..\build_x86\lib
  • 链接器-输入:添加依赖库libcrypto.lib

请添加图片描述
请添加图片描述
请添加图片描述

在源码demos目录下找一个示例文件,拷贝过来:

\openssl-3.0.5\demos\cipher\aesccm.c

这里编译运行,会报错:

OPENSSL_Uplink(50AB3378,07): no OPENSSL_Applink

这是openssl在windows平台下的兼容问题,对应文档:

/build_x86/html/man3/OPENSSL_Applink.html
OPENSSL_Applink - glue between OpenSSL BIO and Win32 compiler run-time

解决方法:打开aesccm.c,开头添加如下代码

#define _CRT_SECURE_NO_WARNINGS // disable deprecation warning
#ifdef __cplusplus
extern "C" {
#endif
#include <openssl/applink.c>
#ifdef __cplusplus
};
#endif

之后可以顺利运行:

vs-run

因为openssl编译时生成了调试符号,所以可以单步调试进入底层逻辑:

vs-debug

2. Linux环境

  • Ubuntu 20.04
  • VS Code远程开发环境,依赖插件:
    • c/c++
    • Remote SSH

编译

tar -xvf openssl-3.0.5.tar.gz
cd openssl-3.0.5
# 如果要编译32位,则执行./Configure linux-x86, 64位机器上需要安装依赖库
# 安装路径等选项 默认即可
./Configure --debug
make -j2
make test
make install

测试项目

这次把\openssl-3.0.5\demos\cipher\这个文件夹拿来测试,因为这里其实是有一个makefile的:

E:\prooooooooooogram1\openssl\openssl-3.0.5\demos\cipher> ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2022/7/5     16:57           7247 aesccm.c
-a----          2022/7/5     16:57           6504 aesgcm.c
-a----          2022/7/5     16:57           5048 ariacbc.c
-a----          2022/7/5     16:57            575 Makefile

Makefile内容如下:

CFLAGS = $(OPENSSL_INCS_LOCATION) -g
# 手动添加-g 支持调试
LDFLAGS = $(OPENSSL_LIBS_LOCATION) -lssl -lcrypto	
# 链接libssl.so和libcrypto.so


all: aesccm aesgcm ariacbc

aesccm: aesccm.o
aesgcm: aesgcm.o
ariacbc: ariacbc.o

aesccm aesgcm ariacbc:
	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)

clean:
	$(RM) aesccm aesgcm ariacbc *.o

执行命令:

make
./aesccm
#报错
./aesccm: error while loading shared libraries: libcrypto.so.3: cannot open shared object file: No such file or directory

原因是软件包管理器没有更新刚安装的openssl路径,更新一下即可:

$ ldd ./aesccm
        linux-vdso.so.1 (0x00007fff1d792000)
        libcrypto.so.3 => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9b0e9a8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9b0eba9000)
$ sudo updatedb
$ locate libcrypto.so.3
/home/starr/openssl-3.0.5/libcrypto.so.3
/usr/local/lib64/libcrypto.so.3
$ sudo vim /etc/ld.so.conf # 添加一行/usr/local/lib64/
$ sudo ldconfig
$ ldd ./aesccm
        linux-vdso.so.1 (0x00007fff88fa6000)
        libcrypto.so.3 => /usr/local/lib64/libcrypto.so.3 (0x00007f15ced6b000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f15ceb79000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f15ceb73000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f15ceb50000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f15cf1f7000)
$ ./aesccm
AES CCM Encrypt:
...

在这里插入图片描述

参考资料

openssl/NOTES-WINDOWS.md at master · openssl/openssl · GitHub

openssl/INSTALL.md at master · openssl/openssl · GitHub

Use the Microsoft C++ toolset from the command line | Microsoft Learn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022下半年软件设计师备考经验帖

祝大家逢考必过 7月1号备考-11月05号考试 推荐up主&#xff1a;zst_2001 跟着视频来基本必过 以下是复习资料 章节章节01 - 计算机组成原理与体系结构07 - 法律法规与标准化与多媒体基础02 - 操作系统基本原理08 - 设计模式03 - 数据库系统09 - 软件工程04 - 计算机网络10 - …

垂直领域问答小程序开发,打开知识领域无限能量

知乎作为一款问答类app&#xff0c;深受大众信赖&#xff0c;知乎构建了一个人人都可以便捷接入的知识分享网络&#xff0c;让人们便捷的与世界分享知识、经验和见解&#xff0c;让我们发现更大的世界。知乎的成功让很多人看到了垂直领域问答小程序存在的商机&#xff0c;想要进…

[JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

PS&#xff1a;查了多方资料&#xff0c;都没有提到用 JavaScript 来实现频域水印的教程&#xff0c;故经过笔者的实践&#xff0c;遂写一篇教程来简单介绍。 通过了解频域水印的相关知识&#xff0c;我理解了频域水印就是先将图片进行傅里叶变换&#xff0c;得到频域图&#x…

全国制造业新产品开发流程管理(甄选班)招生简章

近来&#xff0c;越来越多的TO C企业已经将业务从C端转型到了B端&#xff0c;而传统的市场品牌部门除了品牌相关的工作&#xff0c;也将会越来越多承担企业“增长”的业务&#xff1b;“营”与“销”脱节的是市场部门也越来越受到了Diss。 那么&#xff0c;To B产品经理能力提…

package xxx does not exist

1、开发环境如下&#xff1a; gradle 7.3.3: gradle插件&#xff1a;7.2 AS&#xff1a; 2、报错日志 /Users/andrew/Documents/React/Code/TestRetrofit/app/src/main/java/com/lwd/testretrofit/MainActivity.java:8: error: package com.lwd.testretrofit.lwd does not e…

如何用好图表?

如何选择合适的图表&#xff1f; 在可视化图表中&#xff0c;基于不同的目的&#xff0c;我们要选择不同的图表 一般情况下&#xff0c;我们需要借助图表达成4个目的&#xff1a;展示比较&#xff0c;展示分布&#xff0c;展示联系&#xff0c;展示构成 一.作用 1.展示比较 …

数据结构-克鲁斯卡尔算法,普利姆算法(求最小生成树)

当然了昨天晚上写了求两源点之间最少权值和&#xff0c;就不得不再写一下另外两个求最小生成树的算法分别是克鲁斯卡尔和普利姆了&#xff0c;话不多说直接进入主题 目录 并查集&#xff1a; 克鲁斯卡尔算法(与并查集结合起来)&#xff1a; 普利姆算法&#xff1a; 并查集&a…

[附源码]Python计算机毕业设计高校教学过程管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

产品诚可贵,质量价更高

产品诚可贵&#xff0c;质量价更高缘起所属行业研发人员规模所在团队规模团队开发模式产品类别软件主体层次软件交付周期软件需求质量/感受/问题设计质量保证及好与不好开源组件代码质量千行缺陷数单元测试代码覆盖率和测试质量质量文化和QA人员测试团队人员配置质量工程活动功…

第4篇:嵌入式Linux应用开发基础知识

嵌入式Linux应用开发基础知识一、GCC编译过程二、MakefileMakefile的引入及规则Makefile的语法a. 通配符b. 假想目标: .PHONYC. 变量Makefile函数函数foreach函数filter/filter-outWildcardpatsubst函数Makefile实例通用MakefikeMakefikeMakefile.build说明.txt三、TCPserver.c…

springMVC+mysql实现的Java web图书管理系统源码+运行教程+参考论文

今天给大家演示的是一款由srpingMVC实现的Java web图书管理系统&#xff0c;本项目功能非常丰富&#xff0c;且附带配套论文及视频指导配置运行教程&#xff0c;系统实现的功能主要有&#xff1a;图书馆里、图书分类管理、出版社管理、图表图书统计展示、用户管理、角色管理、权…

小村庄迸发大能量,桃浦村“藏”着花样经,“烘”出财富来

从几人的小公司到产税千万级的高新技术和数集团企业总部;从拿着10万元注册资金开公司处处碰壁的小公司到家喻户晓的国牌护肤品林清轩……在普陀区桃浦镇的桃浦村&#xff0c;默默“耕耘”出了一家家优秀的民营企业。 筑巢引凤聚人才&#xff0c;注入乡村振兴新动能。在上海市委…

【数据结构】二叉树的前序遍历、中序遍历、后序遍历、层序遍历

文章目录 1.二叉树的概念 1.1概念 1.2存储方式 1.3特殊的二叉树 1.4规律 2.二叉树的实现 2.1表现方式 2.2遍历 2.2.1前序遍历 思想 代码 详细分析 2.2.2中序遍历 2.2.3后序遍历 2.2.4层序遍历 思想 代码 详细过程 1.二叉树的概念 1.1概念 一棵二叉树是结点的一个有限…

第25届京港会开幕 元宇宙产业委与香港国际元宇宙协会启动全面合作

央链直播讯&#xff0c;以“融入新格局 合作谱新篇”为主题的第25届北京香港经济合作研讨洽谈会&#xff08;简称“京港洽谈会”&#xff09;14日在北京和香港开幕。据悉&#xff0c;自1997年香港回归以来&#xff0c;京港洽谈会已成功举办24届&#xff0c;两地在金融、专业服务…

基于 KubeSphere 的运管系统落地实践

作者&#xff1a;任建伟&#xff0c;某知名互联网公司云原生工程师&#xff0c;容器技术信徒&#xff0c;云原生领域的实践者。 背景介绍 在接触容器化之前&#xff0c;我们团队内部的应用一直都是基于虚拟机运管&#xff0c;由开发人员自行维护。 由于面向多开发部门服务&am…

ThingsBoard 3.1.1版本在window本地运行之TB-Gateway ODBC数据上传(四)

目录 1、前言 2、Thingsboard Gateway 1.tb-gateway的概念 2.tb-gateway的配置 3.odbc连接器配置 3、ODBC的配置 1.安装window的ODBC驱动程序 2.配置ODBC的驱动程序信息 4、效果展示 1、前言 项目中会出现这样的情况&#xff0c;有个平台搭建在本地&#xff0c;而数据也存…

Jenkins构建并部署一个go语言项目

Jenkins安装 1、下载 安装java [rootlocalhost ~]# yum install java-1.8.0-openjdk* -y 方式一&#xff1a; #下载安装包 [rootlocalhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.249.1-1.1.noarch.rpm #安装Jenkins [rootlocalhost…

【excel导入、导出】pom、实体类、工具类、例子

目录 一、环境搭建&#xff1a; pom&#xff1a; 实体类&#xff08;ExcelClassField &#xff09;&#xff1a; 工具类&#xff1a; 二、【示例】导入 controller&#xff1a; service 实体类&#xff1a; 注意&#xff1a; 三、【示例】导出 controller&#xff1a; …

搜索与图论 - bellman-ford 算法

文章目录一、为什么 Dijkstra 算法不适用于含负权的图1. 理论推导2. 实例演示2.1 详细步骤2.2 结果二、bellman-ford 算法1. 简介2. 基本思路3. 简单举例4. bellman-ford 算法具体实现过程详见例题有边数限制的最短路。三、bellman-ford 算法例题——有边数限制的最短路具体实现…

仓库24代 “ CK_Label_v24

产品型号 CK_Label_v24 尺寸 124x90x12mm&#xff08;不含安装支架&#xff09; 屏幕尺寸 4.2 inch 显示技术 电子墨水屏显示 显示区域面积 (mm) 84.8(H) x 63.6(V) 分辨率 400*300 像素密度 120dpi 显示颜色 黑/白 外观颜色 白色&灰外圏 按键 3 指示灯…