证书的标准规范,其中使用最广泛的是由ITU(International TelecommumcationUnion,国际电信联盟)和ISO(IntemationalOrganizationforStandardization,国际标准化组织)两个组织制定的X.509规范。

X.509是一种非常通用的证书格式。所有的证书都符合ITU-TX.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用。X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN.1语法进行编码。

在一份证书中,必须证明公钥及其所有者的姓名是一致的。对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式)。

标准原文:

RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile (rfc-editor.org)

RFC5280 中文翻译 中文RFC RFC文档 RFC翻译 RFC中文版 (rfc2cn.com)

本文重点介绍证书内容的格式,详见1.2。

1 介绍

X.509证书中主要含有公钥身份信息签名信息有效性信息等信息。这些信息用于构建一个验证公钥的体系,用来保证客户端得到的公钥正是它期望的公钥。

  1. 公钥 : 非对称密码中的公钥。公钥证书的目的就是为了在互联网上分发公钥。
  2. 身份信息 : 公钥对应的私钥持有者的信息,域名以及用途等。
  3. 签名信息 : 对公钥进行签名的信息,提供公钥的验证链。可以是CA的签名或者是自签名,不同之处在于CA证书的根证书大都内置于操作系统或者浏览器中,而自签名证书的公钥验证链则需要自己维护(手动导入到操作系统中或者再验证流程中单独提供自签名的根证书)。
  4. 有效性信息:证书的有效时间区间,以及CRL等相关信息。

1.1 证书格式

  1. DER(Distinguished Encoding Rules)

    格式 : 二进制格式,是X.690标准中的一种二进制编码格式。

  2. PEM(Privacy Enhanced Mail)

    格式 : ASCII文本格式,BASE64编码。在DER格式或者其他二进制数据的基础上,使用BASE64编码为ASCII文本,以便于在仅支持ASCII的环境中使用二进制的DER编码的数据

    PEM在RFC 7468: Textual Encodings of PKIX, PKCS, and CMS Structures (rfc-editor.org)中被正式标准化。具体格式如下:

    -----BEGIN label 1-----
    base64 string...
    -----END label 1-----
    -----BEGIN label 2-----
    base64 string...
    -----END label 2-----
    

    其中label 1label 2可以有1~N个。常用的label有(RFC 7468: Textual Encodings of PKIX, PKCS, and CMS Structures (rfc-editor.org)):

    Sec. Label                  ASN.1 Type              Reference Module
    ----+----------------------+-----------------------+---------+----------5  CERTIFICATE            Certificate             [RFC5280] id-pkix1-e  // 公钥证书文件6  X509 CRL               CertificateList         [RFC5280] id-pkix1-e // X509证书吊销列表文件7  CERTIFICATE REQUEST    CertificationRequest    [RFC2986] id-pkcs10        // CSR请求证书文件8  PKCS7                  ContentInfo             [RFC2315] id-pkcs7*       // PKCS7文件9  CMS                    ContentInfo             [RFC5652] id-cms2004    // CMS文件10  PRIVATE KEY            PrivateKeyInfo ::=      [RFC5208] id-pkcs8      // 私钥文件OneAsymmetricKey        [RFC5958] id-aKPV111  ENCRYPTED PRIVATE KEY  EncryptedPrivateKeyInfo [RFC5958] id-aKPV1      // 加密私钥文件12  ATTRIBUTE CERTIFICATE  AttributeCertificate    [RFC5755] id-acv2       // 证书属性文件13  PUBLIC KEY             SubjectPublicKeyInfo    [RFC5280] id-pkix1-e    // 公钥文件
    

1.2 证书结构

一个具体的X.509 v3数字证书结构如下 :

