`

证书文件编码格式介绍

 
阅读更多

原文地址:http://blog.csdn.net/mycoolx/article/details/6730435 感谢博主

OpenSSL中虽然使用PEM作为基本的文件编码格式,但是,由于不同的对象其封装和标准格式不太一样,所以经常会导致读者产生迷惑。

 

 

 

一、数据编码格式

 

        首先介绍一下ASN.1(Abstract Syntax Notation One)标准,这是一种描述数字对象的方法和标准。ASN1是一种结构化的数字对象描述语言,它包括两部分:数据描述语言(ISO 8824)和数据编码规则(ISO 8825)。ASN.1的数据描述语言允许用户自定义基本的数据类型,并可以通过简单的数据类型组成更复杂的数据类型。比如:一个复杂的数据对象,如 X.509证书,就是在其他一些数据类型上定义的,而其他数据类型又是在更基本的数据类型上建立的,直到回溯到定义的最基本的数据类型。

 

        ASN.1提供了多种数据编码方法。包括了BER、DER、PER和XER等。这些编码方法规定了将数字对象转换成应用程序能够处理、保存和网络传输的二 进制编码形式的一组规则。目前经常被采用的是BER(Basic Encode Rules)编码,但是BER编码具有编码不唯 一的性质,也就是说,一个相同的对象通过BER编码可能会产生几种不同的编码数据。所以,在OpenSSL和其他密码学相关软件中经常使用BER的一个子 DER(Distinguished Encoding Rules)。对于每一个ASN.1对象,使用DER编码得出的二制编码码数据是唯 一的。

 

        PEM编码全称是Privacy Enhanced Mail,是一种保密邮件的编码标准。通常来说,对信息的编码过程基本如下。

 

  1. 信息转换为ASCII码或其他编码方式,比如采用DER编码。
  2. 使用对称加密算法加密经过编码的信息。
  3. 使用BASE64对加密码后的信息进行编码。
  4. 使用一些头定义对信息进行封装,主要包含了进行正确解码需要的信息,头定义的格式形式如下:
    Proc-Type:4,ENCRYPTED
    DEK-Info:cipher-name,ivec
    其中,第一个头信息标注了该文件是否进行了加密,该头信息可能的值包括ENCRYPTED(信息已经加密和签名),MIC-ONLY(信息经过数据签名但 没有加密),MIC-CLEAR(信息经过数字签名但是没有加密,也没有进行编码,可使用非PEM格式阅读),以及CLEAR;第二个头信息标注了加密的 算法及对称加密块算法使用的初始向量。
  5. 在这些信息的前面加上如下形式头标注信息:
    ---BEGIN PRIVACY-ENHANCED MESSAGE---
    在这些信息的后面加上如下形尾标注信息:
    ---END PRIVACY-ENHANCED MESSAGE---
    OpenSSL的PEM编码基本上是基于DER编码之上的,也就是说,它在上述第一步采用的是DER编码,所以,从本质上来说,OpenSSL的PEM编码就是在DER编码基础上进行BASE64编码,然后添加一些头尾信息组成的。

 

二、证书标准

 

        数据编码格式提供了封装数据的基本方法,但是,对于具体的数据对象,比如证书,根据其包含的内容的不同,还有更具体的表达式。

 

        1、X.509证书

 

        目前总的来说有三种常用的证书编码格式:X.509证书、PKCS#12证书和PKCS#7证书。X.509证书是最经常使用的证书,它仅包含了公钥信息而没有私钥信息,是可以公开进行发布的,所以X.509证书对象一般都不需要加密。

 

        X.509证书的格式通常如下:
                 ……相关的可读解释信息(省略)……
                 ---BEGIN CERTIFICATE---
                 ……PEM编码的X.509证书内容(省略)……
                 ---END CERTIFICATE---
                 除了“---BEGIN CERTIFICATE---”和“---END CERTIFICATE---”头尾格式外,还可能有这样不同的标识符:“---BEGIN X.509 CERTIFICATE---”、“---END X.509 CERTIFICATE---”或者“---BEGIN TRUSTED CERTIFICATE---”、“---END TRUSTED          CERTIFICATE---”

 

        在OpenSSL实际签发的证书文件中最前面的很多可读的证书明文解释,只是为了增加证书文件的可读性,并不代表真正的数据。在其他软件中,比如 Windows软件,可能并不支持这些额外的明文信息,所以,先要将“---BEGIN CERTIFICATE---”之前的所有可读信息去掉。可以手动删除,也可以使用PEM到PEM的证书格式转换去掉这些明文可读信息。
        在Windows平台,X.509证书文件的后缀名经常是der、cer或者crt,都是可以被自动识别的。对于OpenSSL来说,后缀名是没有实际意义的。

 

      2、Netscape证书标准

 

        Netscape提供了一种名为Netscap证书序列(Netscape Cerificate Sequence)的格式来封装一系列证书(实际上里面采用了一个PKCS#7格式来封装证书)。以便能够一次性地下载或者传输多个数字证书。所以,某些 时候,Netscape证书序列可以替代PKCS#7的作用,用来打包一系列证书。

 

        Netscape证书序列虽然不一定能够得到微软的支持,但是在其他一些开源软件和Linux软件中却得到了广泛的支持。

 

三、证书封装

 

        1、PKCS#12证书

 

        PKCS#12 证书不同于X.509证书,它可以包含一个或多个证书,并且还可以包含证书对应的私钥。PKCS#12的私钥是经过加密的,密钥由用户提供的口令产生。所以,无论在使用PKCS#12证书的时候一般会要用用户输入密钥口令。
        PKCS#12证书文件在Windwos平台和Mozzila中支持的后缀名是p12或者pfx,如果要在IE或者Mozzila 中正确使用自己的证书,那么一般来说都要求转换成包含公钥和私钥的PKCS#12证书忖入到相关软件中。

 

        2、PKCS#7

 

        PKCS#7可以封装一个或多个X.509证书或者PKCS#6证书(PKCS#6是一种证书格式,但是并不经常使用)、相关证书链上的CA证书,并且可 以包含CRL信息。PKCS#7不包含私钥信息。PKCS#7可以将验证证书需要的整个证书上的证书都包含进来,从而方便证书的发布和正确使用。这样就可 以直接把PKCS#7证书发给验证方验证,免去了把以上的验证内容一个一个发给接书方的烦琐了。

 

        PKCS#7文件在Windows平台的合法后缀名是p7b。  

 

      3、PKCS#8

 

        PKCS#8标准是一个非常简单的标准,它主要用于封装私钥和其他相关的属性信息。一般来说,PKCS#8格式的私钥都是被加密的,支持PKCS#5和PKCS#12标准定义的算法,当然,私钥也可以不加密。PKCS#8标准一方面可以增强私钥的安全性,另一方面也为用户提供了一种简单的确立信任关系的方式,这主要是基于私钥特别名称和最高层可信者的权威公钥等属性信息。

 

        OpenSSL提供的经过PEM编码的PKCS#8标准的文件,分为加密和非加密的两种方式。加密的PKCS#8密钥标识如下:

 

        ——BEGIN ENCRYPTED PRIVATE KEY——

 

        ——END ENCRYPTED PRIVATE KEY——

 

        非加密的PKCS#8密钥标识如下:

 

        ——BEGIN PRIVATE KEY——

 

        ——END PRIVATE KEY——

 

 

 

 

 

四、密钥编码

 

        密钥有多种形式的,很多情况下,需要把这些密钥保存下来。通常使用PEM和DER两种编码方式对要保存的密钥进行编码。

 

        DER 编码存储的密钥文件是不可读的,如果用文本编辑器打开它,将看到一些难以理解的符号,因为这是一个二进制编码的文件。PEM则不一样,它要友好得多,因为 PEM经过BASE64编码。用文本编辑器打开PEM编码的密钥文件,可以看到跟证书类似,它们真正的编码都包含在类似于:---BEGIN XXXXXX---和---END XXXXXX--- 这样的符号对内。

 

        密钥总的来说有两种,一种是可以公开的(比如公开密钥对的公钥),一种是不能公开的(比如公开密钥对的私钥)。反映在编码上,有的密钥文件需要加密,有的 就不需要加密。一个经过加密的PEM编码密钥文件在上述的符号内会增加一些头信息,这些头信息主要是为密钥解密的时候提供有用的信息,包括标记密钥加密状 态、使用加密算法及初始赂量(对于块加密算法来说)。例如:

 

---BEGIN RSA PRIVATE KEY---
Proc-Type:4,ENCRYPTED
DEK-Info:DES-ED3-CBC,86B0167E005535D2
……(加密内容密钥部分)……
---END RSA PRIVATE KEY---

 

        以上的PEM编码的是RSA(RSA PRIVATE KEY)私钥,该密钥经过了加密(ENCRYPTED),使用的是3DES的CBC方式(DES-EDE3-CBC),使用的IV向量是“86B0167E005535D2”。

 

 

 

五、其他标准

        证书吊销列表(CRL)是用户验证证书的重要参考资料,它主要包含了无效的证书列表,告诉用户哪些证书已经吊销或无效的。如果 没有CRL,可以选择另一种验证方式,那就是使用在线证书服务协议(OCSP)。OCSP并不总是能够使用,比如你的网络有时候可能不能接通OCSP服务 器。CRL 是一种相对方使用和独立的解决方案,只要获取了CA中心提供的在有效期内的CRL,基本上就能对证书的有效性进行验证。PEM格式编码的CRL一般包含在 一对符号内:“---BEGIN X.509 CRL---”和“---END X.509 CRL---”。也可以使用DER格式保存CRL。

分享到:
评论

相关推荐

    验证ssl的证书(pem格式)

    PEM(Privacy Enhanced Mail)格式是一种常见的证书格式,它以Base64编码的方式存储证书内容,并使用`.pem`或`.crt`作为文件扩展名。在本文中,我们将深入探讨如何验证SSL证书,特别是使用PEM格式的证书,以及如何...

    java 解析ASN.1 编码格式cdr话单文件例子

    博客文章“java 解析ASN.1 编码格式cdr话单文件例子”可能详细介绍了上述步骤,并提供了具体的代码示例。在实际应用中,可能还需要处理错误、异常和性能优化等问题。学习和理解ASN.1以及相关的Java库是进行此类操作...

    base编码证书转化为der证书/源码/工具

    这样的工具通常会简化上述流程,只需上传Base64编码的证书文件,点击转换按钮,即可生成DER格式的证书。 总的来说,将Base64编码的证书转换为DER格式是通过解码过程完成的,这在需要与只接受DER格式的系统交互时...

    用OpenSSL把二进制的Cer证书转换程Base64格式的PEM格式的证书.docx

    本文将详细介绍如何使用OpenSSL工具将二进制的CER证书转换为Base64编码的PEM格式。 首先,了解OpenSSL:OpenSSL是一个强大的安全套接字层密码库,包含了各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL...

    OpenSSL 解析P12格式证书文件

    当我们谈论“OpenSSL 解析P12格式证书文件”时,我们主要关注的是如何使用OpenSSL工具来处理PKCS#12(P12)格式的证书文件。PKCS#12是由RSA安全公司制定的一种标准,用于存储用户的私钥和数字证书,常用于浏览器、...

    JAVA使用数字证书加密文件

    6. Base64编码和解码:在处理证书文件时,通常会遇到Base64编码。`Base64.java`可能包含实现Base64编码和解码的代码,这是为了将二进制数据转换为文本格式,便于传输和存储。 最后,`JAVA使用数字证书加密文件.doc`...

    数字证书格式详细说明

    常见的数字证书文件格式有: * .cer/.crt:用于存放证书,二进制形式存放,不含私钥。 * .pem:用于存放证书,以 ASCII 形式表示。 * .pfx/.p12:用于存放个人证书/私钥,通常包含保护密码,二进制方式。 * .p10:...

    asn1编码格式文件查看器Asn1View.rar

    Asn1View能够查看asn1及base64编码格式文件,很多数字证书都可以使用这个工具来查看。载入要查看的Asn1文件,从左边是一个结构树,显示各层次的数据,右侧以16进制显示数据内容,可以查看到数据的类型、内容、长度、...

    base64文件编码器

    文件编码则是将整个文件内容转换成Base64字符串,这样文件就可以在只支持文本的环境中传输或存储,比如通过文本邮件或者纯文本文件。 解码过程是编码的逆操作,将Base64字符串还原为原始的二进制数据。这对于接收...

    自动化脚本一键生成Nginx https证书证书格式为pem

    首先,我们要理解PEM(Privacy Enhanced Mail)格式,它是公钥证书的一种常见表示方式,以Base64编码,并被包裹在开始和结束的特定行内,如`—–BEGIN CERTIFICATE—–`和`—–END CERTIFICATE—–`。在Nginx中,...

    基于SM2算法的证书与证书撤销列表格式标准

    4. 证书撤销列表格式:本标准规定了基于SM2算法的证书撤销列表格式标准,包括证书撤销列表的结构、内容和编码方式等。 5. OID定义:本标准规定了基于SM2算法的证书与证书撤销列表中的OID定义。 6. 符号和缩略语:...

    SSL中各证书的转换

    这里,“mycert”是导入证书的别名,“d:\def.cer”是要导入的证书文件路径,“mykeystore.jks”是指定的Keystore文件路径。 #### 注意事项 - 在执行上述命令时,系统可能会提示输入密码来保护新创建或更新的...

    根证书制作成exe文件

    2. 将根证书打包成exe:你需要一个能够将证书文件转换为可执行文件的工具,比如`CertEnroll`库(内置在Windows操作系统中)或者第三方软件,如`MakeCertToExe`。这些工具可以将证书打包进一个可执行文件中,并编写...

    CA证书资源包(全版本通用)

    这个文件通常是一个二进制格式的X.509数字证书,用于构建和验证信任链,确保用户与服务器之间的通信安全。 **CA证书的工作原理:** 在网络安全中,CA证书扮演着信任中介的角色。当用户尝试访问一个网站时,浏览器会...

    文件分类及编码规则.doc

    三、文件编码格式 2.2 公司文件编码通常由多个部分组成,如文件类型号、文件系统号、文件分系统号和顺序号、版本号等,这种结构化的编码方式有助于快速定位和检索文件。 文件编码系统设计的目的是为了提高文件管理...

    der文件查看工具

    DER(Distinguished Encoding Rules)文件是一种基于ASN.1(Abstract Syntax Notation One)标准的二进制编码规则,广泛应用于X.509数字证书、SSL/TLS协议、PKI(Public Key Infrastructure)系统以及其他网络通信...

    C语言实现X509证书解析

    1. **加载证书**:首先,你需要将X509证书的PEM或DER格式文件加载到内存中。C语言中可以使用OpenSSL库中的`PEM_read_X509()`或`d2i_X509()`函数完成这个任务。 2. **初始化解析器**:OpenSSL提供了`X509`结构体,...

    数字证书查看、拆分和格式转换工具

    “crt”文件通常指的是X.509证书的PEM编码格式,它包含了公开的信息,如公钥和证书持有者的身份信息。而“key”文件则通常代表私钥,是与公钥配对的,用于解密通过公钥加密的数据。 在实际操作中,有时我们需要将...

    cer证书生成工具

    `CER`证书是一种特定类型的证书,遵循DER编码格式,它是X.509标准下的二进制表示。本文将详细介绍“cer证书生成工具”,以及如何利用OpenSSL等工具快速生成公私钥对。 首先,我们要理解公私钥对的概念。在公钥加密...

Global site tag (gtag.js) - Google Analytics