《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(30):OpenSSL和TLS

《深入浅出HTTPS​​​​​​​​​​》读书笔记(30):OpenSSL和TLS

 

通过两个维度了解OpenSSL,首先OpenSSL是一个底层密码库,封装了所有的密码学算法、证书管理、TLS/SSL协议实现。

 

OpenSSL库包含两种类型的库。

 

◎crypto库函数:具体的密码学算法使用库,比如MD5、RSA、DES算法的实现,开发者可以直接使用这些库,可以理解为底层次库。

 

◎EVP接口:高层次库,基于crypto库函数做了进一步抽象

 

同时EVP接口也会基于CPU模式进行性能优化,比如可以通过AES-NI指令集加速AES运算。

 

理解OpenSS的第二个维度就是OpenSSL命令行工具。

<think>我们正在尝试在Qt 5.14.2的静态编译环境下(MinGW 73 32位)编译OpenSSL。根据引用的内容,我们可以总结以下关键信息: 1. 用户使用的Qt版本是5.14.2(引用[1])。 2. 引用[2]提供了Qt静态编译的一般步骤(针对5.15.2,但可参考),包括环境准备、源码准备、编译安装等。 3. 引用[3]提到了在编译过程中可能遇到的宏定义问题以及解决方法(在qlibraryinfo.cpp中添加宏定义)。 4. 引用[4]展示了在Qt项目中链接第三方库(如FFmpegSDL)的方法,注意INCLUDEPATHLIBS的写法。 由于我们的目标是编译OpenSSL,使其能够在Qt的静态环境中使用,我们需要: 1. 准备OpenSSL源码并编译为静态库(.a文件)。 2. 确保编译的OpenSSL版本与Qt的SSL支持兼容(引用[1]中用户已经查看了Qt支持的OpenSSL版本)。 3. 将编译好的OpenSSL静态库集成到Qt项目中。 步骤: 一、编译OpenSSL静态库 1. 下载OpenSSL源码:从官网下载与Qt支持版本匹配的OpenSSL源码(如1.1.1系列)。 2. 准备编译环境:安装Perl(OpenSSL编译需要)MinGW(使用Qt自带的MinGW73_32,确保路径在环境变量中)。 3. 配置OpenSSL编译选项为静态库,目标平台为MinGW32。 二、编译步骤(在MSYS2环境或命令行中): 1. 打开Qt自带的MinGW命令行(例如:Qt5.14.2\Tools\mingw730_32\bin\mingw32-make.exe所在目录的命令行)。 2. 进入OpenSSL源码目录。 3. 执行配置命令: ```bash perl Configure mingw no-shared --prefix=/path/to/install/dir ``` 其中`no-shared`表示编译静态库,`--prefix`指定安装目录。 4. 执行编译安装: ```bash make make install ``` 三、在Qt静态项目中链接OpenSSL 1. 在Qt项目的.pro文件中,添加OpenSSL的头文件路径库文件路径,例如: ```qmake INCLUDEPATH += $$OPENSSL_INSTALL_PATH/include LIBS += -L$$OPENSSL_INSTALL_PATH/lib -lcrypto -lssl ``` 注意:这里使用绝对路径,替换$$OPENSSL_INSTALL_PATH为实际安装路径。 2. 如果遇到链接错误,可能需要调整库的顺序或添加额外的依赖库(如-lws2_32 -lgdi32等)。 四、注意事项 1. 静态编译Qt时,需要确保Qt配置时已经启用了SSL支持(默认可能没有,需要重新配置编译Qt静态版并启用openssl)。 2. 如果用户还没有静态编译Qt,可以参考引用[2]的步骤(注意版本差异)先静态编译Qt,并在配置时加入openssl选项(需要指定openssl路径)。 根据引用[3],如果在编译过程中遇到未定义的宏,可能需要修改Qt源码(谨慎操作,一般不需要)。但这里主要是针对Qt的编译,而不是OpenSSL。 因此,我们重点在于如何编译OpenSSL静态库,并在Qt静态项目中使用。 生成相关问题: 1. 如何验证Qt静态编译是否支持OpenSSL? 2. 在Windows下编译OpenSSL静态库有哪些常见问题? 3. 如何在Qt的静态编译配置中启用OpenSSL支持? </think>### 在 Qt 5.14.2 MinGW 32-bit 静态环境下编译 OpenSSL 的方法 #### 📌 核心步骤 1. **安装 Perl** - OpenSSL 编译依赖 Perl 环境(引用[2]) - 下载地址:[Strawberry Perl](https://strawberryperl.com/)(Win32 版本) 2. **获取 OpenSSL 源码** ```bash git clone https://github.com/openssl/openssl.git cd openssl git checkout OpenSSL_1_1_1 # 选择兼容 Qt 5.14.2 的版本 ``` 3. **配置 MinGW 环境** - 使用 Qt 自带的 MinGW 工具链(路径示例): ```bash set PATH=C:\Qt\Qt5.14.2\Tools\mingw730_32\bin;%PATH% ``` 4. **编译 OpenSSL 静态库** ```bash perl Configure mingw no-shared --prefix=%CD%\build make clean make make install ``` - `no-shared` 生成静态库(`.a` 文件) - 生成文件位于 `build/lib` 目录 5. **Qt 项目集成** 在 `.pro` 文件中添加(引用[4]): ```qmake # OpenSSL 静态链接配置 INCLUDEPATH += $${OPENSSL_PATH}/include LIBS += -L$${OPENSSL_PATH}/lib \ -llibssl -llibcrypto \ -lws2_32 -lgdi32 -lcrypt32 ``` #### ⚠️ 注意事项 1. **库加载顺序问题** - 确保 `LIBS` 按正确顺序书写(如 `-llibssl` 必须在 `-llibcrypto` 之前),否则链接失败(引用[4]) 2. **解决编译错误** - 若遇到宏定义错误,参考引用[3]修改源码: ```cpp // 在相关头文件中添加 #define OPENSSL_NO_AUTOLOAD_CONFIG ``` 3. **版本兼容性** - Qt 5.14.2 需搭配 OpenSSL 1.1.1 系列(引用[1]) - 验证版本兼容性: ```cpp qDebug() << QSslSocket::sslLibraryBuildVersionString(); ``` #### 🔍 验证步骤 1. 在 Qt 项目中添加测试代码: ```cpp #include <QSslSocket> qDebug() << "SSL支持:" << QSslSocket::supportsSsl(); ``` 2. 输出 `SSL支持: true` 表明集成成功 --- 📚**相关问题** 1. 如何解决 Qt 静态编译中第三方库的循环依赖问题? 2. MinGW 编译 OpenSSL 时出现 `undefined reference to `_imp__XXXX'` 错误如何修复? 3. 在 Windows 静态编译环境下如何交叉编译 OpenSSL 的 ARM 版本? 4. Qt 项目如何同时兼容动态链接静态链接的 OpenSSL 库? [^1]: 不同版本的 Qt 支持的 OpenSSL 版本不同,需严格匹配 [^2]: Perl 是 OpenSSL 编译的必要工具 [^3]: 宏定义缺失会导致编译中断 [^4]: 库路径链接顺序错误是静态编译的常见问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

earthzhang2021

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值