标准原文
Certificate  ::=  SEQUENCE  {tbsCertificate       TBSCertificate,signatureAlgorithm   AlgorithmIdentifier,signatureValue       BIT STRING  }
// 一个证书必须包含以上三个字段// 1.TBS证书
// 该字段包含主题和颁发者的名称、与主题相关联的公钥、有效期和其他相关信息。第4.1.2节详细描述了这些字段;TBSC证书通常包括扩展,如第4.2节所述。// 2.签名算法
// signatureAlgorithm字段包含CA用于签署此证书的加密算法的标识符。
// [RFC3279]、[RFC4055]和[RFC4491]列出了支持的签名算法,但也可能支持其他签名算法。该字段必须包含与序列tbsCertificate(第4.1.2.3节)中签名字段相同的算法标识符。// 3.签名内容
// signatureValue字段包含根据ASN.1 DER编码的tbsCertificate计算的数字签名。ASN.1 DER编码的tbsCertificate用作签名函数的输入。此签名值编码为位字符串,并包含在签名字段中。此过程的详细信息针对[RFC3279]、[RFC4055]和[RFC4491]中列出的每种算法进行了说明。
// 通过生成此签名,CA将证明tbsCertificate字段中信息的有效性。特别是,CA认证公钥材料与证书主题之间的绑定。// 下面对三个字段结构进行详解// 1.TBS证书结构详解 tbsCertificateTBSCertificate  ::=  SEQUENCE  {version         [0]  EXPLICIT Version DEFAULT v1,    // 版本号serialNumber         CertificateSerialNumber,     // 序列号signature            AlgorithmIdentifier,         // 公钥算法issuer               Name,                           // 颁发者名称validity             Validity,                      // 有效期subject              Name,                            // 被签名者名称subjectPublicKeyInfo SubjectPublicKeyInfo,             // 被签名者公钥信息issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 // 颁发者唯一ID-可选subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 // 被签者唯一ID-可选extensions      [3]  EXPLICIT Extensions OPTIONAL        -- If present, version MUST be v3 // 扩展信息-可选}// 以下对成员结构定义解释// versionVersion  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }// serialNumberCertificateSerialNumber  ::=  INTEGER// signatureAlgorithmIdentifier  ::=  SEQUENCE  {algorithm               OBJECT IDENTIFIER,parameters              ANY DEFINED BY algorithm OPTIONAL  }// issuer name// 颁发者字段标识已签署和颁发证书的实体。颁发者字段必须包含非空的可分辨名称(DN)。该字段定义为X.501类型名称[X.501]。名称由以下ASN.1结构定义:Name ::= CHOICE { -- only one possibility for now --rdnSequence  RDNSequence }RDNSequence ::= SEQUENCE OF RelativeDistinguishedNameRelativeDistinguishedName ::=SET SIZE (1..MAX) OF AttributeTypeAndValueAttributeTypeAndValue ::= SEQUENCE {type     AttributeType,value    AttributeValue }AttributeType ::= OBJECT IDENTIFIERAttributeValue ::= ANY -- DEFINED BY AttributeTypeDirectoryString ::= CHOICE {teletexString           TeletexString (SIZE (1..MAX)),printableString         PrintableString (SIZE (1..MAX)),universalString         UniversalString (SIZE (1..MAX)),utf8String              UTF8String (SIZE (1..MAX)),bmpString               BMPString (SIZE (1..MAX)) }// validityValidity ::= SEQUENCE {notBefore      Time,notAfter       Time }Time ::= CHOICE {utcTime        UTCTime,generalTime    GeneralizedTime }// subject name// 一般和issuer name规定一致// subjectPublicKeyInfoSubjectPublicKeyInfo  ::=  SEQUENCE  {algorithm            AlgorithmIdentifier,subjectPublicKey     BIT STRING  }// issuerUniqueIDUniqueIdentifier  ::=  BIT STRING// subjectUniqueID// 和issuerUniqueID一样// extensionsExtensions  ::=  SEQUENCE SIZE (1..MAX) OF ExtensionExtension  ::=  SEQUENCE  {extnID      OBJECT IDENTIFIER,critical    BOOLEAN DEFAULT FALSE,extnValue   OCTET STRING-- contains the DER encoding of an ASN.1 value-- corresponding to the extension type identified-- by extnID  }// 2.证书签名算法 signatureAlgorithmAlgorithmIdentifier  ::=  SEQUENCE  {algorithm               OBJECT IDENTIFIER,parameters              ANY DEFINED BY algorithm OPTIONAL  }// 3.数字签名内容,实际签名数据
...

2 文件扩展名

