CMake构建学习笔记19-OpenSSL库的构建

news/2025/3/11 15:02:16/文章来源:https://www.cnblogs.com/charlee44/p/18621497

1. 概述

OpenSSL是一个开源的加密工具包和库,主要实现了安全套接字层(SSL)和传输层安全(TLS)协议,以及各种加密算法、数字签名、消息摘要、加密证书等功能。这个库可以说是Web开发尤其是HTTPS通信的基石了。这里就具体讲解一下如何构建它。

2. 构建过程

2.1 Windows环境

首先要说明的是OpenSSL目前的版本(我使用的是3.4.0版本)还没有支持使用CMake构建。但是好在作为老牌的开源库,它的构建文档非常详细。先介绍一下Windows环境下的构建,Windows下当然使用MSVC编译器进行构建了,这就要用到MSVC的命令行的工具。我这里使用的是x64 Native Tools Command Prompt for VS 2019,如下图1所示:

图1 MSVC命令行的工具

除此之外,MSVC的命令nmake似乎缺少像linux Make或者CMake的Configure这一步,因此,需要额外安装perl。另外,还需要安装NASM作为汇编器,一般使用这个是为了获得指令集级别的性能优化。安装好这两个程序之后,一般会自动在Path环境变量中增加相应的可执行程序位置。如果没有添加成功,就手动添加一下。当你在CMD终端中分别输入:

perl -version
nasm -v

有相应的版本号出现的时候,就说明正确安装并且能被系统所识别了,如下所示:

C:\Users\Charlee>perl -version
Locale 'Chinese (Simplified)_China.936' is unsupported, and may crash the interpreter.This is perl 5, version 38, subversion 2 (v5.38.2) built for MSWin32-x64-multi-threadCopyright 1987-2023, Larry WallPerl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at https://www.perl.org/, the Perl Home Page.C:\Users\Charlee>nasm -v
NASM version 2.16.01 compiled on Jun  1 2023

由于MSVC的命令行工具是基于CMD终端的,也就是使用不了更方便的Powershell终端。这里给出完整的构建bat脚本如下所示,读者需要注意跟自己的环境相适配,并修改相应的设置值:

@echo off
REM 区域设置
set LC_ALL=C
set LANG=CREM 配置 Visual Studio 版本
SET VS_VERSION=2019
SET VS_EDITION=EnterpriseREM 配置架构(x64 或 x86)
SET TARGET_ARCH=x64REM 设置 OpenSSL 源码目录和目标目录
SET OPENSSL_SRC_DIR=../Source/openssl-openssl-3.4.0
SET OPENSSL_INSTALL_DIR=%GISBasic%REM 启动 Visual Studio 的开发者命令行环境
CALL "C:\Program Files (x86)\Microsoft Visual Studio\%VS_VERSION%\%VS_EDITION%\VC\Auxiliary\Build\vcvarsall.bat" %TARGET_ARCH%IF ERRORLEVEL 1 (echo Failed to configure Visual Studio environment.EXIT /B 1
)REM 进入 OpenSSL 源码目录
CD /D %OPENSSL_SRC_DIR%REM 配置 OpenSSL
perl Configure VC-WIN64A --prefix=%OPENSSL_INSTALL_DIR% --release
IF ERRORLEVEL 1 (echo Configuration failed.EXIT /B 1
)REM 构建 OpenSSL
nmake
IF ERRORLEVEL 1 (echo Build failed.EXIT /B 1
)REM 测试构建
REM nmake test
REM IF ERRORLEVEL 1 (
REM    echo Tests failed.
REM    EXIT /B 1
REM )REM 安装到目标目录
nmake install
IF ERRORLEVEL 1 (echo Installation failed.EXIT /B 1
)echo Build and installation successful!
EXIT /B 0

根据笔者的实际测试,OpenSSL提供的构建选项虽然多,但是只有--prefix=%OPENSSL_INSTALL_DIR% --release是生效的,好在release模式也能生成pdb文件,能够满足我的需求了。另外nmake test这一步可以省略,测试构建这一步非常慢。

2.2 Linux环境

在Linux环境下构建OpenSSL就相对简单了,我这里使用的Ubuntu20.4,构建安装到GISBasic环境变量指定的目录中,具体脚本如下:

#!/bin/bashBuildDir="./openssl-openssl-3.4.0"
InstallDir=$GISBasic# 加载环境变量文件
source /etc/environment# 解压缩
unzip -q -o "../Source/openssl-openssl-3.4.0.zip" -d "../Source"# 检查构建目录是否存在
if [ -d "$BuildDir" ]; thenrm -rf "$BuildDir" # 目录存在,删除它
fi
# 创建构建目录
mkdir -p "$BuildDir"cd "../Source/openssl-openssl-3.4.0"./Configure --openssldir=$BuildDir --prefix=$InstallDir --releasemakemake install

在Openssl的官方文档中提供了非常多的构建配置选项,笔者这里也没有使用太多,后续有需要再进行修改吧。

3. 使用方式

虽然Openssl并没有提供CMake的编译方式,但是构建完成后却提供了OpenSSLConfig.cmake配置文件,能够被CMake正常识别引入。只需要再CMakeList.txt文件中使用如下语句:

