x509,pkcs#7實戰解析

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
}

擴展不知道用來幹啥

X509長什麼樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章