X.509有很多种常用的扩展名。不过这些扩展名有时候也是其他类型文件的扩展名,也就是说具有这个扩展名的文件并不一定是X.509证书。也可能只是保存了私钥的文件。

  1. .pem : (隐私增强型电子邮件)DER编码的证书再进行BASE64编码的数据存放在"-----BEGIN CERTIFICATE-----“和”-----END CERTIFICATE-----"之中。
  2. .key : PEM格式的私钥文件。
  3. .pub : PEM格式的公钥文件。
  4. .crt : PEM或DER格式的公钥证书文件。
  5. .cer : PEM或DER格式的公钥证书文件。
  6. .csr : PEM或DER格式的证书请求CSR文件。
  7. .der:DER格式的公钥证书文件。
  8. .p7b,.p7c–PKCS#7SignedData structure without data, just certificate(s) orCRL(s)
  9. .p12–PKCS#12格式,包含证书的同时可能还有带密码保护的私钥
  10. .pfx– PFX,PKCS#12之前的格式(通常用PKCS#12格式,比如那些由IIS产生的PFX文件)

PKCS#7是签名或加密数据的格式标准,官方称之为容器。由于证书是可验真的签名数据,所以可以用SignedData结构表述。.P7C文件是退化的SignedData结构,没有包括签名的数据。

PKCS#12由PFX进化而来的用于交换公共的和私有的对象的标准格式。

3 例子

PEM格式采用文本方式进行存储。一般包括首尾标记和内容块,内容块采用Base64进行编码。

例如,一个PEM格式(base64编码)的示例证书文件内容如下所示:

-----BEGIN CERTIFICATE-----
MIIDyjCCArKgAwIBAgIQdZfkKrISoINLporOrZLXPTANBgkqhkiG9w0BAQsFADBn
MSswKQYDVQQLDCJDcmVhdGVkIGJ5IGh0dHA6Ly93d3cuZmlkZGxlcjIuY29tMRUw
EwYDVQQKDAxET19OT1RfVFJVU1QxITAfBgNVBAMMGERPX05PVF9UUlVTVF9GaWRk
bGVyUm9vdDAeFw0xNzA0MTExNjQ4MzhaFw0yMzA0MTExNjQ4MzhaMFoxKzApBgNV
BAsMIkNyZWF0ZWQgYnkgaHR0cDovL3d3dy5maWRkbGVyMi5jb20xFTATBgNVBAoM
DERPX05PVF9UUlVTVDEUMBIGA1UEAwwLKi5iYWlkdS5jb20wggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQDX0AM198jxwRoKgwWsd9oj5vI0and9v9SB9Chl
gZEu6G9ZA0C7BucsBzJ2bl0Mf6qq0Iee1DfeydfEKyTmBKTafgb2DoQE3OHZjy0B
QTJrsOdf5s636W5gJp4f7CUYYA/3e1nxr/+AuG44Idlsi17TWodVKjsQhjzH+bK6
8ukQZyel1SgBeQOivzxXe0rhXzrocoeKZFmUxLkUpm+/mX1syDTdaCmQ6LT4KYYi
soKe4f+r2tLbUzPKxtk2F1v3ZLOjiRdzCOA27e5n88zdAFrCmMB4teG/azCSAH3g
Yb6vaAGaOnKyDLGunW51sSesWBpHceJnMfrhwxCjiv707JZtAgMBAAGjfzB9MA4G
A1UdDwEB/wQEAwIEsDATBgNVHSUEDDAKBggrBgEFBQcDATAWBgNVHREEDzANggsq
LmJhaWR1LmNvbTAfBgNVHSMEGDAWgBQ9UIffUQSuwWGOm+o74JffZJNadjAdBgNV
HQ4EFgQUQh8IksZqcMVmKrIibTHLbAgLRGgwDQYJKoZIhvcNAQELBQADggEBAC5Y
JndwXpm0W+9SUlQhAUSE9LZh+DzcSmlCWtBk+SKBwmAegbfNSf6CgCh0VY6iIhbn
GlszqgAOAqVMxAEDlR/YJTOlAUXFw8KICsWdvE01xtHqhk1tCK154Otci60Wu+tz
1t8999GPbJskecbRDGRDSA/gQGZJuL0rnmIuz3macSVn6tH7NwdoNeN68Uj3Qyt5
orYv1IFm8t55224ga8ac1y90hK4R5HcvN71aIjMKrikgynK0E+g45QypHRIe/z0S
/1W/6rqTgfN6OWc0c15hPeJbTtkntB5Fqd0sfsnKkW6jPsKQ+z/+vZ5XqzdlFupQ
29F14ei8ZHl9aLIHP5s=
-----END CERTIFICATE-----
1234567891011121314151617181920212223

