openssl ans.1编码规则分析及证书密钥编码方式
1 数据编码格式
openssl的数据编码规则是基于ans.1的,ans.1是什么 ? 先上高大上的解释
ASN.1(Abstract Syntax Notation One), 是一种结构化的描述语言,包括两部分,数据描述语言和数据编码规则,数据描述语言标准:语言标准允许用户自定义的基本数据类型,并可以通过简单的数据类型组成更复杂的数据类型。数据编码规则:这些编码方法规定了将数字对象转换成应用程序能够处理、保存、传输的二进制形式的一组规则。标准ASN.1编码规则有规范编码规则(CER,Canonical Encoding Rules)、唯一编码规则(DER,Distinguished Encoding Rules)、压缩编码规则(PER,Packed Encoding Rules)和XML编码规则(XER,XML Encoding Rules)。
没看懂?好吧,我也没看懂。经过搜索无数资料后,现把自己的理解说一下,有不对的地方请大牛指正
我们知道在计算机语言中有很多的数据结构,有列表、集合、数组等等。但对应用程序特别是网络来说,这些数据结构都是二进制的数据流,那么如何把这些不同的数据结构变成数据流,又能让其他应用能够识别呢。这就需要一个标准,也就是我们说的ans.1,大家都遵守这个标准,自然可以和平共处。OK,这个标准到底是什么玩意?
这个问题一会再来回答。现在我们想想如何把一个二叉树中的数据以流的形式发出去,对于整型、字符串这些基本类型我们可以直接塞进数据流里,但对于这种复杂的结构,这种方法就不显示了,怎么办?我们引入一个数字对象的概念,把这些数据结构转化成一个数字对象,怎么转?这就用到了asn.1标准的第一部分--数据描述语言标准,这个标准定义了一些基本的数据类型,如果我们使用到复杂的数据结构,asn.1还允许通过简单数据类型组成复杂的数据类型(x.509)。
数字对象已经建立的,怎么把这个数据对象变成二进制流呢,这就需要用到ans.1的第二部分--编码规则,编码方法规定了将数字对象转换成应用程序能够处理、保存、传输的二进制形式的一组规则。
现在可以回答上面这个问题了,简单来说这个标准就是规定了把数据转化成数据对象,又规定数据对象编码为二进制流的方法。
openssl使用的是asn.1的der编码规则,保证每个asn.1对象使用der编码的出的二进制编码是唯一的。
openssl使用pem作为基本的文件编码格式,pem和der是什么关系,如下图所示,几种加密环节是可选的
从本质上来说,openssl是pem编码就是在der编码的技术上进行Base64编码,然后添加一些头尾信息组成,可以通过openssl指令对der和pem进行格式转换
2 证书编码格式
常见的证书编码格式有三种X.509证书,PKCS#12证书PKCS#7证书。
X.509证书:最常用的证书格式,它仅包含了公钥信息而没有私钥信息,一个openssl签发经过PEM编码的X.509证书看起来如下
-----BEGIN CERTIFICATE-----
XXX
-----END CERTIFICATE-----
中间部分就是经过PEM编码的X509证书。除了上述形式的头尾格式,还可能出现以下两种不同的标识符
-----BEGIN X. CERTIFICATE----
XXX
-----END X. CERTIFICATE-----
或者
-----BEGIN TRUSTED CERTIFICATE-----
-----END TRUSTED CERTIFICATE-----
X.509证书文件的后缀名经常是der,cer或者crt。openssl的指令x509提供了对X.509证书进行格式转换的方法。
PKCS#12证书:PKCS12证书可以包含一个或者多个证书,并且还可以包含证书对应的私钥。openssl的pkcs12指令可以将X.509格式的证书和私钥封装成PKCS#12格式的证书,也可以将PKCS#12证书转换成X.509证书
PKCS#12证书的后缀名通常是p12或者pdx
PKCS#7证书: PKCS#7可以封装一个或者多个X.509证书或者PKCS#6证书,并且可以包含CRL信息。PKCS#7证书中也不包含私钥信息。openssl提供了crl2pkcs7和pkcs7两个指令来生成和处理PKCS#7文件,可以使用他们在X.509证书和PKCS#7证书之间进行转换和处理
PKCS#7证书的后缀名是p7b
3 密钥编码
openssl有多种形式的密钥,openssl提供PEM和DER两种编码方式对这些密钥进行编码,并提供相关指令可以使用户在这两种格式之间进行转换
openssl密钥大致可以分为两种,一种是可以公开的,例如公钥,一种是不能公开的,比对私钥。反映在编码上,有的密钥需要加密,有的密钥就不需要加密。一个经过加密的PEM编码密钥文件会在PEM文件中增加一些头信息,表明密钥的加密状态,加密算法及初始化向量等信息
openssl指令提供了对密钥加密的功能,并提供了多种可选的对称加密算法,比如DES和DES3。当对密钥进行加密的时候通常需要用户输入口令,这里的口令并非直接用来作为加密的密钥,而是根据这个口令使用一系列HASH操作来生成一个用户加密密钥数据的密钥。当读取这类密钥的时候,同样需要输入同样的口令。
openssl ans.1编码规则分析及证书密钥编码方式的更多相关文章
- 建立标准编码规则(四)-C#编码规范分类及实现
1 现实中的问题 在任何一个公司,每个程序员编写的习惯可能都是不一样的,大到命名空间,小到变量的名字.甚至,我们去github,里面的大牛每个开源的项目的命名规则可能都不一样. 我们通常会遇到下面的问 ...
- WEB前端 [编码] 规则浅析
前言 说到前端安全问题,首先想到的无疑是XSS(Cross Site Scripting,即跨站脚本),其主要发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被 ...
- 通用的业务编码规则设计实现[转:http://www.cnblogs.com/xqin/p/3708367.html]
一.背景 每一个企业应用中不可避免的都会涉及到业务编码规则的问题,比如订单管理系统中的订单编号,比如商品管理系统中的商品编码,比如项目管理系统中的项目编码等等,这一系列的编码都需要管理起来,那么它们的 ...
- X.509证书的编码及解析:程序解析以及winhex模板解析
一.证书的整体结构:证书内容.签名算法.签名结果. 用ASN.1语法描述如下: Certificate::=SEQUENCE{ tbsCertificate TBSCertificate, signa ...
- IIS8中使用OpenSSL来创建CA并且签发SSL证书
前言 [转载]http://alvinhu.com/blog/2013/06/12/creating-a-certificate-authority-and-signing-the-ssl-certi ...
- 基于OpenSSL自建CA和颁发SSL证书
关于SSL/TLS介绍见文章 SSL/TLS原理详解.关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 . openssl是一个开源程序的套件.这个套件有三个 ...
- URL编码规则
一.问题的由来 问题:当url地址中包含&.+.%等特殊字符(主要是传递参数时,参数的内容中包含这些字符)时,地址无效.比如http://10.190.0.0:108/doc/test+des ...
- UTF-8编码规则(转)
from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...
- Base64编码原理分析
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在了解Base64编码之前,先了解几个基本概念:位.字节. 位:"位(bit)"是计算机中最小的数据单位.每一位 ...
随机推荐
- linux提取指定行至指定位置
grep查找ERROR,定位位置 awk打印到指定行数 sed打印到文本末尾 awk打印到文本末尾 方法一 #!/bin/csh -f if(-f errorlog.rpt) then rm -rf ...
- Sass@规则
@importSass 支持所有 CSS3 的 @ 规则, 以及一些 Sass 专属的规则,也被称为“指令(directives)”.Sass 扩展了 CSS 的 @import 规则,让它能够引入 ...
- WebApi2官网学习记录---Media Formatters
Web API内建支持XML.JSON.BSON.和form-urlencoded的MiME type. 创建的自定义MIME类型要继承一下类中的一个: MediaTypeFormatter 这个类使 ...
- Mac_配置adb环境变量
1.打开终端Terminal. 2.进入HOME目录:命令行输入 echo(这之间有一个空格) $HOME 3.创建.bash_profile文件:命令行输入 touch(这之间有一个空格).bash ...
- Linux_X64安装Jboss
一.系统环境 系统平台:RedHat 6.4 Java version:jdk-6u45-linux-x64 Jboss version:jboss-5.1.0.GA-jdk6 二.下载jdk1. ...
- .net 开发定时执行的windows服务
环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...
- 0301——UItableView
- (void)viewDidLoad { [super viewDidLoad]; self.myTableView = [[UITableView alloc]initWithFrame:CGRe ...
- TOJ3596 二维背包
3596. Watch The Movie Time Limit: 2.0 Seconds Memory Limit: 65536KTotal Runs: 424 Accepted Run ...
- Asp.net mvc 3 file uploads using the fileapi
Asp.net mvc 3 file uploads using the fileapi I was recently given the task of adding upload progress ...
- [算法导论]练习2-4.d求排列中逆序对的数量
转载请注明:http://www.cnblogs.com/StartoverX/p/4283186.html 题目:给出一个确定在n个不同元素的任何排列中逆序对数量的算法,最坏情况需要Θ(nlgn)时 ...