【OpenSSL 之一】OpenSSL初体验(编译安装、工作机制、Engine加载(afalg、cryptodev-linux)、offload等)

这篇具有很好参考价值的文章主要介绍了【OpenSSL 之一】OpenSSL初体验(编译安装、工作机制、Engine加载(afalg、cryptodev-linux)、offload等)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简介

  OpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用密钥、证书封装管理功能及实现SSL协议。整个软件包大概可以分成三个主要的功能部分:SSL协议库libssl、应用程序命令工具以及密码算法库libcrypto。
  OpenSSL项目是一个开放源代码安全项目,它的目标是开发一个健壮的、商业级的、完整的开放源代码的工具包,用强大的加密算法来实现安全的Socket层(Secure Sockets Layer,SSL v2/v3)和传输层的安全性(Transport Layer Security,TLS v1)。它包含了完整的加密算法,数字签名算法及证书算法等。可以很好地保证数据的完整,保密和正确性。OpenSSL可以和于商业用途,但是使用者应该考虑自己所使用的算法有没有受到本国专利的限制以及考虑是否符合国家制定的标准。

2. 编译安装

  下面主要介绍通过编译源码的方式安装OpenSSL的步骤。

1. 获取源码

  源码下载地址:https://github.com/openssl/openssl
  本文安装的OpenSSL的版本为openssl-1.1.1h ,大家可以根据实际需求下载合适的版本,以下的安装步骤都是通用的。

2. 执行config配置文件

  进入OpenSSL源码目录执行如下命令:

./config shared --prefix=/usr/local/jack/openssl-1.1.1h --openssldir=ssl --debug -Wl,-rpath=/usr/local/jack/openssl-1.1.1h/lib
参数 说明
shared 表示将OpenSSL编译为共享库
–prefix=DIR The top of the installation directory tree. Defaults are:/usr/local,为了不影响Ubuntu自带的OpenSSL,自定义了一个安装目录:/usr/local/jack/openssl-1.1.1h
–openssldir=DIR Directory for OpenSSL configuration files, and also the default certificate and keystore. Defaults are:/usr/local/ssl
–debug Build OpenSSL with debugging symbols and zero optimization level
-rpath 指定动态库的路径

3. 编译

make -j4 	# -j4表示通过4个CPU核进行编译

4. 安装

# 选择下面的一种安装方式即可
make install		# 完全安装
make install_sw		# 仅安装软件,不安装说明文档等等

5. 修改环境变量

  由于我们的安装路径是自定义的,虽然我们已经将OpenSSL安装到了 /usr/local/jack/openssl-1.1.1h 目录下了,但是其它的库在搜索OpenSSL时依然默认去 /usr/local (系统自带的OpenSSL的默认安装路径)目录下去查找,为此必须修改环境变量,指定OpenSSL的搜索路径。

vi  ~/.bashrc                                  /* 打开文件,添加如下两条环境变量 */
  export PATH=/usr/local/jack/openssl/bin:$PATH
  export LD_LIBRARY_PATH=/usr/local/jack/openssl/lib:$LD_LIBRARY_PATH
source ~/.bashrc

6. 安装后的交付物

[root@xxx]# tree -L 3
.
├── bin
│   ├── c_rehash
│   └── openssl
├── certs
├── ct_log_list.cnf
├── ct_log_list.cnf.dist
├── include
│   └── openssl
│       ├── ...
│       └── x509_vfy.h
├── lib
│   ├── engines-1.1
│   │   ├── capi.so
│   │   └── padlock.so
│   ├── libcrypto.a
│   ├── libcrypto.so -> libcrypto.so.1.1
│   ├── libcrypto.so.1.1
│   ├── libssl.a
│   ├── libssl.so -> libssl.so.1.1
│   ├── libssl.so.1.1
│   └── pkgconfig
│       ├── libcrypto.pc
│       ├── libssl.pc
│       └── openssl.pc
├── misc
│   ├── CA.pl
│   ├── tsget -> tsget.pl
│   └── tsget.pl
├── openssl.cnf
├── openssl.cnf.dist
├── private
└── share
    ├── doc
    │   └── openssl
    └── man
        ├── ...
        └── man7
