X509
X509的ASN.1定義
[Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING
}
首先,一張x509證書最頂層包含三個東西。
- TBSCertificate是X509裏最重要的主體,也就是證書內容。
- AlgorithmIdentifier記錄的是該證書被CA所籤的算法。
- BIT STRING記錄的是CA籤該證書的簽名。
TBSCertificate ::= 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 v2or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,-- If present, version must be v2or v3
extensions [3] EXPLICIT Extensions OPTIONAL-- If present, version must be v3
}
那TBSCertificate中包含了以上的字段:
- Version:證書版本號
- CertificateSerialNumber:證書序列號
- AlgorithmIdentifier:證書中籤名的算法
- issuer Name:發佈者的名字,即簽名者
- validity Validity:證書的有效期,包含起始時間和過期時間
- subject Name:主體名字,即被簽名者
- subjectPublicKeyInfo SubjectPublicKeyInfo:簽名算法的公鑰信息
- issuerUniqueID: 發佈者的唯一序列號
- subjectUniqueID:被籤者的唯一序號
- extensions:簽名擴展內容,不知道用來幹啥
Version ::= INTEGER {
v1(0), v2(1), v3(2)
}
版本號字段就三種選項,V1, V2, V3
CertificateSerialNumber ::= INTEGER
版本序列號是一個整形變量
Validity ::= SEQUENCE {
notBefore CertificateValidityDate,
notAfter CertificateValidityDate
}
CertificateValidityDate ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime
}
證書有效時間包含證書的起始時間notBefore 和證書的過期時間notAfter
UniqueIdentifier ::= BIT STRING
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey
}
證書公鑰信息包含兩部分
- AlgorithmIdentifier簽名算法
- 簽名內容本身subjectPublicKey
Extensions ::= SEQUENCE OF Extension
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
}
擴展不知道用來幹啥