openssl编程-基础知识-OpenSSL简介

参考链接

  • 在ubuntu环境下执行openssl编译和安装_MY CUP OF TEA的博客-CSDN博客_openssl ubuntu
  • OpenSSL编程 赵春平

OpenSSL

简介

  • 它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能

安装

  • 运行./config --prefix=/usr/local/openssl  即生成动态库,且将其安装在 /usr/local/openssl  文件夹下
  • 更多选项用./config --help 来查看
  • 比如:no-mdc2、no-cast no-rc2、no-rc5、no-ripemd、no-rc4 no-des 、no-md2、no-md4、no-idea 、 no-aes、no-bf、no-err、no-dsa、no-dh、no-ec、no-hw、no-asm、no-krb5、no-dso 、no-threads 、 no-zlib、-DOPENSSL_NO_HASH_COMP、-DOPENSSL_NO_ERR、-DOPENSSL_NO_HW 、 -DOPENSSL_NO_OCSP、-DOPENSSL_NO_SHA256 和-DOPENSSL_NO_SHA512 等,去掉不必要的内容可以减少生成库的大小。
  • 若要生成 debug 版本的库和可执行程序加-g 或者 -g3(openssl 中有很多宏,需要调试学习最好加上-g3)。
  • make
  • make test 开始测试,此步骤可选
  • make install
  • openssl 会被安装到/usr/local/openssl 目录,包括头文件目录 include、可执行文件目录 bin、man 在线帮助、库目录 lib 以及配置文件目录(ssl)

 源代码

  • openssl 源代码主要由ssl 库、工具源码、范例源码以及测试源码组成。

crypto源代码

  • 包括如下内容:
  • 1) asn.1 DER 编码解码(crypto/asn1 目录),它包含了基本 asn1 对象的编解码以及数字证书请求、数字证书、CRL撤销列表以及PKCS8等最基本的编解码函数。这些函数主要通过宏来实现。
  • 2)抽象 IO(BIO,crypto/bio 目录),本目录下的函数对各种输入输出进行抽象,包括 文件、内存、标准输入输出、socket和 SSL 协议等。
  • 3)大数运算(crypto/bn 目录),本目录下的文件实现了各种大数运算。这些大数运 算主要用于非对称算法中密钥生成以及各种加解密操作。另外还为用户提供了大量辅助函数,比如内存与大数之间的相互转换。
  • 4)字符缓存操作(crypto/buffer 目录)。
  • 5)配置文件读取(crypto/conf 目录),openssl 主要的配置文件为 openssl.cnf。本目录下的函数实现了对这种格式配置文件的读取操作。
  • 6) DSO(动态共享对象,crypto/dso 目录),本目录下的文件主要抽象了各种平台的动态库加载函数,为用户提供统一接口。
  • 7) 硬件引擎(crypto/engine 目录),硬件引擎接口。用户如果要写自己的硬件引擎, 必须实现它所规定的接口。
  • 8) 错误处理(crypto/err 目录),当程序出现错误时,openssl 能以堆栈的形式显示各 个错误。本目录下只有基本的错误处理接口,具体的的错误信息由各个模块提供。各个模块专门用于错误处理的文件一般为*_err..c 文件。
  • 9) 对称算法、非对称算法及摘要算法封装(crypto/evp 目录)。
  • 10) HMAC(crypto/hmac 目录),实现了基于对称算法的 MAC。
  • 11) hash 表(crypto/lhash 目录),实现了散列表数据结构。openssl 中很多数据结构都是以散列表来存放的。比如配置信息、ssl session 和 asn.1 对象信息等。
  • 12) 数字证书在线认证(crypto/ocsp 目录),实现了 ocsp 协议的编解码以及证书 有效性计算等功能。
  • 13) PEM 文件格式处理(crypto/pem),用于生成和读取各种 PEM 格式文件, 包括各种密钥、数字证书请求、数字证书、PKCS7消息和PKCS8消息等。
  • 14) pkcs7 消息语法(crypto/pkcs7 目录),主要实现了构造和解析 PKCS7 消息;
  • 15) pkcs12 个人证书格式(crypto/pckcs12 目录),主要实现了 pkcs12 证书的构造和解析。
  • 16) 队列(crypto/pqueue 目录),实现了队列数据结构,主要用于 DTLS。  未找到
  • 17) 随机数(crypto/rand 目录),实现了伪随机数生成,支持用户自定义随机数 生成。
  • 18) 堆栈(crypto/stack 目录),实现了堆栈数据结构。 
  • 19) 线程支持(crypto/threads),openssl 支持多线程,但是用户必须实现相关接口。未找到
  • 20) 文本数据库(crypto/txt_db 目录)。
  • 21) x509 数字证书(crypto/x509 目录和 crypto/x509v3),包括数字证书申请、数字证书和CRL的构造、解析和签名验证等功能了;
  • 22) 对称算法(crypto/aes、crypto/bf、crypto/cast、ccrypto/omp (未找到)和 crypto/des 等目录)。
  • 23) 非对称算法(crypto/dh、crypto/dsa、crypto/ec 和 crypto/ecdh(未找到))。
  • 24) 摘要算法(crypto/md2、crypto/md4、crypto/md5 和 crypto/sha)以及密钥交 换/认证算法(crypto/dh 和 crypto/krb5  (未找到))。 