使用openssl 工具命令:openssl x509 -in ca-cert.pem -inform pem -noout -text

证书中的解析出来的内容:

Certificate:Data:Version: 3 (0x2)Serial Number:10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6Signature Algorithm: sha256WithRSAEncryptionIssuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA-SHA256-G2ValidityNot Before: Nov 21 08:00:00 2016 GMTNot After : Nov 22 07:59:59 2017 GMTSubject: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.orgSubject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (256 bit)pub: 04:c9:22:69:31:8a:d6:6c:ea:da:c3:7f:2c:ac:a5:af:c0:02:ea:81:cb:65:b9:fd:0c:6d:46:5b:c9:1e:ed:b2:ac:2a:1b:4a:ec:80:7b:e7:1a:51:e0:df:f7:c7:4a:20:7b:91:4b:20:07:21:ce:cf:68:65:8c:c6:9d:3b:ef:d5:c1ASN1 OID: prime256v1NIST CURVE: P-256X509v3 extensions:X509v3 Key Usage: criticalDigital Signature, Key AgreementAuthority Information Access: CA Issuers - URI:http://secure.globalsign.com/cacert/gsorganizationvalsha2g2r1.crtOCSP - URI:http://ocsp2.globalsign.com/gsorganizationvalsha2g2X509v3 Certificate Policies: Policy: 1.3.6.1.4.1.4146.1.20CPS: https://www.globalsign.com/repository/Policy: 2.23.140.1.2.2X509v3 Basic Constraints: CA:FALSEX509v3 CRL Distribution Points: Full Name:URI:http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crlX509v3 Subject Alternative Name: DNS:*.wikipedia.org, DNS:*.m.mediawiki.org, DNS:*.m.wikibooks.org, DNS:*.m.wikidata.org, DNS:*.m.wikimedia.org, DNS:*.m.wikimediafoundation.org, DNS:*.m.wikinews.org, DNS:*.m.wikipedia.org, DNS:*.m.wikiquote.org, DNS:*.m.wikisource.org, DNS:*.m.wikiversity.org, DNS:*.m.wikivoyage.org, DNS:*.m.wiktionary.org, DNS:*.mediawiki.org, DNS:*.planet.wikimedia.org, DNS:*.wikibooks.org, DNS:*.wikidata.org, DNS:*.wikimedia.org, DNS:*.wikimediafoundation.org, DNS:*.wikinews.org, DNS:*.wikiquote.org, DNS:*.wikisource.org, DNS:*.wikiversity.org, DNS:*.wikivoyage.org, DNS:*.wiktionary.org, DNS:*.wmfusercontent.org, DNS:*.zero.wikipedia.org, DNS:mediawiki.org, DNS:w.wiki, DNS:wikibooks.org, DNS:wikidata.org, DNS:wikimedia.org, DNS:wikimediafoundation.org, DNS:wikinews.org, DNS:wikiquote.org, DNS:wikisource.org, DNS:wikiversity.org, DNS:wikivoyage.org, DNS:wiktionary.org, DNS:wmfusercontent.org, DNS:wikipedia.orgX509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client AuthenticationX509v3 Subject Key Identifier: 28:2A:26:2A:57:8B:3B:CE:B4:D6:AB:54:EF:D7:38:21:2C:49:5C:36X509v3 Authority Key Identifier: keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7CSignature Algorithm: sha256WithRSAEncryption8b:c3:ed:d1:9d:39:6f:af:40:72:bd:1e:18:5e:30:54:23:35:...

4 证书长度

不同的签名加密方式,证书长度不一样,RSA1024的证书差不多1K,2048就要2K左右,ECC 256的大概六七百个字节等等。

证书允许扩展字段,所以有可能长度比较长,根据扩展信息的增加,证书大小都会变化。

