OpenSSL源码简介
1、X.509标准
x509是由国际电信联盟(ITU-T)制定的数字证书标准;包含公钥和用户标志符、CA等;
x509是数字证书的规范,P7和P12是两种封装形式;X.509是常见通用的证书格式。所有的证书都符合为Public key Infrastructure 制定的ITU-T x509国际标准。
PKCS # 7常用的后缀是: P7B, P7C, SPC
PKCS # 12常用的后缀有: P12 ,PFX
X.509 DER编码(ASCII)的后缀是: DER CER CRT
X.509PEM编码(base64)的后缀是:PEM CER CRT
pem格式是经过base64编码的证书,der格式是DER编码的证书;
证书入和导出操作支持四种文件格式。
- 个人信息交换 (PKCS #12)
个人信息交换格式(PFX,也称为 PKCS #12)支持安全存储证书、私钥和证书路径中的所有证书。PKCS #12 是唯一可用于导出证书及其私钥的文件格式。 - 加密消息语法标准 (PKCS #7)
PKCS #7 格式支持存储证书和证书路径中的所有证书 - DER 编码的二进制 X.509
区别编码规则 (DER) 格式支持存储单个证书。该格式不支持存储私钥或证书路径。 - Base64 编码的 X.509
Base64 格式支持存储单个证书。该格式不支持存储私钥或证书路径。
cer/crt证书: 用于存储公钥证书的文件格式,它是二进制存放的,不含私钥,不能导入到个人存储区,因为个人存储区存储与私钥相关的数字证书;cer、crt格式只是一个后缀,该后缀的证书可以pem编码的也可以是der编码的;
pfx/p12证书:含有证书和对应的 私钥,可以导入IE的个人证书存储区;
p12格式的证书一般用于证书的分发,里面包含了证书和对应的私钥;
由于Apache Proxy是PEM格式Prefer的,不支持DER经编码的证书,因此,要通过证书的编码转换,把DER编码转换为PEM编码,再经Apache处理。
证书的编码为DER编码,但DER编码的文件是二进制格式不利于读写和传播,所以对DER编码的数据进行BASE64编码形成了PEM。
2、PKCS系列标准
由RSA数字安全公司但呢个制定的公钥密码学标准,包含证书申请、更新、CRL、DS等;
其中PKCS7,定义了通用的消息语法,含数字签名和加密,与PEM兼容,互相转化;
PKCS12,描述个人信息交换语法,打包公钥、私钥、证书和其他信息;
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
比较:
P7一般是把证书分成两个文件,一个公钥一个私钥,有PEM和DER两种编码方式。PEM比较多见,就是纯文本的,P7一般是分发公钥用,看到的就是一串可见字符串,扩展名经常是.crt,.cer,.key等。DER是二进制编码。
P12是把证书压成一个文件,.pfx 。主要是考虑分发证书,私钥是要绝对保密的,不能随便以文本方式散播。所以P7格式不适合分发。.pfx中可以加密码保护,所以相对安全些。
在实践中要中,用户证书都是放在USB Key中分发,服务器证书经常还是以文件方式分发。服务器证书和用户证书,都是X509证书,就是里面的属性有区别。
3、Openssl源码分析
1.简介
开源SSL安全工具,包含SSL协议实现,大量软算法(对称/非对称/摘要),非对称算法密钥生成,ASN.1编解码库、证书请求(pscs10) 编解码,数字证书、CRL编解码,OCSP协议,pkcs7标准实现和pkcs12个人数字证书格式实现等功能;
使用C语言开发,跨平台优越;
2.源码框架
主要由eay基础函数库、ssl库、工具、demo和test组成;
Eay库源码,在crypto目录下,包含:
1) asn.1 DER编码解码(crypto/asn.1目录),包含数字证书请求,CRL吊销列表及pkcs8编解码函数;
2) 抽象IO(BIO,crypto/bio目录),包含各种输入输出抽象,文件、内存、stdio、socket、SSL;
3) 大数运算(crypto/bn目录),用于非对称算法密钥生成和各种加解密;
4) 字符缓存(crypto/buffer目录);
5) 配置文件读取(crypto/conf 目录),主要配置文件为openssl.cnf。本目录实现改格式配置文件的读取;
6) DSO动态共享对象(crypto/dso目录),抽象各平台动态库加载函数,提供统一接口;
7) 硬件引擎(crypto/engine目录),提供了规定接口;
8) 错误处理(cryto/err目录),提供处理接口;以堆栈显示错误;
9) 对称算法、非对称算法及摘要算法封装(crypto/evp目录)
10) HMAC(crypto/hmac目录),实现基于对称算法的MAC;
11) Hash表(crypto/lhash目录),实现散列表数据结构;
12) OCSP数字证书在线认证(crypto/ocsp目录),实现ocsp协议的编解码等;
13) PEM文件格式处理(crypto/pem目录),生成和读取PEM文件;
14) Pkcs7消息语法(crypto/pkcs7目录),实现构造和解析PKCS7消息;
15) Pkcs12个人证书格式(crypto/pkcs12目录),实现pkcs12证书构造和解析;
16) 队列(crypto/pqueue目录),实现队列数据结构,用于DTLS;
17) 随机数(crypto/rand目录),实现伪随机数生成,支持用户自定义;
18) 堆栈(crypto/rand目录),实现堆栈数据结构;
19) 线程支持(crypto/threads),openssl支持多线程,但是用户必须实现相关接口;
20) 文本数据库(crypto/txt_db目录);
21) X509数字证书(crypto/x509目录),包括数字证书申请、证书和CRL构造解析和签名验证;
22) 对称算法(crypto/aes、crypto/bf、crypto/cast、crypto/omp和crypto/des等);
23) 非对称算法(crypto/dh、crypto/dsa、crytpo/ec和crypto/ecdh);
24) 摘要算法(crypto/md2/4/5/sha)以及密钥交换/认证算法(crypto/dh和crypto/krb5);
SSL库源代码在ssl目录下,包含sslv2,sslv3,tlsv1和DTLS的源码;包含客户端源码、服务器源码、通用、底层包、方法以及协议相关密钥计算源码;
工具源码在crypto/apps目录;demo中有硬件引擎engines源码;测试源码在test中;
摘自:https://www.cnblogs.com/testlife007/p/6699566.html
更多源码分析可参考:《Openssl编程》
OpenSSL源码简介的更多相关文章
- (原创)通用查询实现方案(可用于DDD)[附源码] -- 简介
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
- Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装
原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...
- windows 平台使用 VS2017 编译openssl源码
windows 平台使用 VS2017 编译openssl源码 1)依赖安装 安装 perl 脚本解释器 下载 http://libevent.net/download 安装 nasm 汇编器 C:\ ...
- 通用查询实现方案(可用于DDD)[附源码] -- 简介
原文:通用查询实现方案(可用于DDD)[附源码] -- 简介 [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [ ...
- openssl源码目录结构
openssl源代码主要由eay库.ssl库.工具源码.范例源码以及测试源码组成. eay库是基础的库函数,提供了很多功能.源代码放在crypto目录下.包括如下内容: 1) asn.1 DER编码解 ...
- nginx 源码编译 用OPENSSL源码 开启 SSL
./configure --prefix=/usr/local/nginx --with-openssl=/home/uniqs/thirdparty/openssl/openssl-1.1.1d - ...
- pychon - selenium2Libray源码简介
I. Introduction Selenium2Library是robot framework中主流的测试网页功能的库, 它的本质是对webdriver的二次封装, 以适应robot框架. 百度上一 ...
- socketserver源码简介
一.socketserver流程简介 +------------+ | BaseServer | +------------+ | v +-----------+ +----------------- ...
- openssl源码安装
下载最新的OpenSSL http://openssl.org/source/ ./config make make install 通过命令openssl version或者openssl ...
随机推荐
- Linux 命令速记本
# 比较1.txt和2.txt的差异 comm [---] .txt .txt # 求1.txt和2.txt的MD5用于区分两个文件是否相同 md5sum .txt .txt #tr 用于转换或删除文 ...
- js 中文字符串转base64
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JNI使用常见错误
1. java.lang.UnsatisfiedLinkError: Couldn't load hello: **findLibrary returned null** 解决方案: * 如果处理器平 ...
- mariadb数据库(2)增删改与 单表查询
一.数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 整数:int, bit 小数:decimal ...
- kill-9 kill-15
kill -9 PID 是操作系统从内核级别强制杀死一个进程. kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭. kill -15 PID 效果是正常退出进程,退出前可以被阻 ...
- SAS数据挖掘实战篇【一】
SAS数据挖掘实战篇[一] 1数据挖掘简介 1.1数据挖掘的产生 需求是一切技术之母,管理和计算机技术的发展,促使数据挖掘技术的诞生.随着世界信息技术的迅猛发展,信息量也呈几何指数增长,如何从巨量.复 ...
- Window Position
IE, Safari, Opera, and Chrome all provide screenLeft and screenTop properties that indicate the wind ...
- charles工具页面介绍
charles的主页面介绍 手机连上代理之后,每在手机上进行操作我们便会在charles上接收到请求.此时的charles页面将会变成如下密密麻麻的内容,故这节课我们来讲解一下Charles的主页面 ...
- Linux-把任务放到后台
公司用的服务器,只能ssh远程操作,每天都会自动退出账户,不知道怎么回事儿,很郁闷.所以每天早起重新登录后发现进程已经关闭了,因为你运行的任务是和terminal关联在一起的,terminal关闭后, ...
- 【神经网络与深度学习】卷积神经网络(CNN)
[神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...