SSL 源代码 

  • ssl 库所有源代码在 ssl 目录下,包括了 sslv2、sslv3、tlsv1 和 DTLS 的源代码。各个版本基本上都有客户端源码(*_clnt.c)、服务源码(*_srvr.c)、通用源码(*_both.c)、底层包源码(*_pkt.c)、方法源码(*_meth.c)以及协议相关的各种密钥计算源码(*_enc.c)等,都很有规律。  存疑,有问题

工具源码 apps

  • 工具源码主要在 crypto/apps 目录下,默认编译时只编译成 openssl(windows 下为openssl.exe)可执行文件。该命令包含了各种命令工具。此目录下的各个源码可以单独进行编译

范例源码 

  • 范例源码在 demo 目录下

engines

  • 另外 engines 目录给出了 openssl 支持的几种硬件的 engines 源码,也可以作为 engine 编写参考。

 test测试源码

  • 测试源码主要在 test 目录下。

 

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

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

相关文章

linux修改文件句柄数生效_linux系统层面调优和常见的面试题

linux系统层面调优和常见的面试题​mp.weixin.qq.com无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优:1.linux文件句柄linux在整个系统层面和单个进程…

openssl编程-基础知识-OpenSSL堆栈

堆栈介绍 堆栈是一种先进后出的数据结构openssl 大量采用堆栈来存放数据。它实现了一 个通用的堆栈,可以方便的存储任意数据它实现了许多基本的堆栈操作,主要有:堆栈拷贝(sk_dup)、构建新堆栈(sk_new_null,sk_new&…

小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV

不同手机品牌都有着自己不同的定位人群,在国内市场目前几大非常有名的手机品牌分别被三星、苹果、华为、小米、OV占据,而这些手机品牌的主要购买人群到底是什么样的呢?企鹅智库近日发布了一份手机消费者的调研报告,并且根据消费者…

国密gmtls协议-双证书体系的服务端和客户端通信代码

内容介绍 国密的双证书体系,将证书按照使用目的的不同划分为加密证书和签名证书两种,也就是两对公私钥,二者本质一致,均为SM2密钥对,区别仅体现在用法国密CA体系中,加密密钥对由CA产生,签名密钥…

jwt 私钥_什么是 JSON Web Token(JWT)

有关本文档的快速链接,请参考页面提示。什么是 JSON Web Token(JWT)?JSON Web Token (JWT) 作为一个开放的标准 (RFC 7519) 定义了一种简洁自包含的方法用于通信双方之间以 JSON 对象的形式安全的传递信息。因为有数字签名,所以这些通信的信息能够被校验…

server和client之间进行Socket通信,进行数据切片

参考链接 send函数和recv函数 – gudakos memo 注意事项 代码很low&#xff0c;主要看封装的Send函数所体现的切片思想即可 server代码 //udp服务端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include …

天线下倾角示意图_常用天线和无源器件技术参数汇总

原标题&#xff1a;常用天线和无源器件技术参数汇总一、天线原理天线的定义&#xff1a; 能够有效地向空间某特定方向辐射电磁波或能够有效的接收空间某特定方向来的电磁波的装置。天线的功能&#xff1a; 能量转换-导行波和自由空间波的转换; 定向辐射(接收)-具有一定的方向性…

制作作品图片_不懂人文后期制作流程?来,大师手把手教你

制作前1、处理一张照片思路决定步骤 想要了解学习的老师可以私聊小编fzhdyx222制作后2、2020年最新Camera Raw局部影调和色调的控制想要了解学习的老师可以私聊小编fzhdyx222制作前3、2020年最新Camera Raw基础工具细节性运用想要了解学习的老师可以私聊小编fzhdyx222制作后4、…

xlsx文件打开乱码_Excel 2016 双击无法打开xlsx文件怎么办?

最近我重装了系统(Win10Office2016)&#xff0c;然后发现了一个奇怪的bug&#xff1a;双击xlsx文件&#xff0c;只能打开Excel窗口&#xff0c;但是打不开这个文件&#xff0c;有时候再次双击就能打开了&#xff0c;但有时再次双击也不管用&#xff0c;需要在Excel的菜单中点“…

gmssl使用双证书双向认证的gmtl协议报错crypto/sm2/sm2_sign.c 510: sm2_do_verifySSL3 alert write:fatal:decrypt error

报错内容 crypto/sm2/sm2_sign.c 510: sm2_do_verify SSL3 alert write:fatal:decrypt error SSL_accept:error in error ERROR 140655864152064:error:1417B07B:SSL routines:tls_process_cert_verify:bad signature:ssl/statem/statem_srvr.c:2941: 相关内容 版本&#xf…

纠偏的意思_承压能力和纠偏能力,决定成长的高度

承压能力&#xff0c;包含抗压能力、抵御能力&#xff0c;担当能力&#xff0c;分解能力&#xff0c;消化能力&#xff0c;释放能力&#xff0c;等一系列的精神要素&#xff0c;是一个人生存生活工作中一项重要的素质。有的人&#xff0c;承压能力很强&#xff0c;无论经受什么…

《Java8实战》笔记(15):面向对象和函数式编程的混合-Java 8和Scala的比较

面向对象和函数式编程的混合&#xff1a;Java 8和Scala的比较 Scala是一种混合了面向对象和函数式编程的语言。它常常被看作Java的一种替代语言&#xff0c;程序员们希望在运行于JVM上的静态类型语言中使用函数式特性&#xff0c;同时又期望保持Java体验的一致性。和Java比较起…

函数指针作为形参进行调用

代码 两个代码均位于namespace作用域之内addOne将传递进来的形参进行加一&#xff0c;然后返回performance_test函数主要是想简化函数调用&#xff0c;两个形参&#xff0c;第一个表示循环的次数&#xff0c;第二个是带参数的函数指针&#xff0c;函数内部初始化start和end两个…

python中fetchall_Python连接MySQL并使用fetchall()方法过滤特殊字符

来一个简单的例子&#xff0c;看Python如何操作数据库&#xff0c;相比Java的JDBC来说&#xff0c;确实非常简单&#xff0c;省去了很多复杂的重复工作&#xff0c;只关心数据的获取与操作。准备工作需要有相应的环境和模块&#xff1a;Ubuntu 14.04 64bitPython 2.7.6MySQLdb注…

《Java8实战》笔记(16):结论以及Java的未来

结论以及Java的未来 回顾Java8的语言特性 行为参数化&#xff08;Lambda以及方法引用&#xff09; 流 CompletableFuture Optional 默认方法 Java的未来 集合 类型系统的改进 声明位置变量 更多的类型推断 模式匹配 更加丰富的泛型形式 具化泛型 泛型中特别为函…

解决吉大正源(身份认证网关|USBKey)和gmssl(server|client)使用gmtl协议交叉互通报错tlsv1 alert decrypt error

报错内容 SSL_connect:error in SSLv3/TLS write finished140057291788288:error:1409441B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:ssl/record/rec_layer_s3.c:1385:SSL alert number 51 报错原因 gmssl库生成 certificate verify 消息时&#xff0c;对自客…

12无法使用otg_12个冷知识:或许只能看看而无法使用,但却真实存在着

12个或许只能看看而无法使用&#xff0c;但却真实存在着。脸红一所有已知动物中&#xff0c;唯一可以脸红的是人类。二有些地区将雨水归类为公共财物&#xff0c;作为公共财物是不允许收集的&#xff0c;违反者将面临处罚。三世界上汽车研发成本最高的一款车是福特蒙迪欧&#…

《Java8实战》笔记汇总

《Java8实战》笔记&#xff08;01&#xff09;&#xff1a;为什么要关心Java8 《Java8实战》笔记&#xff08;02&#xff09;&#xff1a;通过行为参数传递代码 《Java8实战》笔记&#xff08;03&#xff09;&#xff1a;Lambda表达式 《Java8实战》笔记&#xff08;04&…

三目运算符_C语言知识点:运算符的优先级和结合性

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C语言内置了丰富的运算符&#xff0c;大体可分为10类&#xff1a;算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符和特殊运算符。根据运算符可操作…

可以直接进行运算么_WORD办公技巧:如何直接在WORD中进行加法、乘法运算?

排版目标下图文档中有一张2020年&#xff11;&#xff0d;&#xff13;月口罩购买情况统计表&#xff0c;数据量并不大&#xff0c;我们想不动用excel表格进行统计&#xff0c;直接利用WORD自带的函数公式计算出表格内空白单元格的数值。其中&#xff0c;金额&#xff1d;单价&…