find_package(OpenSSL REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL)
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::Crypto)

就可以在我们的主执行程序中使用OpenSSL了。关于这一步读者如果不太理解可以参考一下笔者前面的文章《CMake构建学习笔记15-组建第一个程序项目》。

另外,OpenSSL还提供了一个可执行程序,通过这个可执行程序可以创建一个SSL证书。虽然这个创建的证书是自己给自己签发的,不能被浏览器安全认证,但是可以用来做测试https通信。第一步是创建私钥:

openssl genrsa -out server.key 2048

这将在当前目录下生成一个名为server.key的2048位RSA私钥。接下来是生成证书签名请求:

openssl req -new -key server.key -out server.csr

按照提示,输入证书信息。比较关键的是要将Common Name配置程服务器域名或IP地址。如果是本地测试,就填写 localhost。最后就是生成一个有效期为365天的自签名证书server.crt:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论沉思录:初等假设检验

我们在上一篇博客中介绍了传统的抽样理论。其中,我们导出了几种经典的抽样分布,也即给定关于所观察现象的假设H,数据D的概率分布p(D | H)。在上一篇博客中提到的伯努利坛子模型中,假设H即坛子的内容,数据D即重复抽球所生成的红球和白球序列。但正如我们我们在上一篇博客的…

开启Word、Excel、PPT时速度很慢的一种解决方法

本文介绍基于修改加载项,解决Microsoft Office系列软件开启速度较慢的办法~本文介绍基于修改加载项,解决Microsoft Office系列软件开启速度较慢的办法。最近,发现Excel软件的打开速度越来越慢,会在一定程度上影响工作效率。因此尝试对此加以解决。其中,本文所给方法对于Wo…

2024-2025-1 学号20241315《计算机基础与程序设计》第十三周学习总结

作业信息这个作业属于哪个课程 <班级的链接>2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13这个作业的目标 <写上具体方面>第12章并完成云班课测试作业正文 ... 本博客链接 h…

【解决方案】电商精细化运营方案

随着互联网技术的不断发展和普及,电商行业在过去几十年中取得了巨大的发展和变革。从供小于求的“以商品为主”阶段,到享受时代红利的“以流量为主”阶段,再到重视消费者体验的“精细化运营”阶段,电商市场正在进入以消费者为中心精细化运营时代,这要求电商企业从存量市场…

洛谷 P11411 兰奇的卡牌游戏——题解

洛谷P11411兰奇的卡牌游戏传送锚点摸鱼环节 兰奇的卡牌游戏 题目描述 作为制卡大师的兰奇,发明了一种自助型卡牌游戏。 给定 \(n\) 张卡牌,第 \(i\) 张卡牌编号为 \(i\),其权值为 \(a_i\),卡牌的权值互不相同。 这个卡牌游戏的规则需要自己生成。一开始,所有的牌都在备选区…

centos上redis的安装

官网教程 redis安装官网 https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ 可以右下方看到安装到各个平台的连接 这里我安装的是centos系统,所以选择 install Redis on Linux centos系统选择red hat安装方式下方第一条命令需要输入【y】进行确认 s…

CHM助手 高效制作接口文档

1 CHM助手 >> 高效制作接口文档 1.1 概述用户如果书写代码的过程中使用了良好的注释,比如:doxygen规范, 则有可能生成比较规范的接口文档。很多工具软件都支持编程扩展,比如:宏/脚本接口,那么,完善的接口文档将会给用户带来极大的便利,否则,软件的使用和推广都会…

CHM文件搜索显示为乱码或结果不全问题处理方法

1 生成CHM文件后搜索显示为乱码或搜索结果不全的原因及解决办法 1.1 问题背景使用一些CHM帮助制作工具生成的帮助文件,在html编辑阶段都显示正常,但是生成chm后,可能会出现以下问题:页面显示为乱码 搜索时,搜索结果为乱码 搜索不到结果,但明明打开手册时可以看到相关文字…

CHM助手 使用说明 步骤2:图片宽度转换相对宽度

1 CHM助手使用说明 >> 步骤2:图片宽度转换相对宽度 1.1 概述在文档写作界,流传一句“字不如表、表不如图”的定律,所以,即使是chm联机帮助,良好的图文排版,会让手册的知识传播效果加倍,但不幸的是,微软对chm文档的更新已经停止好多年了, 随着硬件的发展,近些年…

CHM助手 使用说明 步骤3:文字编码转换

1 CHM助手使用说明 >> 步骤3:文字编码转换 1.1 概述很多新手在制作chm帮助文档时,会发现要么搜索不全,搜索结果为乱码,要么帮助页面显示主乱码,这种情况主要是因为html文档中包含了中文,或其他语言文字,对于包含中文的chm文档,所有的html页面都必须要使用GB2312编…

CHM助手 使用说明 步骤1:清理HTML文档

1 CHM助手使用说明 >> 步骤1:清理HTML文档 1.1 应用场景由于编译CHM文档时,html文档的目标文本编码方式是GB2312,而使用第三方工具编写的html文件可能是utf8编码或者其他编码方式,有些特殊字符如:©、🕮等,在GB2312文档中显示为乱码,需要使用html符号描述方…