数字证书X509格式标准简介相关推荐

  1. openssl数字证书常见格式与协议介绍

    原文地址:http://blog.csdn.net/anxuegang/article/details/6157927 证书主要的文件类型和协议有: PEM.DER.PFX.JKS.KDB.CER.K ...

  2. 数字证书 X509详解 python解析SSL证书

    数字证书 ​ 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证.它是由一个由权威机构-----C ...

  3. 数字证书常见格式整理

    数字证书常见标准 符合PKI ITU-T X509标准,传统标准(.DER .PEM .CER .CRT) 符合PKCS#7 加密消息语法标准(.P7B .P7C .SPC .P7R) 符合PKCS# ...

  4. X509数字证书学习

    文章目录 1 背景 2 介绍 3 X509证书 3.1 证书组成结构 3.2 证书编码格式和扩展名 3.2.1 编码格式 3.2.2 扩展名 4 浏览器证书导出(示例) 4.1 查看证书详细信息 4. ...

  5. SSL,HTTPS,数字证书 是什么?

    一.SSL协议简介 SSL是Secure Socket Layer的缩写,中文名为安全套接层协议层.使用该协议后,您提交的所有数据会首先加密后,再提交到网易邮箱,从而可以有效防止黑客盗取您的用户名.密 ...

  6. 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)

    引言 数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件.为现实网络安全化标准如今大部分的 B2B.B2C.P2P.O2O 等商业网站含有重要企业资料个人资料的信息资信网站 ...

  7. 数字证书——密码学笔记(六)

    一.数字证书 数字证书可用于:发送安全电子邮件.访问安全站点.网上证券.网上招标采购.网上签约.网上办公.网上缴费.网上税务等网上安全电子事务处理和安全电子交易活动. 数字证书的格式一般采用X.509 ...

  8. 网络安全技术——数字证书技术原理

    点击上方"蓝字"关注我们吧 在上节<网络安全技术--加密技术.数字签名技术>中研究了数据通信中的加密和签名技术,在非对称加密体系中,A用户拿到B用户的公钥后便可以用这个 ...

  9. 数字证书与实现双向SSL认证

    数字证书与实现双向SSL认证一:数字证书 什么是证书? 既然叫证书,肯定是用来证明什么东西的,比如身份,学历,能力等级.数字证书简单理解就是证明你在互联网中的身份.证书一般都需要有一个权威颁发机构,而 ...

最新文章

  1. android 底部弹框 BottomSheetDialog 的使用
  2. 服务器架设笔记——多模块和全局数据
  3. 第十四章 架构师领导艺术(待续)
  4. 使用VC 2010制作和使用静态库
  5. 由铁路订票系统联想到的
  6. 一文快速理解23种经典设计模式
  7. 机器学习:matlab实现异常检测
  8. 获取GooglePlay下载来源广告数据统计接入
  9. 数据爬虫—全国一般纳税人企业数据采集
  10. orge,Nebula与klayGE对比
  11. jquery的插件有哪些
  12. 复旦计算机系吴昊,数学科学学院候选好导师访谈——吴昊老师
  13. html + css 面试
  14. 使用NFC tool工具将加密门禁卡写入小米手环步骤详解
  15. python培训 马哥 黄哥
  16. 钟汉良日记:网络也是江湖,有恩怨情仇有利益纠葛
  17. 题目:输入某年某月某日,判断当日是星期几? 提示:1900年1月1日为星期一
  18. CSS 中文字号、磅和像素对照关系
  19. 计算机组成原理 基础知识
  20. mac电脑常用开发软件

热门文章

  1. 域名系统(DNS)反向查询
  2. 射影几何笔记4:公理和证明
  3. 数论[计算机数学专题(5)]
  4. 【前沿解读】斯坦福研究员论文-以太坊可逆交易标准ERC20/721R的机制、创新与局限
  5. Substrate框架:平行链及跨链技术简析 结合ETH和IPFS能否成为第一跨链系统?
  6. 【MM32F5270开发板试用】播放TF卡WAV格式音乐,I2S驱动CS4344
  7. 传统商城系统的痛点分析
  8. TextView设置MaxLength
  9. percona toolkit 简介
  10. SYN攻击原理以及防范技术