17 directories, 124 files
  • bin
    • openssl:可执行程序
  • lib
    • libcrypto:CRYPTO组件
    • libssl:SSL组件
    • lib/engines-1.1:目录下面的所有so文件都是一个engine,这些engines是在运行时动态加载的
  • private
    • 空目录,用于存放用户的私钥
  • certs
    • 空目录,用于存放用户的证书文件
  • .openssl.cnf
    • 配置文件,这个文件是 OpenSSL 的默认配置文件, 所有使用 OpenSSL 的 APP 都被这个配置文件控制

7. 总结

/* 第1步:拉取OpenSSL源码 */
git clone https://github.com/openssl/openssl.git

/* 第2步:自定义编译OpenSSL */
cd openssl 										/* 进入OpenSSL源码目录 */
./config shared --prefix=/usr/local/jack/openssl --openssldir=ssl --debug -Wl,-rpath=/usr/local/jack/openssl/lib /* 自定义配置 */
make -j4 										/* 编译 */
make -j4 install 								/* 安装 */
ldd ./apps/openssl                              /* 查询刚刚编译出来的openssl所依赖的库 */

/* 第3步:修改环境变量 */
vi  ~/.bashrc                                  /* 打开文件,添加如下两条环境变量 */
  export PATH=/usr/local/jack/openssl/bin:$PATH
  export LD_LIBRARY_PATH=/usr/local/jack/openssl/lib:$LD_LIBRARY_PATH
source ~/.bashrc

# shared:表示将OpenSSL编译为共享库
# --prefix=DIR:指定OpenSSL的安装路径,默认路径是:/usr/local,上边的自定义安装路径为:/usr/local/jack/openssl
#  --openssldir=DIR:指定OpenSSL的配置文件、证书、秘钥的路径,默认路径为:/usr/local/ssl,上边的自定义配置的路径为:ssl(/usr/local/jack/openssl/ssl)
# --debug:编译OpenSSL时,添加调试符号
#  -rpath=DIR:指定动态库的路径,上边配置的动态库路径为:/usr/local/jack/openssl/lib

3. 工作机制

openssl 编译安装,SSL,OpenSSL,afalg,devcrypto,cryptodev-linux,engine
openssl 编译安装,SSL,OpenSSL,afalg,devcrypto,cryptodev-linux,engine
  如上,两个图通过不同的维度表达了同样的事情, 我们目前只关心第一个图,通过上图可以看出OpenSSL主要由4部分组成:APP、TLS、CRYPTO、ENGINE。

  • APP就是一组命令行工具,它们被集成在二进制文件/bin/openssl中,可以通过不同的参数进行调用。APP主要是对TLS与CRYPTO的使用
  • LS表现为一组API,用于操作SSL Socket。TLS库是对CRYPTO的封装,使用EVP接口,EVP模块使用BIO接口
  • CRYPTO是加密组件的集合,对加密逻辑的抽象,可使用软算法,也可以使用ENGINE进行算法卸载,完成密码功能,其中两个重要的核心组件分别是EVP(envelope)和BIO(BASIC INPUT OUTPUT)
  • ENGINE是提供加密能力的一组引擎,插件式整合在框架内。在使用中可以对不同的算法指定不同的加密引擎

3. 引擎 Engine

  在OpenSSL的0.9.6版之前,OpenSSL是将普通版本跟支持Engine的版本分开的,到了OpenSSL的0.9.7版,Engine机制集成到了OpenSSL的内核中,成为了OpenSSL不可缺少的一部分。

  Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL的Engine机制成功地达到了这个目的,这使得OpenSSL已经不仅仅使一个加密库,而是提供了一个通用的加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备与OpenSSL协调工作,需要写少量的接口代码(我们的 ccat_engine 就是这种类型的引擎)。
  引擎(engine)在OpenSSL安装路径的位置为:/openssl/lib/engines-1.1/(其中**代表了OpenSSL的实际安装路径)。
openssl 编译安装,SSL,OpenSSL,afalg,devcrypto,cryptodev-linux,engine

openssl 编译安装,SSL,OpenSSL,afalg,devcrypto,cryptodev-linux,engine
  如上图所示,主要介绍3种引擎:qat_engine、af_alg、devcrypto。

