大家好,欢迎来到IT知识分享网。
先解释一些概念:
Certification authority (CA):被信任的证书颁发机构,负责创建公钥证书和提供数字签名。
CA certificate: 一个CA的公钥证书,可以是自己发给自己的,也可以来自别的CA。
public-key infrastructure (PKI):公钥体系
subscriber 证书订阅人,向证书颁发机构申请证书
公钥证书分为两大类:
- CA certificates:证书颁发机构的自身证书,通常是由上一级单位发放
- end-entity public-key certificates:普通用户证书
CA 权威公钥证书分为三种类型:
- Self-issued certificate:自发放证书,颁发证书的CA和被颁发者是同一个CA;
- Self-signed certificate:自签名证书,是一种特殊的自发放证书,此证书签名用的私钥是和证书里面的公钥是配对的。
- Cross-certificate:颁发证书的CA和被颁发者是不同的CA;
注意:CA证书里面应该把 basicConstraints 扩展项的cA 字段设置为TRUE
CA权威机构之间关系:
证书的信任路径:
Relying party 是使用证书的用户(certificate user),它验证由 CA 颁发给 subscriber的证书是否合法。
公钥证书或数字证书是由认证机构(CA: Certificate Authority)颁发的,使用者需要对证书进行验证,如果证书的格式千差万别那就不方便了。于是,人们制定了证书的标准规范,其中使用最广泛的是由 ITU(International Telecommunication Union)定义,经PKIX(Public-Key Infrastructure standards for X.509)工作组改造过的X.509规范(RFC5280)
PKI 主要由证书订阅人(申请并提供证书的服务端)、证书登记注册机构(RA: Registration Authority)、证书认证颁发机构(CA: Certification Authority)、证书使用者(请求验证证书的客户端)等部分构成,
证书的订阅:由订阅人subscriber发起订阅请求,CA权威机构负责处理和发放证书。发放的公钥证书需要包含订阅人公钥、订阅人身份信息、证书颁发者数字签名等相关信息的数字文件,
证书的吊销:
当证书申请者出现私钥泄露或者不再使用证书等情况时,就需要将证书作废。要作废数字证书需要符合相应的标准或流程,目前主要有两种证书吊销标准:
因为根认证机构数量有限,不可能所有的服务器都直接找根认证机构申请证书。为了提高证书的申请与管理效率,证书的申请认证是分层级的,从根证书到申请机构可能有多个中间层级的认证机构,这些中间层级的认证机构都需要有上一级的认证机构数字签名才是可信的,最终一直到根认证机构签名。我们使用的操作系统或浏览器中可能只有根认证机构的公钥,从根认证机构的证书逐层往下验证到服务器的证书颁发机构。很显然,证书链越短,进行身份认证需要传输的数据量越少,身份认证效率自然越高。
在 root CA offline 的前提下,为使证书 issuance 可扩展(例如,使自动化成为可能),root private key 只在很少情况下使用,
用来签发几个intermediate certificates。然后 intermediate CA(也称为 subordinate CAs)用相应的 intermediate private keys 来签发 leaf certificates to subscribers。
这种 leaf、intermediate、root 组成的证书捆绑(bundle)机制,形成了一个证书链(certificate chain)。
leaf 由 intermediate 签发,
intermediate 又由 root 签发,
root 自签名(signs itself)。
技术上来说,上面都是简化的例子,你可以创建更长的 chain 和更复杂的图(例如,cross-certification[48])。但不推荐这么做,因为复杂性很快会失控。在任何情况下,end entity certificates 都是叶子节点,这也是称为叶子证书(leaf certificate)的原因。
二 X509证书的ASN.1的描述
X509的公钥证书的机构是通过ASN.1来描述的,可以通过DER编码生成二进制,然后在经过Base64的编码生成文本文件保存。一般是PEM后缀的文件。如下例子中的PEM文件内容:
—–BEGIN CERTIFICATE—–MIIBwzCCAWqgAwIBAgIRAIi5QRl9kz1wb+SUP20gB1kwCgYIKoZIzj0EAwIwGzEZMBcGA1UEAxMQTDVkIFRlc3QgUm9vdCBDQTAeFw0xODExMDYyMjA0MDNaFw0yODExBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRc+LHppFk8sflIpm/XKpbNMwx3SDAfBgNVHSMEGDAWgBTirEpzC7/gexnnz7ozjWKd71lz5DAKBggqhkjOPDAgNHADBEAiAejDEfua7dud78lxWe9eYxYcM93mlUMFIzbWlOJzg+rgIgcdtU9wIKmn5qFU3iOiRP5VyLNmrsQD3/ItjUN1f1ouY=
—–END CERTIFICATE—–
数字证书 X509详解 && python解析SSL证书_大鹏爱分享的博客-CSDN博客_python x509
成员 | 格式 |
---|---|
版本号 | INTEGER |
序列号 | INTEGER |
签名算法 | OBJECT |
颁发者 | SET |
有效期 | UTC_TIME |
主体 | SET |
主体公钥 | BIT_STRING |
主体公钥算法 | OBJECT |
签名值 | BIT_STRING |
公钥证书的ASN.1的结构如下:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate, — 证书主体
signatureAlgorithm AlgorithmIdentifier, — 证书签名算法标识
signatureValue BIT STRING –证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值;具体取值取决于采用的算法和被签名的内容。
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1, — 证书版本号
serialNumber CertificateSerialNumber, — 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书
signature AlgorithmIdentifier, –证书签名算法标识
issuer Name, –证书发行者名称
validity Validity, –证书有效期
subject Name, –证书主体名称
subjectPublicKeyInfo SubjectPublicKeyInfo,–证书公钥
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
— 证书发行者ID(可选),只在证书版本2、3中才有
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
— 证书主体ID(可选),只在证书版本2、3中才有
extensions [3] EXPLICIT Extensions OPTIONAL
— 证书扩展段(可选),只在证书版本3中才有
}
Version ::= INTEGER { v1(0), v2(1), v3(2) }
CertificateSerialNumber ::= INTEGER
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
parameters:
Dss-Parms ::= SEQUENCE { — parameters ,DSA(DSS)算法时的parameters,
RSA算法没有此参数
p INTEGER,
q INTEGER,
g INTEGER }
signatureValue:
Dss-Sig-Value ::= SEQUENCE { — sha1DSA签名算法时,签名值
r INTEGER,
RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET OF AttributeTypeAndValue
AttributeTypeAndValue ::= SEQUENCE {
type AttributeType,
value AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeType
Validity ::= SEQUENCE {
notBefore Time, — 证书有效期起始时间
notAfter Time — 证书有效期终止时间
}
Time ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier, — 公钥算法
subjectPublicKey BIT STRING — 公钥值
}
subjectPublicKey:
RSAPublicKey ::= SEQUENCE { — RSA算法时的公钥值
modulus INTEGER, — n
publicExponent INTEGER — e — }
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING }
具体wireshark里面的例子:
Extension Id: 2.5.29.15 (id-ce-keyUsage) 公钥的用途说明:
critical: True
Padding: 0
KeyUsage: 38
0… …. = digitalSignature: False
.0.. …. = contentCommitment: False
..1. …. = keyEncipherment: True
…1 …. = dataEncipherment: True
…. 1… = keyAgreement: True
…. .0.. = keyCertSign: False
…. ..0. = cRLSign: False
…. …0 = encipherOnly: False
0… …. = decipherOnly: False
algorithmIdentifier (iso.2.156.10197.1.501)
Padding: 0
encrypted: (此处是证书的签名值,应该是由发证书的CA机构的私钥签名的)b5ee4b3756f901c9fdd551f17601a6a88c14803df2c2ea7fedfe
其中:Keyusage说明如下:
digitalSignature: 由上层应用来决定是否使用。
contentCommitment:由上层应用来决定是否使用。
keyEncipherment: 用于在密钥传输过程中的对密钥的加密;
dataEncipherment:用于数据面的加密
keyAgreement:在key协商中当作公钥来使用
keyCertSign:用来当作公钥去验证证书中的颁发机构的签名
cRLSign:用于在证书召回时候的验证签名
encipherOnly:在key协商中当作公钥来使用,仅用于加密
decipherOnly:在key协商中当作公钥来使用,仅用于解密
RDN的解释:
relative distinguished names,用来提供能区分证书颁发者(或证书订阅者)的信息,比如证书颁发者的办公地点/国家/城市/组织名字/域名等。
type | description | OID |
---|---|---|
CN | commonName | 2.5.4.3 |
SN | surname | 2.5.4.4 |
SERIALNUMBER | serialNumber | 2.5.4.5 |
C | countryName | 2.5.4.6 |
L | localityName | 2.5.4.7 |
ST or S | stateOrProvinceName | 2.5.4.8 |
STREET | streetAddress | 2.5.4.9 |
O | organizationName | 2.5.4.10 |
OU | organizationalUnit | 2.5.4.11 |
T or TITLE | title | 2.5.4.12 |
G or GN | givenName | 2.5.4.42 |
E | emailAddress (deprecated) | 1.2.840..1.9.1 |
UID | userID | 0.9.2342..100.1.1 |
DC | domainComponent | 0.9.2342..100.1.25 |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122632.html