OpenSSL的编译和使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenSSL的编译和使用相关的知识,希望对你有一定的参考价值。
参考技术A 个人博客地址: https://blog.yookingh.cn
该文章地址: https://blog.yookingh.cn/dev/201215-openssl.html
从NDK r19开始,由于gcc兼容clang的编译方式有问题,该版本已经移除了相关gcc文件,所以用老方法交叉编译Openssl的时候,会提示找不到gcc文件。
参考: https://blog.csdn.net/zoujin6649
build-android-single.sh 脚本文件及注释如下
执行脚本
修改脚本为 循环编译 ,编译所有需要的文件
build-android-all.sh 脚本文件内容如下
执行脚本方法同上,如为第一次执行(即没有Makefile文件),仍需要执行 ./config 循环编译无需执行 make clean
参考: https://blog.csdn.net/iamadk
Python 脚本内容
创建编译执行脚本
执行编译脚本同r15,第一次需要执行 ./config 生成Makefile,第二次或以上需要清除make记录即 make clean ,接下来依旧是创建 循环编译 脚本
OpenSSL库开发:C++ 编译及使用
1、简介
OpenSSL 是用于传输层安全 (TLS) 协议(以前称为安全套接字层 (SSL) 协议)的强大、商业级、功能齐全的开源工具包。协议实现基于全强度通用密码库,也可以单独使用。
- OpenSSL 源自 Eric A. Young 和 Tim J. Hudson 开发的 SSLeay 库。
- OpenSSL 项目的官方主页是www.openssl.org。
- OpenSSL(密码学和 SSL/TLS 工具包) 项目开发和维护 OpenSSL 软件——一个强大的、商业级的、功能齐全的工具包,用于通用加密和安全通信。
- OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
OpenSSL 工具包包括:
-
libssl: TLSv1.3 ( RFC 8446 ) 之前的所有 TLS 协议版本的实现。
-
libcrypto: 一个全强度的通用加密库。它构成了 TLS 实现的基础,但也可以独立使用。
-
openssl: OpenSSL 命令行工具,用于加密任务、测试和分析的瑞士军刀。它可用于 创建关键参数 创建 X.509 证书、CSR 和 CRL 消息摘要的计算 加密和解密 SSL/TLS 客户端和服务器测试 处理 S/MIME 签名或加密邮件 和更多...
-
公钥和私钥: 非对称加密是用密钥对数据进行加密,然后我们可以使用另一个不同的密钥对数据进行解密。这两个密钥就是公钥和私钥。 每个用户都有一对公钥和私钥,私钥和公钥都拥有加密和解密功能。其中私钥可以进行签名,公钥可以进行验签。 私钥用来进行解密和签名,是给自己用的。 公钥由本人公开,用于加密和验证签名,是给别人用的。 当该用户发送文件时,用私钥签名,别人用他给的公钥解密,可以保证该信息是由他发送的。即数字签名。 当该用户接受文件时,别人用他的公钥加密,他用私钥解密,可以保证该信息只能由他接收到。可以避免被其他人看到。 我们根据私钥可以计算出公钥,但是我们根据公钥计算不出来私钥的。私钥一般是有服务器掌握的,公钥则是在客户端使用的。
-
数字签名: 它会将报文使用一定的HASH算法算出一个固定位数的摘要信息,然后使用私钥将摘要加密,然后会将刚才的报文一起发送给接收者,接收者会通过公钥将摘要解出来。也通过hash算法算出报文摘要,如果两个摘要一致,说明数据未被篡改,说明数据是完整的。
-
数字证书: (1)它是由CA颁发给网站的一种身份的方式。它里面包含了该网站的公钥、有效时间、网站的地址、及 CA的数字签名等。 (2)它是数字形式的标识。它是由证书颁发机构(CA)的权威机构颁发的,由该权威机构担保证书信息的有效性。因此数字证书只有在特定的时间段内有效。证书中包含了证书中所标识的公钥,也就是说证书里包含了你的公钥,公钥与你个人信息相匹配。 (3)它是使用CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器端的时候,网站会把证书发给客户端,客户端先通过CA的数字签名校验CA的身份,来证明证书的真实完整性。
-
对于常见的https证书 一般是用crt或者pem来保存。 常见的X.509证书格式包括:
cer/crt是用于存放证书,它是2进制形式存放的,不含私钥。
pem跟crt/cer的区别是它以Ascii来表示,可以用于存放证书或私钥。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
p10是证书请求。
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
2、下载openssl
2.1 下载openssl源码(github)
主源代码保存在git 存储库中,可通过网络访问并在 GitHub 上进行克隆,网址为https://github.com/openssl/openssl。 <font color=blue>注意:最新的稳定版本是支持到 2026 年 9 月 7 日的 3.0 系列。这也是长期支持 (LTS) 版本。之前的 LTS 版本(1.1.1 系列)也可用,并且支持到 2023 年 9 月 11 日。所有旧版本(包括 1.1.0、1.0.2、1.0.0 和 0.9.8)现在都不再支持,应该不被使用。
- 从原始 OpenSSL 存储库克隆它来获得:
git clone git://git.openssl.org/openssl.git
- 或从 GitHub 镜像使用
git clone https://github.com/openssl/openssl.git
2.2 下载openssl源码(官网压缩包)
https://www.openssl.org/source/old/ 直接在官网下载源码的压缩包,截图如下:
2.3 下载openssl二进制库
- (1)https://slproweb.com/products/Win32OpenSSL.html
- (2)https://slproweb.com/products/Win32OpenSSL.html
2.4 下载perl工具
-
(1)我们推荐 Strawberry Perl,可从http://strawberryperl.com/ 获得。有关更多信息,包括 CPAN 的使用,请阅读 NOTES.PERL。
-
(2)另一种方法是 ActiveState Perl,https ://www.activestate.com/ActivePerl ,您可能需要通过https://platform.activestate.com/ActiveState显式构建 Perl 模块 Win32/Console.pm ,然后下载它。
ActiveState Perl官网截图: ActiveState Perl安装界面截图: ActiveState Perl安装之后通过命令行输出版本号:
perl -v
3、编译openssl
在 Windows 平台上构建和运行 OpenSSL 有多种选择。
3.1 Perl
(1)Strawberry Perl (2)ActiveState Perl
3.2 Microsoft Visual C 编译器
使用具有管理权限的 Visual Studio 开发人员命令提示符,根据预期的体系结构选择其变体之一。或使用选项之一运行cmd和执行, , , , , , , 或. 这会设置 , 等所需的环境变量。
另请参阅 https://docs.microsoft.com/cpp/build/building-on-the-command-linevcvarsall.batx86x86_amd64x86_armx86_arm64amd64amd64_x86amd64_armamd64_arm64nmake.execl.exe
<font color=blue>根据需要编译的平台选择相应的控制台,64位的选择x64,32位的选择x86。
如果没有找到以上菜单,可以创建命令行执行环境:
- 标题:用户自定义,会显示在TOOLS的菜单项中
- 命令:C:\\Windows\\System32\\cmd.exe
- 参数:在VS2017中,配置如下:(找到vs2017安装目录) /k"E:\\vs2017\\VC\\Auxiliary\\Build\\vcvars64.bat"(这里使用64位c/c++编译器,如果使用32位可以选vcvars32.bat)
- 初始目录 $(ProjectDir) 此为项目目录,这是命令行启动后默认的初始目录,有几个选项。
3.3 快速开始
(1)安装 Perl (2)安装 NASM(可选) (3)确保 Perl 和 NASM 都在您的 %PATH% 上 (4)选择Visual Studio 开发人员命令提示符 (5)从 OpenSSL 源目录的根目录输入 openssl官方的编译命令步骤如下:
To build for Win64/x64:
To build for Win64/IA64:
To build for Win32:
1、如何编译unicode 版openssl?
perl Configure VC-WIN32 -DUNICODE -D_UNICODE
2、如何生成动态库和静态库?
动态库:
nmake -f ms\\ntdll.mak
静态库:
nmake -f ms\\nt.mak
测试动态库:
nmake -f ms\\ntdll.mak test
测试静态库:
nmake -f ms\\nt.mak test
安装动态库:
nmake -f ms\\ntdll.mak install
安装静态库:
nmake -f ms\\nt.mak install
清除上次动态库的编译,以便重新编译:
nmake -f ms\\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\\nt.mak clean
3、一键自动编译所有版本的命令
#64位debug静态库
perl Configure debug-VC-WIN64A no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_win64a.bat
nmake -f ms\\nt.mak
nmake -f ms\\nt.mak install
#64位release静态库
perl Configure VC-WIN64A no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_win64a.bat
nmake -f ms\\nt.mak
nmake -f ms\\nt.mak install
#64位debug动态库
perl Configure debug-VC-WIN64A no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_win64a.bat
nmake -f ms\\ntdll.mak
nmake -f ms\\ntdll.mak install
#64位release动态库
perl Configure VC-WIN64A no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_win64a.bat
nmake -f ms\\ntdll.mak
nmake -f ms\\ntdll.mak install
#32位debug静态库
perl Configure debug-VC-WIN32 no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_ms.bat
nmake -f ms\\nt.mak
nmake -f ms\\nt.mak install
#32位release静态库
perl Configure VC-WIN32 no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_ms.bat
nmake -f ms\\nt.mak
nmake -f ms\\nt.mak install
#32位debug动态库
perl Configure debug-VC-WIN32 no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_ms.bat
nmake -f ms\\ntdll.mak
nmake -f ms\\ntdll.mak install
#32位release动态库
perl Configure VC-WIN32 no-asm --prefix=C:\\OpenSSL --openssldir=C:\\SSL
ms\\do_ms.bat
nmake -f ms\\ntdll.mak
nmake -f ms\\ntdll.mak install
<font color=blue size=5>我们这里依次编译命令执行如下(编译64位的openssl的静态库):
perl Configure VC-WIN64A no-asm no-shared
ms\\do_win64a
nmake -f ms\\nt.mak
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!
以上是关于OpenSSL的编译和使用的主要内容,如果未能解决你的问题,请参考以下文章
基于SylixOS 对 Goahead 进行配置使用 OpenSSL