3.1 qat_engine

  若想测试该引擎,那必须有一个Intel对应的板卡才行。我们实际在开发中时对qat_engine进行了适当的修改,是指能过正常运行在我们的板卡上了,由于没有板卡,这里进行初步说一下,qat_engine的下载,编译过程。
(1)在github上拉取QAT_Engine的源码文件,网址为:https://github.com/intel/QAT_Engine.git
(2)编译流程如下:

./autogen.sh
./configure \
--enable-qat_debug \
--enable-qat_warnings \
--enable-qat_mem_debug \
--enable-qat_mem_warnings \
--enable-qat_cycle_counts \
--with-qat_dir=/home/jack/qat \
--with-openssl_dir=/home/jack/openssl-1.1.1h \
--with-openssl_install_dir=/usr/local/jack/openssl-1.1.1h

make clean
make -j4
make install

  至此,在OpenSSL安装路径的位置为:**/openssl/lib/engines-1.1/**中就会出现名为qatengine.so的引擎。
  测速命令如下:

openssl speed -async_jobs 1 -engine qatengine -evp aes-128-cbc -multi 1

3.2 af_alg

  af_alg引擎通过NetLink卸载内核算法到HSM。
  af_alg是OpenSSL自带的引擎,在编译OpenSSL时默认已经将af_alg引擎编译了,若不想编译af_alg,则需在执行./config明确指定参数 “no-afalgeng

./config shared --prefix=/usr/local/jack/openssl --openssldir=ssl --debug -Wl,-rpath=/usr/local/jack/openssl/lib no-afalgeng

  编译afalg引擎后,会生成一个单独的引擎afalg.so库文件,该文件在目录**/openssl/lib/engines-1.1/
  测速命令如下:

openssl speed -async_jobs 1 -engine afalg -evp aes-128-cbc -multi 1

3.3 devcrypto

  devcrypto引擎则是通过 /dev/crypto 通路卸载内核算法到HSM。
  该引擎在OpenSSL中默认不编译的,若想编译 devcrypto 必须在执行./config 配置时明确指定参数 “enable-devcryptoeng”,也必须依赖 cryptodev 的第三方库。

./config shared --prefix=/usr/local/jack/openssl --openssldir=ssl --debug -Wl,-rpath=/usr/local/jack/openssl/lib enable-devcryptoeng

编译完devcrypto引擎后,并不会在**/openssl/lib/engines-1.1/目录下生成一个独立的devcrypto.so文件,而是该引擎直接编译进了libcrypto.so.1.1中。

  编译第三方库(cryptodev)的步骤如下:

(1)在github上拉取cryptodev的源码文件,网址为:https://github.com/cryptodev-linux/cryptodev-linux
(2)进入源码目录,执行 make
编译前:
openssl 编译安装,SSL,OpenSSL,afalg,devcrypto,cryptodev-linux,engine编译后:
openssl 编译安装,SSL,OpenSSL,afalg,devcrypto,cryptodev-linux,engine

若想通过openssl命令调用devcrypto引擎,那么必须首先安装cryptodev.ko才行,因为openssl中编译的出来的devcrypto引擎时要依赖这个第三方库的

  测速命令如下:文章来源地址https://www.toymoban.com/news/detail-780855.html

openssl speed -async_jobs 1 -engine devcrypto -evp aes-128-cbc -multi 1

