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 ...
随机推荐
- leetcode131分割回文串
class Solution { public: vector<vector<string>> ans; bool isok(string s){ ; ; while(i< ...
- np.repeat()
np.repeat()用于将numpy数组重复. numpy.repeat(a, repeats, axis=None); 参数: axis=0,沿着y轴复制,实际上增加了行数axis=1,沿着x轴复 ...
- WPF 键盘全局接收消息
1.========================================================================== 在c#中怎样禁用鼠标左键的使用,其实我们可以通 ...
- 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_5 自定义类型转换器演示异常
后端自动进行类型的转换.前端输入的年龄都是字符串的形式传递到后端. user的实体类 加一个Date日期类型格式的字段.生成get和set还有toString的方法 重新部署程序 日期用横线的方式 ...
- koa express 优缺点
关于 Express 优点.Express 的优点是线性逻辑:路由和中间件完美融合,通过中间件形式把业务逻辑细分,简化,一个请求进来经过一系列中间件处理后再响应给用户,再复杂的业务也是线性了,清晰明了 ...
- 关于 About
关于我 我是 Ivy,目前武汉大学 GIS 专业在读硕士研究生,业余渣程序媛. 写了一些不起眼的代码(参看我的 GitHub),做了一些不起眼的小研究(参看我的 ResearchGate). 关于本站 ...
- RN 图片处理 resizeMode
Image组件必须在样式中声明图片的宽和高.如果没有声明,则图片将不会被呈现在界面上. 我们一般将Image定义的宽和高乘以当前运行环境的像素密度称为Image的实际宽高. 当Image的实际宽 ...
- C#作业系统中的安全系统
比赛条件 编写多线程代码时,总是存在竞争条件的风险.当一个操作的输出取决于其控制之外的另一个过程的定时时,发生竞争条件. 竞争条件并不总是一个错误,但它是不确定行为的来源.当竞争条件确实导致错误时,可 ...
- 使用torchvision下载数据集显示没有模板
配置: Anaconda+Windows+py3.7 一:首先先卸载开始的torchvision:pip uninstall torchvision 二:找到官网:https://pypi.org/p ...
- webgoat8百度云下载链接
网络不好的很难下载,网上也没什么好用的下载链接,我就上传了百度网盘,有需要的兄弟自己下. 链接:https://pan.baidu.com/s/1plTxkZUhSZm9vA5GGzYmMQ 提取码: ...