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源码简介的更多相关文章

  1. (原创)通用查询实现方案(可用于DDD)[附源码] -- 简介

    [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html).   [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...

  2. Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

    原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...

  3. windows 平台使用 VS2017 编译openssl源码

    windows 平台使用 VS2017 编译openssl源码 1)依赖安装 安装 perl 脚本解释器 下载 http://libevent.net/download 安装 nasm 汇编器 C:\ ...

  4. 通用查询实现方案(可用于DDD)[附源码] -- 简介

    原文:通用查询实现方案(可用于DDD)[附源码] -- 简介 [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html).   [ ...

  5. openssl源码目录结构

    openssl源代码主要由eay库.ssl库.工具源码.范例源码以及测试源码组成. eay库是基础的库函数,提供了很多功能.源代码放在crypto目录下.包括如下内容: 1) asn.1 DER编码解 ...

  6. nginx 源码编译 用OPENSSL源码 开启 SSL

    ./configure --prefix=/usr/local/nginx --with-openssl=/home/uniqs/thirdparty/openssl/openssl-1.1.1d - ...

  7. pychon - selenium2Libray源码简介

    I. Introduction Selenium2Library是robot framework中主流的测试网页功能的库, 它的本质是对webdriver的二次封装, 以适应robot框架. 百度上一 ...

  8. socketserver源码简介

    一.socketserver流程简介 +------------+ | BaseServer | +------------+ | v +-----------+ +----------------- ...

  9. openssl源码安装

    下载最新的OpenSSL http://openssl.org/source/ ./config    make  make install 通过命令openssl version或者openssl ...

随机推荐

  1. [常用的Cmd运行命令]

    打开命令提示符,有很多与系统有关的命令都可以在命令提示符中完成,比如输入ipconfig查看电脑的IP osk 打开屏幕键盘 calc  打开计算器的功能 notepad 打开记事本 mspaint ...

  2. [go]beego获取参数/返回参数

    获取前端传来的参数 获取数据并转为对应的类型 - ?id=111&id=122 c.GetInt("id") int,111 - ?id=111&id=122 c. ...

  3. Numpy数据类型转化astype,dtype

    1. 查看数据类型 import numpy as np arr = np.array([1,2,3,4,5]) print(arr) [1 2 3 4 5] # dtype用来查看数据类型 arr. ...

  4. 简单配置 docker swarm

    #准备三台CentOS7 #IP划分 192.168.1.201       virtualBox1 192168.1.202        virtualBox2 192168.1.204      ...

  5. 八十九:redis之python操作redis

    安装:pip install redis 连接 字符串操作 插入值 获取 删除值 列表操作,更多操作见源码 添加 获取 集合操作,更多操作见源码 哈希操作,更多操作见源码 事务操作:cache.pip ...

  6. 七十九:flask.Restful之flask-Restful标准化返回参数示例

    接上一篇的代码和数据 对于复杂结构的数据如果只是定义单一结构的话返回的数据就没意义了,此时定义的数据结构需精确到所有数据的每一个字段有时候要返回的数据结构中,会有比较复杂的数据结构,证实后可以使用一些 ...

  7. idea 错误: 找不到或无法加载主类 xxx.xxx.xxxxx

    idea 错误: 找不到或无法加载主类 xxx.xxx.xxxxx JDK环境,maven项目还是ee还是web项目,是否都正常. 如果是用idea打开的话,在源码目录上点击右键,然后找到Mark d ...

  8. cisco路由的ip路由(一)

    路由Corp配置Corp#sh run Building configuration... Current configuration : 1652 bytes ! version 12.4 no s ...

  9. 【C/C++】什么是线程安全

    <strong>线程安全</strong>就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不 ...

  10. cm日志的清理

    #过一段时间后,cm server的空间越来越大 #删除日志/bin/rm /var/lib/cloudera-host-monitor/ts/*/partition*/* -rf/bin/rm /v ...