到了这里,关于【OpenSSL 之一】OpenSSL初体验(编译安装、工作机制、Engine加载(afalg、cryptodev-linux)、offload等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux编译安装openssl 1.1.1s

      我的pc系统版本是Ubuntu 22.04.1 LTS,默认安装的是OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)。   但是种种原因需要安装1.1.1版本的 下载: 通过官网:https://www.openssl.org/source/openssl-1.1.1s.tar.gz 解压: 进入目录:  安装配置: /opt/ssl是安装的路径可以自己选 编译: 编译测

    2023年04月08日
    浏览(46)
  • Win10编译安装openssl 1.1.1和 GPG

    参考: openssl/NOTES-WINDOWS.md at master · openssl/openssl · GitHub 安装Strawberry Perl Strawberry Perl for Windows 1.2 下载openssl源码 下载 1.1.1u版本 /source/index.html 1.3 安装NASM 下载NASM ,stable版本即可 https://www.nasm.us/ 1.4 安装Microsoft Visual C compiler 因为这里本地机器装过 Visual Studio 社区版, 所以需要

    2024年02月04日
    浏览(43)
  • Debian 11 编译安装 git 2.42.0(基于 OpenSSL)

    git 克隆远程仓库时默认使用 gnutls,正常情况下没有任何问题。当使用 gitlab 时,如果把 gitlab 放在代理后面(如:放在 nginx 后面),则可能会出问题。例如报错: gnutls_handshake() failed: Handshake failed 。此时可以通过自己编译使用 OpenSSL 的 git 来解决这个问题。 上面的问题已经确

    2024年02月15日
    浏览(46)
  • Java on VS Code 8月更新|反编译器用户体验优化、新 Maven 项目工作流、代码高亮稳定性提升

    作者:Nick Zhu 排版:Alan Wang 大家好,欢迎来到 Visual Studio Code for Java 的 8 月更新!在这篇博客中,我们将为您提供有关反编译器支持的更多改进。此外,我们将展示如何创建没有原型的 Maven 项目以及一项重要错误修复。让我们开始吧! 上一篇博客中将强大的 Fernflower 反编译

    2024年02月10日
    浏览(47)
  • Windows环境下C++ 安装OpenSSL库 源码编译及使用(VS2019)

    参考文章 https://blog.csdn.net/xray2/article/details/120497146 之所以多此一举自己写多一篇文章,主要是因为原文内容还是不够详细。而且我安装的时候碰到额外的问题。 一般情况下,引入别人的库,要么把代码直接搞进去,一起编译。要么引入库和头文件(就像MYSQL那样),都不复杂

    2024年02月14日
    浏览(45)
  • 【整活】Unreal Engine 3体验

    今天下了UDK,想在用虚幻5的年头体验一下\\\"上古时代\\\"的虚幻3,链接 安装 跟虚幻4对比,虚幻4可是比它大不少:      一般来说,编辑器程序在这个文件夹中 比如我的这个: 这个UDK.exe就是虚幻3编辑器程序 游戏 双击打开,却发现它默认运行自带的游戏       ......别说这画质还可以..

    2023年04月08日
    浏览(41)
  • 全网独家:编译CentOS6.10系统的openssl-1.1.1多版本并存的rpm安装包

    CentOS6.10系统原生的openssl版本太老,1.0.1e,不能满足一些新版本应用软件的要求,但是它又被wget、mysql-libs、python-2.6.6、yum等一众系统包所依赖,不能再做升级。故需考虑在不影响系统原生openssl的情况下,安装较新版的openssl形成多版本并存,本文采用编译rpm包的方式完成了可

    2024年02月09日
    浏览(48)
  • Flask 路由机制分析之一

    《Flask Run运行机制剖析》这篇我们讲了应用启动的内部机制,启动后就开始监听Http请求了,请求过来如何跳到对应的函数执行,这就是路由机制。我们沿用上一篇例子,来探究一下@app.route(\\\"/\\\")内部干了些什么事。 装饰器是在不改变对象结构的情况下向现有对象添加功能,它

    2024年02月07日
    浏览(34)
  • quarkus实战之一:准备工作

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《quarkus实战》系列是欣宸在2022年春季推出的又一个精品原创系列,作者将自己对java的热爱渗透到每段文字和每行代码中,全系列秉承欣宸一贯的知识+实战风格,既有知识普及、更有实际操作,在涉

    2024年02月16日
    浏览(42)
  • 【AI插件安利】给你浏览器安装个iTab Ai小插件,让你的工作生活效率提升300%,快来体验吧!

    01 写在前面 iTab的朋友们,你们好哦。   你们最近有没有发现iTab上新了 【AIBot】 小组件。 目前在短短几天内,已经有1.4w小伙伴添加到桌面,正在使用了,如果你现在还不知道,可以右键-添加【AiBot小组件】到你的桌面。 下面我将详细给大家讲讲它可以帮大家干嘛! 02AiB

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包