PKI(公鑰基礎(chǔ)設(shè)施Public KeyInfrastructure)
是網(wǎng)絡(luò)信息安全的一項(xiàng)關(guān)鍵技術(shù)肥败,廣泛用于高強(qiáng)度趾浅、高級(jí)別的信息保護(hù)、身份鑒別馒稍、安全通訊皿哨、行為鑒定等安全領(lǐng)域。
X.500
是ITU-T關(guān)于目錄服務(wù)的一系列規(guī)范纽谒、協(xié)議证膨,用于解決國際電話、電報(bào)互聯(lián)互通鼓黔、郵件發(fā)送時(shí)的人員查找央勒、身份認(rèn)證等問題。
-
包括了多個(gè)子集:X.501澳化、X.509
X.509是一種非常通用的證書格式崔步。所有的證書都符合ITU-T X.509國際標(biāo)準(zhǔn),因此(理論上)為一種應(yīng)用創(chuàng)建的證書可以用于任何其他符合X.509標(biāo)準(zhǔn)的應(yīng)用缎谷。
在一份證書中井濒,必須證明公鑰及其所有者的姓名是一致的。對X.509證書來說列林,認(rèn)證者總是CA或由CA指定的人瑞你,一份X.509證書是一些標(biāo)準(zhǔn)字段的集合,這些字段包含有關(guān)用戶或設(shè)備及其相應(yīng)公鑰的信息希痴。X.509標(biāo)準(zhǔn)定義了證書中應(yīng)該包含哪些信息者甲,并描述了這些信息是如何編碼的(即數(shù)據(jù)格式)
詳細(xì)特征
所有的X.509證書包含以下數(shù)據(jù):
- 1、X.509版本號(hào)(version):指出該證書使用了哪種版本的X.509標(biāo)準(zhǔn)砌创,版本號(hào)會(huì)影響證書中的一些特定信息虏缸。目前的版本是3。
- 2嫩实、證書的序列號(hào)(serialNumber):由CA給予每一個(gè)證書分配的唯一的數(shù)字型編號(hào)寇钉,當(dāng)證書被取消時(shí),實(shí)際上是將此證書序列號(hào)放入由CA簽發(fā)的CRL(Certificate Revocation List證書作廢表舶赔,或證書黑名單表)中。這也是序列號(hào)唯一的原因谦秧。
- 3竟纳、認(rèn)證機(jī)構(gòu)(Issuer Name):證書發(fā)布者撵溃,是簽發(fā)該證書的實(shí)體唯一的CA的X.500名字。使用該證書意味著信任簽發(fā)證書的實(shí)體锥累。(注意:在某些情況下缘挑,比如根或頂級(jí)CA證書,發(fā)布者自己簽發(fā)證書)
- 4桶略、證書的有效期(validity):證書起始日期和時(shí)間以及終止日期和時(shí)間语淘;指明證書在這兩個(gè)時(shí)間內(nèi)有效。
- 5际歼、主題信息(subject):證書持有人唯一的標(biāo)識(shí)符(或稱DN-distinguished name)這個(gè)名字在 Internet上應(yīng)該是唯一的惶翻。DN由許多部分組成,看起來象這樣:
CN=Bob Allen,//公用名稱
OU=Total Network Security Division//組織單位
O=Network Associates, Inc.//組織
C=US//國家
這些信息指出該科目的通用名鹅心、組織單位吕粗、組織和國家或者證書持有人的姓名、服務(wù)處所等信息旭愧。
- 6颅筋、證書持有人的公鑰(subjectPublicKeyInfo):包括證書持有人的公鑰、算法(指明密鑰屬于哪種密碼系統(tǒng))的標(biāo)識(shí)符和其他相關(guān)的密鑰參數(shù)输枯。
- 7议泵、Issuer Unique Identifier (optional):發(fā)行人唯一標(biāo)志
- 8、Subject Unique Identifier (optional):主題唯一標(biāo)志
- 9桃熄、簽名算法標(biāo)識(shí)符(Certificate Signature Algorithm):用來指定CA簽署證書時(shí)所使用的簽名算法先口。算法標(biāo)識(shí)符用來指定CA簽發(fā)證書時(shí)所使用的公開密鑰算法和HASH算法。
- 10蜻拨、發(fā)布者的數(shù)字簽名(Certificate Signature):這是使用發(fā)布者私鑰生成的簽名池充,以確保這個(gè)證書在發(fā)放之后沒有被撰改過。
證書擴(kuò)展項(xiàng)
- 授權(quán)密鑰標(biāo)識(shí)符:提供識(shí)別對使用私有密鑰在一張證書上簽名相對應(yīng)的公開密鑰的手段
- 主題密鑰標(biāo)識(shí)符:提供識(shí)別包含特定公開密鑰的證書的的手段
- 密鑰使用:證書密鑰的目的(加密缎讼、簽名收夸、簽名證書)
- 私有密鑰使用周期:不建議使用
- 證書策略:包含由對象標(biāo)識(shí)符和可選的限定語組成的一個(gè)或多個(gè)策略信息條目
- CSP Pointer 包含指向CA發(fā)布的證書實(shí)施聲明指針,URL格式
- User notice將展示依靠部分
- 策略映射
- 主體可替換名稱
- 發(fā)行者可替換名稱
- 基本約束:識(shí)別出證書的主體
- 策略約束
- 擴(kuò)大密鑰的使用領(lǐng)域
- CRL發(fā)布點(diǎn)
擴(kuò)展文件
.cer, .crt - 通常被用于二進(jìn)制的DER文件格式(同于.der), 不過也被用于Base64編碼的文件 (例如 .pem).
.P7B - 同于 .p7c
.P7C - PKCS#7證書格式血崭,僅僅包含證書和CRL列表信息卧惜,沒有私鑰。
.PFX - 同于 .p12
.P12 -PKCS#12文件, 包含證書(公鑰)和私鑰(受密碼保護(hù))夹纫,已經(jīng)完整的證書鏈信咽瓷。
PKCS#7 是一種將數(shù)據(jù)加密和簽名(正式名稱是“enveloping”)的技術(shù)標(biāo)準(zhǔn)。 它描述數(shù)字證書的語法和其他加密消息——尤其是舰讹,數(shù)據(jù)加密和數(shù)字簽名的方法茅姜,也包含了算法。但PKCS#7不包含私鑰信息月匣。
PKCS#12 定義了一個(gè)用于保存私鑰和對應(yīng)公鑰證書的文件格式钻洒,并由對稱密鑰加密保護(hù)奋姿。PKCS#12通常采用PFX,P12作為文件擴(kuò)展名。 PKCS#12文件可以存放多個(gè)證書素标,并由密碼保護(hù)称诗,通常用于WINDOWS IIS,也能夠被當(dāng)作Java Keysotre文件使用头遭,用于Tomcat寓免,Resign,Weblogic计维,Jboss等袜香,不能被用于Apache.
編碼 (也用于擴(kuò)展名)
- .DER = 擴(kuò)展名DER用于二進(jìn)制DER編碼的證書。這些證書也可以用CER或者CRT作為擴(kuò)展名享潜。比較合適的說法是“我有一個(gè)DER編碼的證書”困鸥,而不是“我有一個(gè)DER證書”。
- .PEM = 擴(kuò)展名PEM用于ASCII(Base64)編碼的各種X.509 v3 證書剑按。文件開始由一行"—– BEGIN …“開始疾就。
常用的擴(kuò)展名
- .CRT = 擴(kuò)展名CRT用于證書。證書可以是DER編碼艺蝴,也可以是PEM編碼猬腰。擴(kuò)展名CER和CRT幾乎是同義詞。這種情況在各種unix/linux系統(tǒng)中很常見猜敢。
- CER = CRT證書的微軟型式姑荷。可以用微軟的工具把CRT文件轉(zhuǎn)換為CER文件(CRT和CER必須是相同編碼的缩擂,DER或者PEM)鼠冕。擴(kuò)展名為CER的文件可以被IE識(shí)別并作為命令調(diào)用微軟的cryptoAPI(具體點(diǎn)就是rudll32.exe cryptext.dll, CyrptExtOpenCER),進(jìn)而彈出一個(gè)對話框來導(dǎo)入并/或查看證書內(nèi)容胯盯。
- .KEY = 擴(kuò)展名KEY用于PCSK#8的公鑰和私鑰懈费。這些公鑰和私鑰可以是DER編碼或者PEM編碼。
CRT文件和CER文件只有在使用相同編碼的時(shí)候才可以安全地相互替代博脑。
總結(jié)
ITU-T制定X.509 V1規(guī)范
IETF 制定PKI的大部分協(xié)議
RSA公司制定PKCS系列標(biāo)準(zhǔn)
OSCCA制定國密相關(guān)標(biāo)準(zhǔn)
CERTICOM憎乙、SECG定制ECC相關(guān)標(biāo)準(zhǔn)。
X.500系列
- X.500是關(guān)于目錄服務(wù)一系列標(biāo)準(zhǔn)
- X.501是關(guān)于目錄服務(wù)數(shù)據(jù)模型的定義
- X.509是關(guān)于目錄服務(wù)認(rèn)證框架的定義
- X.520是數(shù)據(jù)模型中屬性定義
- X.521是數(shù)據(jù)模型中對象定義
- ASN.1是協(xié)議定義語言
- BER叉趣、DER泞边、CER是編碼格式
- X.509是證書協(xié)議
- BASD64、PEM是另一層次的編碼格式
PKCS系列
- PKCS#1定義了RSA公私鑰格式及RSA運(yùn)算過程疗杉、填充格式阵谚。
- PKCS#5定義了基于口令的私鑰保護(hù)方式
- PKCS#7定義了數(shù)字封裝格式,可以用于證書鏈、簽名梢什、數(shù)字信封闻牡。
- PKCS#8定義了更通用的私鑰保護(hù)格式
- PKCS#10定義了證書請求格式
- PKCS#11定義了加密介質(zhì)接口。
- PKCS#12定義了帶私鑰的證書格式绳矩。
編碼格式
- BER: Basic Encoding Rules
- 基本編碼格式。
- 對相同的數(shù)據(jù)玖翅,可以有多種編碼方式翼馆,比如長字節(jié)型、短字節(jié)型金度、不定長型等应媚。
- DER: Distinguished Encoding Rules
- 是BER的一個(gè)子集,為更嚴(yán)格的一個(gè)變種版本猜极。
- 和BER相比中姜,DER的編碼格式只有固定一種。比如BER的Boolean變量編碼值是可以1~255的任意值跟伏,而DER只能是1丢胚。
- DER使用在有數(shù)據(jù)簽名的場合,以保證數(shù)據(jù)原文編碼后可以保持一致受扳。
- X.509證書都是DER編碼携龟。
- CER: Canonical Encoding Rules
- CER和DER一樣,都是BER的限定編碼規(guī)則的子集勘高。
- CER和DER不同在于它是不定長編碼峡蟋,可以用于大數(shù)據(jù)塊的封裝。
- PKCS#7數(shù)字信封可以用DER編碼华望,也可以用CER編碼蕊蝗。
證書結(jié)構(gòu)
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate, //證書內(nèi)容
signatureAlgorithm AlgorithmIdentifier,// 簽名算法
signatureValue BIT STRING//簽名值 對tbsCer進(jìn)行DER編碼
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,//發(fā)行者
validity Validity,//有效期
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3