rfc2459

組織:中國互動出版網(http://www.china-pub.com/
RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm
E-mail:[email protected]
譯者:張海斌(netdebug    [email protected] )
譯文發佈時間:2001-7-14
版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用於非商業用途自由轉載,但必須
保留本文檔的翻譯及版權信息。


Network Working Group                                         R. Housley
Request for Comments: 2459                                        SPYRUS
Category: Standards Track                                        W. Ford
                                                                VeriSign
                                                                 W. Polk
                                                                    NIST
                                                                 D. Solo
                                                                Citicorp
                                                            January 1999


Internet X.509 公鑰基礎設施
證書和CRL簡介
(Internet X.509 Public Key Infrastructure
Certificate and CRL Profile)


備忘錄現狀
這份文檔需要Internet社區進一步討論和改進的Internet試驗標準協議。關於這份文檔
的標準化情況和狀態請參閱"Internet官方協議標準"(STD1)組織的當前版。這份備忘錄分
發不受限制。

版權聲明

   Copyright (C) The Internet Society (1999)。版權所有。

 

摘要
這份備忘錄描述了應用在Internet中的X.509 v3證書和X.509 v2CRL(證書撤銷列表),
以接近的綜述和模型引入介紹。X.509 v3證書格式隨着關於Internet名字(例如IP地址)的
格式和語義學附加信息被描繪。標準證書擴展被描繪和新的Internet-specific(特有擴展)被
定義。一套證書擴展被指定。同時X.509 v2 CRL格式被描繪和一套擴展被定義。一組X.509
證書路徑確認算法被描述。X.509證書中通用Internet公開密鑰密碼算法(即RSA,DSA和
Diffie-Hellman)的公開密鑰和數字簽名的格式在補充信息中提供描述。ASN.1模塊和例子
在附錄中提供。

約定:
   本文中的關鍵詞"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",   
"SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", 以及"OPTIONAL"與
RFC 2119【3】中的描述的意義是相同的。

   請把對本文的意見郵寄給[email protected]郵遞清單。

譯者的話
 閱讀RFC2459的讀者應該首先了解一下有關網絡安全方面的知識,例如密碼學知識(加
密、解密、簽名、驗證以及安全協議等),RFC2459文檔中出現的所有數據結構均採用ASN1
語法描述以及編碼與解碼(具體的實現也是這樣),所以讀者最好對ASN1語言比較熟悉。
RFC2459是RFC分類中的試驗性文檔,描述了Internet X.509公鑰基礎設施證書和CRL方
面的知識,文檔涉及的內容很多(文檔中很多內容是建議性的),具體的細節論述的比較少,
感興趣的讀者可以以此文檔爲基礎指導性地去了解、學習、研究其相關內容的細節,因爲這
篇文檔敘述的內容比較全面。
 譯者在翻譯這篇文檔時儘量保留原文的原意,採用直譯的方式,對晦澀難懂或者有指導
性的閱讀其他內容的地方均有譯者的註釋,希望對讀者有所幫助。由於翻譯的時間較短以及
譯者水平有限,譯文中一定會有很多不當及疏漏甚至錯誤的地方,希望讀者來信賜教,謝謝。


               張海斌

               2001-7-9

目 錄
1介紹 5
2要求和假定 6
2.1通訊和拓撲 6
2.2可以接受的標準(Acceptability Criteria) 6
2.3用戶期望 7
2.4行政管理人員期望 7
3 概覽 7
3.1 X.509 v3證書 8
3.2證書路徑和信任 9
3.3撤銷 10
3.4操作協議 11
3.5管理協議 11
4證書和證書擴展項概要 12
4.1基本證書字段 13
4.1.1證書字段 14
4.1.1.1 tbsCertificate 14
4.1.1.2 signatureAlgorithm 14
4.1.1.3 signatureValue 15
4.1.2 TBSCertificate 15
4.1.2.1版本 15
4.1.2.2序列號 15
4.1.2.3簽名 16
4.1.2.4發行者 16
4.1.2.5有效性 19
4.1.2.5.1 UTCTime 19
4.1.2.5.2 GeneralizedTime 19
4.1.2.6主題 20
4.1.2.7主題公開密鑰信息 20
4.1.2.8唯一標識符 21
4.1.2.9擴展 21
4.2標準證書擴展 21
4.2.1標準擴展 22
4.2.1.1權威密鑰標識符 22
4.2.1.2主題密鑰標識符 23
4.2.1.3 密鑰使用 24
4.2.1.4私有密鑰使用週期 25
4.2.1.5證書策略 26
4.2.1.6策略映射 28
4.2.1.7主題可替換名字 28
4.2.1.8發行者可替換名字 30
4.2.1.9主題目錄服務系統屬性 30
4.2.1.10基本約束 31
4.2.1.11名字約束 31
4.2.1.12策略約束 33
4.2.1.13擴大密鑰使用領域 33
4.2.1.14 CRL發佈點 35
4.2.2私有Internet擴展 35
4.2.2.1權威信息存取 36
5 CRL和CRL擴展簡介 37
5.1 CRL字段 37
5.1.1 CertificateList字段 38
5.1.1.1 tbsCertList 38
5.1.1.2 signatureAlgorithm 39
5.1.1.3 signatureValue 39
5.1.2證書列表" To Be Signed" 39
5.1.2.1版本 39
5.1.2.2簽名 40
5.1.2.3發行者名字 40
5.1.2.4更新 40
5.1.2.5下次更新 40
5.1.2.6撤銷證書 41
5.1.2.7擴展 41
5.2 CRL擴展 41
5.2.1權威密鑰標識符 42
5.2.2發行者可替換名字 42
5.2.3 CRL Number 42
5.2.4 Delta CRL標識符 43
5.2.5發行發佈點 43
5.3 CRL入口擴展 44
5.3.1理由代碼 44
5.3.2保持指示代碼 45
5.3.3無效日期 45
5.3.4證書發行者 46
6證書路徑批准 46
6.1基本路徑批准 47
6.2擴展路徑批准 50
7算法技術支持 50
7.1個單向哈希函數 50
7.1.1 MD2單向哈希函數 51
7.1.2 MD5單向哈希函數 51
7.1.3 SHA1單向哈希函數 51
7.2簽名算法 51
7.2.1 RSA簽名算法 52
7.2.2 DSA簽名算法 53
7.3主題公開密鑰算法 53
7.3.1 RSA密鑰 54
7.3.2 Diffie-Hellman密鑰交換密鑰 54
7.3.3 DSA簽名密鑰 56
8參考資料 57
9知識產權 59
10安全考慮 59
附錄A. PsuedoASN.1結構和OIDs 61
A.1 明示目標模塊(Explicitly Tagged Module),1988句法 61
A.2 隱式目標模塊(Implicitly Tagged Module), 1988 句法 76
附錄 B. 1993 ASN.1 結構 and OIDs 83
B.1 明示目標模塊(Explicitly Tagged Module), 1993 句法 83
B.2 隱示目標模塊(Implicitly Tagged Module), 1993 句法 101
附錄 C. ASN.1 註解 109
附錄 D. 示例 110
D.1 證書 111
D.2 證書 114
D.3 RSA算法終端證書 117
D.4 證書撤銷列表 121
附錄 E. Authors' Addresses 122
附錄F.完整版權聲明 123
1介紹

    本文作爲Internet中X.509公開密鑰基礎設施(PKI)標準家族的一部分,同時也是獨
立的文件;另外這套標準的執行可能繼續同其他部分分開。

    本文介紹了應用於Internet PKI證書和證書撤銷列表的格式和語義學。描述了在Internet
環境中證書路徑的處理,提供密碼學算法的編碼規則。最後,在附錄中以ASN.1語法形式
描述了本文出現的所有數據結構定義。

   本文描繪了能激起完善本文檔的激情和影響它的在部分2中(範圍)的假定。第3段引
見一個結構的模塊以及描繪它們和前一IETF和ISO/IECITU標準的關係。特別是本文IETF 
PEM描述和ISO/IEC ITU X.509文檔之間的關係。

   本文在部分4中介紹了X.509 v3證書;在部分5中介紹了X.509 v2證書撤銷列表(CRL)。
包括在Internet PKI中有效的ISO/IEC/ITU和ANSI擴展的定義。本文使用的是1988年定義
的摘要句法註釋1(ASN.1),而不是在1994年在ISO/IEC/ITU定義的語法標準。

   本文還在部分6中說明了路徑確認過程。這些過程基於在ISOIEC/ITU上的定義,但是
頒發假定一個或多個自我簽名受信任的CA證書,只需要得到同樣的結果,而不需要制定具
體的處理過程。

本文第7部分描繪公開密鑰內容和數字簽名的確認和編碼的過程。不需要任何特別的密
碼學算法,然而需要能識別出(這些)算法,這些算法能被識別出並可編碼。

    最後,四個附錄中提供了implementers(應用)幫助。附錄A包含所有的在本文說明以
內或者推薦的ASN.1結構。正如上面所說的,這些數據結構的描述應用1988的摘要語法注
釋1(ASN.1),而不是1994的句法。附錄B包含了同樣的信息,這些信息使用作爲更新的
toolsets(工具集)的implementers(應用)服務的1994 ASN.1註釋。但是,附錄A採取時
間次序以防衝突。附錄C包含關於在本文說明以內使用ASN.1註釋的不那麼熟悉特徵的筆
記。附錄D含有證書和CRL的例子。

2要求和假定

本文的目標是提供幫助,以方便在那些Internet社區內希望利用X.509技術申請X.509
證書的使用。這些應用包括WWW、電子郵件、用戶證明和Ipsec等。爲了減輕某些使用
X.509證書的障礙,本文定義了促進證書管理系統發展的輪廓;應用工具的發展;和按照可
由雙方共同制定的策略。

    爲了附加(額外)批准,保證或者操作上的要求符合專門的應用領域、或者環境的要求,
一些社區將需要補充、或許取代本文的(某些)描述。但是,爲了基本應用,那些經常用的
屬性和共用的代表被定義出來,以便應用開發者能得到必要知識,而不管證書或者證書撤銷
列表(CRL)的發行者。

    在信賴之前,一個證書用戶應該瀏覽證書策略,由證書權威機構(CA,以下統稱CA)
所產生的授權或者非拒絕服務,這些服務和一個特定證書中的公開密鑰聯繫起來。爲此目的,
這標準不定義合法捆綁的規則或者職責。

    當補充授權和屬性管理工具出現時,例如屬性證書,它適合限制在一張證書內的授權的
屬性證明。這些(其它的、輔助的)管理工具可以提供表達很多屬性授權的更適合方法。

2.1通訊和拓撲

使用證書的用戶將在關於他們的通訊拓撲環境中,特別是安全電子郵件的用戶的寬闊範
圍中操作。本文支持那些沒有高帶寬,實時IP連接或者高連接可用(high connection 
availability)的可能性用戶。此外,本文允許防火牆或者(其他)過濾通訊設備的存在。

    本文不假定X.500目錄服務系統的展開。本文不禁止X.500目錄服務系統的使用,但是
發佈證書和證書撤銷列表(CRLs)的(其他)另一手段可以被使用。

2.2可以接受的標準(Acceptability Criteria)

    Internet公開密鑰基礎設施(PKI)的目標是要滿足決定論(deterministic),自動化確認,   
認證,存取控制授權功能的需求。支持這些服務是通過包含在證書中的屬性,以及一些從屬
的控制信息,例如證書中策略數據和證書路徑約束。

2.3用戶期望

    Internet PKI的用戶是在證書中使用客戶軟件和主題名字的人們和過程。他們包括那些
使用電子郵件的讀者和作者,WWW瀏覽器客戶,WWW服務器和路由器中Ipsec的密鑰管
理。本文識別那些使用侷限性平臺和侷限於老於世故和注意的用戶自己。這個在極小用戶配
置責任(例如受信任的CA密鑰,規則),明確在證書中的平臺使用約束,證書路徑約束以
及自動的驗證有效性功能,使其保護用戶免受很多惡意行爲。

2.4行政管理人員期望
    和用戶期望一樣,Internet PKI是有結構地支持通常運作CAs的個體。爲行政管理人員
提供無邊際的選擇以減少CA行政管理人員微妙錯誤造成的寬廣損害結果的機會。同時,無
邊際的選擇造成處理和驗證由CA中心簽發證書的有效性軟件的複雜化。
3 概覽
    下面是按照PKIX標準本文說明的假定結構模範視圖。
       +---+
       | C |                       +------------+
       | e | <-------------------->| End entity |
       | r |       Operational     +------------+
       | t |       transactions          ^
       |   |      and management         |  Management
       | / |       transactions          |  transactions
       |   |                             |                PKI users
       | C |                             v
       | R |       -------------------+--+-----------+----------------
       | L |                          ^              ^
       |   |                          |              |  PKI management
       |   |                          v              |      entities
       | R |                       +------+          |
       | e | <---------------------| RA   | <---+    |
       | p |  Publish certificate  +------+     |    |
       | o |                                    |    |
       | s |                                    |    |
       | I |                                    v    v
       | t |                                +------------+
       | o | <------------------------------|     CA     |
       | r |   Publish certificate          +------------+
       | y |   Publish CRL                         ^
       |   |                                       |
       +---+                        Management     |
                                    transactions   |
                                                   v
                                               +------+
                                               |  CA  |
                                               +------+

圖1-PKI實體

   這個模型組成部分包括:
? 末端實體(end entity):PKI證書或者最終用戶證書主題系統的用戶;
? CA:證書授權中心;
? RA:證書登記中心,即一個可選的由CA委派的具有管理功能的代表系統;
? 存儲:一個系統或者收集的分配系統,存儲分配給末端實體的證書和CRLs以及服
務。

3.1 X.509 v3證書

    公開密鑰的用戶將是對結合私有密鑰被確定的遠程主體(人或者系統),這些實體將使
用加密或者簽名算法。信任是通過證書中公開密鑰的使用而得到,證書是綁定公開密鑰到主
題信息的數據結構。捆綁通過信任的CA數字簽名的證書,CA可以基於這樣的技術手段
(a.k.a.,posession的通過“挑戰反應”協議證明)斷言,或者有關一個按照主題斷言的私
有密鑰的描述上。每張證書在它的簽名內容中都有生命期。因爲每張證書的簽名和生命期在
證書使用的客戶端是獨立檢查的,證書能夠(可以)在不受信任的通訊和服務器系統中傳輸
也能在證書使用系統中非安全存儲。

    ITU TX.509(過去CCITT X.509)或者ISO/IEC ITU9594-8定義一標準證書格式[X.509],
首先在1988年作爲X.500目錄服務系統推薦的一部分出版。在1988標準中證書格式稱爲版
本1(v1)格式。當X.500在1993年修正的時候,在版本2(v2)格式中增加一額外的兩個
字段。這兩個字段可以使用來支持目錄服務系統的存取控制。

    在1993年出版的Internet隱私增強郵遞(PEM)RFCs,包含在X.509 v1證書[RFC 1422]
的基礎上公開密鑰基礎設施建立說明。在部署RFC 1422的嘗試中獲得經驗明確表示v1和
v2證書格式在幾個方面不足。最重要的是在PEM設計和應用經驗已證明需要攜帶更多的信
息。面對這些新的要求,ISO IEC/ITU和ANSI X9開發了X.509版本3(v3)證書格式。v3
格式在v2基礎上通過擴展添加額外的字段(擴展字段)。特殊的擴展字段類型可以在標準中
或者可以由任何組織或者社區定義和註冊。在1996年6月,基本v3格式的標準化被完成
[X.509]。

    同時ISO IEC/ITU和ANSI X9爲在v3擴展字段[X.509][X9.55]中使用發展標準範圍。這
些擴展能表達像附加主題確認信息、密鑰屬性信息、策略信息和證書路徑約束這樣的數據。

    然而ISO IEC/ITU和ANSI X9標準擴展在他們的應用中是非常寬廣的。爲了開發Internet
使用X.509 v3系統可由雙方共同操作的工具,指定一本文作爲使X.509 v3擴展適合Internet
的使用是必要的。它是本文的一個目標,指定一本文作爲Internet WWW,電子郵件和IPsec
應用。同時隨着附加要求環境的改變可以建設本文或者可以取代它。

3.2證書路徑和信任

    作爲安全服務的用戶通常需要公開密鑰如何獲得以及需要公開密鑰驗證證書有效性方
面的知識。如果公開密鑰用戶還沒有一份由CA簽發的證書的公開密鑰拷貝、CA的名字和
相關信息(例如有效期和名字約束),然後它可能需要一張附加證書得到公開密鑰。一般地
說,需要經過CA簽發的一系列多重證書公開密鑰所有者(末端實體)和其它CAs簽發的
零張或更多附加CAs證書。這樣的鏈被稱作證書路徑,因爲一個公開密鑰用戶僅用有限CA
的數目簽發。

    CAs可以有不同的方式被配置爲了公開密鑰用戶能查找證書路徑。在PEM,RFC 1422
定義了CAs的嚴格等級制度的結構。有三類型的PEM證明授權中心:

(a) Internet策略註冊授權中心(IPRA):這個授權中心,作爲PEM證書等級制度的
根(等級1),預兆Internet社會的權力。爲下一級發行證書,稱爲PCAs。所有
的證書路徑以IPRA開始。

(b) 策略授權中心(PCAs):每個PCA由IPRA等級制度中授權,PCAs在等級制定
中處於2級。PCA將建立和發表它關於確認用戶或者下屬認證權威(當局)策略
的聲明。不同PCAs目標是符合不同用戶的需要。例如,一PCA(一組織的PCA)
可以支持普遍電子郵件商業組織的需求,而另一PCA(一高保證(high-assurance )
PCA)可以有一更嚴格策略設計去符合合法捆綁的數字的簽名要求。

(c) 授權中心(CAs):CAs是在等級制度的第3級,可能也是在低水平方面。在第3
級被PCAs授權。CAs代表特殊組織, 例如特定組織的單位(例如區,組織,
部門)或者特定地理區域。

    此外RFC 1422還有一名字下級定義規則,其要求一CA僅能爲名字是CA本身從屬的
實體(在X.500命名樹中)頒發證書。使用PCA名字意味着把信任和一PEM證書路徑聯繫
起來。名字下級定義規則保證在PCA以下的CAs針對他們從屬能驗證的實體是敏感強迫的
(例如,一CA僅能驗證在那個特定組織名字樹中的實體)。證書用戶系統有能力用機器檢
查遵守名字下級定義的規則。

    RFC 1422使用X.509 v1證書格式。X.509 v1的侷限性要求徵收對清楚地限制結合的策
略或者限制證書的功用的幾個結構上。這些限制包含:

(a) 伴隨所有的從IPRA開始的證書路徑的純粹上下(top-down)等級制度;

(b) 限制一CA的主題名字下級命名規則;以及

(c) 使用需要個人PCAs的知識構建證書邏輯的驗證鏈條的概念。個人PCAs的知識
決定是否鏈條能被接受。

   經過RFC 1422的呼籲請求使用證書擴展,使用X.509 v3不需要限制使用CA結構的使
用。特別是,和證書政策相關聯的證書擴展排除PCAs的需要以及擴展約束排除下級名字定
義規則的需要。因此,本文支持更有彈性的證書結構,包含:

(a) 證書路徑可以在一個用戶的自己領域中CA的公開密鑰或者等級制度頂部的公開
密鑰開始。開始於一個用戶的自己領域中CA的公開密鑰確實有優勢。在一些環
境中,本地領域是最受信任的。

(b) 名字約束可以通過在證書中的名字約束擴展的明確被接收,但不作爲要求。

(c) 策略擴展和策略映射代替允許一定程度的自動化PCA概念。應用程序應該能決
定是否接受把證書路徑建立在代替PCAs的先驗知識的證書的目錄的基礎上。這
允許證書鏈條處理的自動化。

3.3撤銷

    當一張證書被頒發的時候,預期它是在它的整個有效期內使用。但是,各種各樣境況可
能導致一張證書在有效期滿期之前變得無效。這樣境況包含名字的改變,在主題和CA之間
聯合的改變(例如,一僱員結束在一個組織的工作),以及損害或者懷疑相應的私有密鑰。
在這樣情況下,CA需要撤銷證書。

    X.509定義一種證書撤銷的方法。這方法需要CA週期性地發佈稱爲證書撤銷列表
(CRL)的由CA簽名的數據結構。CRL是蓋了時間印章的經過CA簽名的自由發佈長期有
效的能識別出被撤銷證書的清單。每一個撤銷證書在CRL中通過證書序列號識別出。當一
證書使用系統使用證書(例如,驗證一個遠程用戶的數字簽名),那個系統不僅需要檢驗證
書籤名和有效性而且需要在最近發佈的CRL中檢驗證書序列號不在其中。"最近發佈"的意
思是可能隨着本地策略改變,但是它通常意味着最近一次發行的CRL。CA按照正常週期(例
如,每隔一小時,每天或者每週)發行一次新的CRL。也有可能隨着撤銷通知的到來而發
布下一個新的信息被加入到CRL。這個時刻可能出現在一正常CRL發佈週期之後不久,而
遠離下一次發佈的週期。

    這種撤銷算法的優勢是CRLs可以準確地和證書發佈同樣的做法經由不受信任的通訊
和服務器系統傳播。

    CRL撤銷算法的一個侷限是在不受信任的通訊和服務器限制CRL頒發週期撤銷的時間
粒度。例如,如果撤銷現在發佈,那撤銷將不能保證通知證書應用系統,直到下一個週期
CRL被髮布,這可能是一個小時、一天或者一星期,CA發行CRLs取決於頻率。

    和X.509 v3證書格式一樣,爲了便於(支持)從多重銷售商共同操作的工具,X.509 
v2CRL格式應該是爲Internet使用描述輪廓。這是(指定)本文的一個目標。但是,本文不
要求CAs發行CRLs。支持聯機(On-line)撤銷通知信息格式和協議可以在其它PKIX文本
中定義(中找到)。撤銷通知的聯機方法可以是適用於一些可選擇X.509 CRL的環境。聯機
撤銷檢查可以在相當大的程度上減少在(一份)撤銷報告之間和信息分配依賴雙方的潛伏。
CA一旦接受的報告是可靠的和有效的,任何聯機服務問題將正確反映出撤銷的證書批准影
響。但是,這些方法需要新的安全要求;當倉庫(repository)不應該受信任的同時,證書
生效者將指望聯機批准服務。

3.4操作協議

    操作協議要求將證書和CRLs (或者狀況信息)傳遞給客戶證書應用系統。爲各種各
樣的證書和CRL提供不同傳遞,包括基於LDAP、HTTP、FTP和X.500的發佈過程。支持
這些操作的草案在其它PKIX文本說明中被解釋。這些本文說明可以包含信息格式和支持全
部的上述操作的環境,包含適合MIME內容類型的定義或者參考過程的定義。

3.5管理協議

    管理協議需要支持在PKI用戶和管理實體之間聯機相互作用。例如,管理協議隨着相
關聯的密鑰對可以在CA和客戶系統之間被使用,或者在兩CAs之間的交叉認證。這套功
能應該潛在地按照管理協議支持,包含:

(a) 登記:這是一個過程,通過它用戶自身先於CA發佈證書給那個用戶知道CA在
哪 (直接或者通過RA)。

(b) 初始化:在一客戶系統能安全運作之前,把密鑰安裝在其適合儲藏密鑰的其它地
方是必要的。例如,客戶應該安全地在受信任的CA(s)的公開密鑰和另一被保
險人信息初始化有效證書路徑方面被使用。此外,一個客戶(典型)應該用它自
己的密鑰對初始化。

(c) 認證:這是個過程,其中CA爲一個用戶的公開密鑰發行一張證書,並且把那張
證書傳遞到用戶的客戶系統和/或在倉庫中張貼那張證書。

(d) 密鑰對恢復:作爲一個選項,用戶客戶密鑰(用於加密的用戶私有密鑰)可以被
CA或者密鑰備份系統備份。如果用戶需要恢復這些備份密鑰,(例如,當忘記密
碼或者失去密鑰鏈文件的時候)一個支持這樣恢復的聯機交流協議是所需要的。

(e) 密鑰對更新:所有的密鑰對需要定期更新。例如,替換新的密鑰對,發佈新的證
書。

(f) 撤銷請求:一個授權人通知CA要求將處於不正常處境的證書被撤銷。

(g) 交叉認證:兩CAs交換知識用於建立交叉認證證書。交叉認證證書是一張經過
一CA給另一個包括簽名密鑰的CA頒發的證書。

    注意聯機協議不是唯一的執行上述功能的方式,還有取得同樣結果的離線方法,這在本
文說明爲不託管聯機協議的使用。例如,當硬件設備(hardware tokens)使用的時候,很多
功能可以作爲物理設備傳遞的一部分而實現。此外,某些上述功能可以合併成爲一種協議交
換(protocol exchange)。特別的,兩個或者多個登記、初始化和證書功能可以合併爲一種協
議交換。

    PKIX系列的文本說明可以定義一套標準信息格式,支持上述功能的將來文本中說明。
如果那樣,表達這些在不同環境中信息(例如聯機、文件傳輸、e-mail和WWW)的協議將
在那些文本被描繪。

4證書和證書擴展項概要

    這部分提出公開密鑰證書概要,將幫助發展可由雙方共同操作和可再用PKI體系。這
部分基於X.509 v3證書標準格式和在[X.509]上定義標準證書擴展。ISO IEC/ITU文件使用
1993版本的ASN.1語法;然而本文使用1988 ASN.1語法,但是證書編碼和標準擴展是等同
的。這部分也定義支持Internet社區PKI體系的私有擴展。

    證書可以在寬廣的應用環境中使用,其覆蓋寬廣的可由雙方共同操作爲目標和更寬闊範
圍中的操作上的和認證要求的環境。本文的目標是爲寬廣的由雙方共同操作和有限特殊目的
要求的環境建立一條共用基線。特別是強調支持X.509 v3證書應用在非正式的Internet電子
郵件、IPsec和WWW上。

4.1基本證書字段

    X.509 v3證書基本語法如下。爲簽名計算,將證書按照ASN.1語法(DER) [X.208]
規則進行編碼傳遞。ASN.1 DER編碼是對每個元素對應的標籤、長度、值編碼系統。

   Certificate  ::=  SEQUENCE  {
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

 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 shall be v2 or v3
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version shall be v2 or v3
        extensions      [3]  EXPLICIT Extensions OPTIONAL
                             -- If present, version shall be v3
        }

   Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }

   CertificateSerialNumber  ::=  INTEGER

   Validity ::= SEQUENCE {
        notBefore      Time,
        notAfter       Time }

   Time ::= CHOICE {
        utcTime        UTCTime,
        generalTime    GeneralizedTime }

   UniqueIdentifier  ::=  BIT STRING

   SubjectPublicKeyInfo  ::=  SEQUENCE  {
        algorithm            AlgorithmIdentifier,
        subjectPublicKey     BIT STRING  }

   Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension

   Extension  ::=  SEQUENCE  {
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING  }

   下面幾個小段的項目定義了在Internet中使用的X.509 v3證書。

4.1.1證書字段

    證書是三個連串(SEQUENCE)的字段。這些字段將在下列部分中詳細描繪。

4.1.1.1 tbsCertificate

    這個字段含有主題和發行者的名字,主題聯繫起來的公開密鑰,有效期和其他相關信息。
字段在部分4.1.2中詳細被描述;字段tbscertificate也可以包括在部分4.2中描述的擴展項。

4.1.1.2 signatureAlgorithm

    signatureAlgorithm字段含有CA簽發證書使用的密碼學算法標識符。第7.2段列出支持
的簽名算法。

    由下列的ASN.1結構確定一個算法標識符:

   AlgorithmIdentifier  ::=  SEQUENCE  {
        algorithm               OBJECT IDENTIFIER,
        parameters              ANY DEFINED BY algorithm OPTIONAL  }

    算法標識符用於識別出密碼學的算法。算法標識符(OBJECT IDENTIFIER)成分識別
出(例如SHA 1的DSA)算法。可選參數字段的內容將根據識別出的算法改變。第7.2段
列出了本文支持的算法。

    這個字段必須(MUST)含有在序列tbsCertificate(見4.1.2.3)中籤名字段算法標識符
同樣的算法標識符。

4.1.1.3 signatureValue

    signatureValue字段包括對tbsCertificate的ASN.1 DER編碼的數字簽名。TbsCertificate
的ASN.1 DER編碼作爲簽名函數的輸入參數。這個簽名結果值然後作爲BIT STRING 類型
的ASN.1編碼,並且包括在證書的簽名字段中。這個過程在7.2段中針對每種支持算法(進
行了)詳細描述。

    通過產生數字簽名,CA能證明在tbsCertificate字段中信息的有效性。特別是,CA能
夠認證在證書中公開密鑰和證書的主題的綁定。

4.1.2 TBSCertificate

    序列TBSCertificate含有和CA發行證書的主題聯繫起來的信息。每一個TBSCertificate
含有主題和發行者的名字;以及和主題聯繫起來的公開密鑰、有效期、版本號和序列號;一
些可選的唯一標識符字段。這部分餘下的部分描述這些字段的句法和語義學。TBSCertificate
也可以包含擴展項。擴展部分在Internet PKI(在部分)4.2中被描繪。

4.1.2.1版本

    這個字段描繪編碼證書的版本。當擴展被使用的時候,如同在本文中預期那樣,使用
X.509版本3(值是2)。但是如果沒有擴展項,UniqueIdentifier將存在,這時使用版本2(值
是1)。如果僅僅基本字段存在,使用版本1(作爲缺省值,版本號將在證書中刪掉)。

    (證書系統應用)工具應該(SHOULD)有準備接受任何版本的證書。最低限度,工
具(MUST)必須能夠識別出第3版的證書。

    第2版證書的產生不是本文預期的描述對象。

4.1.2.2序列號

    序列號是CA給每一個證書分配一個整數。它必須(MUST)是特定CA簽發的證書唯
一識別(即,發行者名字和序列號唯一識別一張證書)。

4.1.2.3簽名

    這字段含有算法標識符,這個算法是CA在證書上簽名使用的算法。

    這個字段必須(MUST)含有作爲在序列Certificate (見4.1.1.2)中signatureAlgorithm
字段同樣的算法標識符。可選參數字段的內容將根據識別出的算法改變。第7.2段列出支持
的簽名算法。

4.1.2.4發行者

    發行者字段用來標識在證書上簽名和發行的實體。發行者字段必須(MUST)含有一非
空的能辨別出的名字(DN)。把發行者字段定義爲X.501類型名字。[X.501]名字由下列的
ASN.1結構確定:

   Name ::= CHOICE {
      RDNSequence }

   RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

   
   RelativeDistinguishedName ::=
     SET OF AttributeTypeAndValue

   AttributeTypeAndValue ::= SEQUENCE {
     type     AttributeType,
     value    AttributeValue }

   AttributeType ::= OBJECT IDENTIFIER

   AttributeValue ::= ANY DEFINED BY AttributeType

   
   DirectoryString ::= 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)) }

    名字(Name)描繪了一等級制度的名字屬性組成,例如國家名字和對應的值,例如US。
類型AttributeValue的成分由AttributeType決定;一般地說它將是一DirectoryString(類型)。

    DirectoryString類型定義爲一個對PrintableString、TeletexString、BMPString、UTF8String
和UniversalString(類型)的選擇。UTF8String編碼是DirectoryString的首選編碼,以及所
有的在2003年12月31日之後簽發的證書必須(MUST)使用UTF8String編碼(正如同下
面指出那樣)。直到那日期,當創建一個可辨別的名字時CAs必須(MUST)在下列的選擇
中挑選,包括他們自己:

(a) 如果字符集是足夠的,字符可以(MAY)被描述爲一PrintableString;

(b) 失敗(a),如果BMPString字符集是足夠的,字符可以被描述爲一BMPString;

(c) 失敗(a)和(b),字符必須(MUST)被描述爲一UTF8String。如果(a)
或者(b)是滿足的,CA可以(MAY)仍然寧願選擇把字符描述爲一
UTF8String。

    2003年12月31日 UTF8編碼要求的例外如下:

(a) CAs可以(MAY)簽發“名字滾翻”("name rollover")支持一向UTF8String
編碼整齊的遷移證書。這樣證書將包含CA的作爲發行者UTF8String編碼名
字和作爲主題的老名字編碼,或者反之亦然。

(b) CAs在部分4.1.2.6中表明,主題字段必須(MUST)存在由主題CA不管如
何編碼簽發的所有證書中發行者字段的內容相配的一非空的可識別名字。

    TeletexString和UniversalString爲向後兼容(性)被包含,並且不應該爲新主題的證書
使用。但是,這些類型可以在名字以前就存在的證書中被使用。證書用戶應該(SHOULD)
是有準備的以這些類型接受證書。

    此外,很多遺留工具支持名字在ISO 8859-1字符集(Latin1String)中的編碼,但是使
用TeletexString作爲他們的標籤。Latin1String包含在西方歐洲人國家中使用並不是部分
TeletexString 字符集的字符。加工TeletexString的工具應該(SHOULD)是有準備的處理整
個ISO 8859-1字符集。[ISO 8859-1]

    同樣,可識別名字由屬性組成。本文說明不限制可以出現在名字的屬性類型。但是,工
具必須(MUST)是有準備的以發行者名字接受證書,發行者名字含有下面確定的屬性類型。
本文說明也支持額外的屬性類型。

    標準套裝屬性被定義在X.500系列的文檔中。本文說明的[X.520]工具必須(MUST)是
有準備接受在發行者名字中(包括的)下列標準屬性類型:國家、組織、組織的單位
(organizational-unit)、限定語的可識別名字、國家或者省名字和普通名字(common name)
(例如" Susan Housley")。此外,本文說明的工具應該(SHOULD)是有準備的收到下列的
在發行者名字中標準屬性類型:地區、題目、姓、名字、開頭的字母和產生限定語(例如"Jr."", 
3rd"或者"IV")。這些屬性類型句法和相結合對象標識符(OIDs)在附錄A和B中ASN.1模
塊中提供說明。

    此外,本文說明的工具必須(MUST)是有準備的如同[RFC 2247]定義的那樣接受
domainComponent屬性。域名(Nameserver)系統(DNS)提供爲系統貼上標籤等級制度的
方法。這個屬性提供爲希望使用DNS和他們的DNS名字平行的組織一個方便的機制。這不
是用作替換名字字段的dNSName成分的替代。工具不需要把這樣名字變成DNS名字。這
屬性類型句法和相結合的OID在附錄A和B中ASN.1模塊中提供。

    證書用戶必須(MUST)是有準備處理發行者可識別名字和主題識別名字(見4.1.2.6)
去執行證書有效路徑的名字鏈(部分6)。名字鏈由相匹配的隨CA證書主題名字的在一張
證書中可識別的名字簽發者執行。

    本文說明僅要求在X.500系列文檔中指定功能相似的一子集名字。使工具遵照的要求如
下:

(a) 可以被假定代表不同字符,屬性值在不同類型(例如PrintableString和
BMPString)中編碼;

(b) 除了PrintableString類型,屬性值是區分大小寫的(這個允許屬性值和二進
制對象匹配);

(c) 在PrintableString中屬性值不區分大小寫(例如," Marianne Swanson"和" 
MARIANNE SWANSON"相同);和

(d) 在去除頭部和尾部的空格以及去轉換在內部子串中一個或多個連續空格爲一
個單一的空格後,在PrintableString中屬性值可被比較。

    這些名字比較規則允許一個證書用戶驗證使用證書用戶所不熟悉的語言或者編碼簽發
的證書的有效性。

   此外,本文說明的工具可以(MAY)使用這些比較規則爲名字鏈處理不熟悉的屬性類
型。這允許工具隨着在發行者名字中不熟悉的屬性處理證書。

    注意在X.500系列文檔中定義的比較規則指出用於在可識別名字中數據編碼的字符集
是無關緊要的。字符(他們)自身被比較而不關心編碼。允許本文的工具使用定義在X.500
系列文檔中的比較算法。這樣工具將通過前面指定算法認出相匹配的名字超集。

4.1.2.5有效性

    證書有效期是時間間隔,在這期間CA保證它將保持關於證書的狀況的信息。把字段描
述爲一連串(SEQUENCE)的兩個日期:日期證書有效期開始(notBefore)和日期證書有
效期結束(notAfter)。notBefore和notAfter可以作爲UTCTime或者GeneralizedTime類型編
碼。

    在本文中CAs必須(MUST)在2049年以前證書有效日期總是作爲UTCTime類型編
碼;在2050年或者以後證書有效性日期必須(MUST)作爲GeneralizedTime類型編碼。

4.1.2.5.1 UTCTime

    世界時間(universal time)類型,UTCTime是作爲國際應用的一標準ASN.1類型,因
爲本地時間不適合國際應用。UTCTime通過兩個低次序數字指定年以及指定精確(性)到
一分鐘或者一秒鐘。UTCTime包含(Zulu或者格林威治標準時間)Z或者一時間微分。

    在本文描述中,UTCTime值必須(MUST)是格林威治標準時間表示(Zulu)並且必須
(MUST)包含秒(即,時間(格式)是YYMMDDHHMMSSZ),甚至秒的數目等於零。
系統必須(MUST)如下解釋年字段(YY):

      當YY大於等於50,年將被認爲是19YY;和

      當YY不到50,年將被認爲是20YY。

4.1.2.5.2 GeneralizedTime

    普遍時間類型,GeneralizedTime爲時間的可變精確性的標準ASN.1類型。隨意地,
GeneralizedTime字段能包含一在本地和格林威治標準時間之間時間微分的代表。

    爲了本文的目標,GeneralizedTime值必須(MUST)是格林威治標準時間表示(Zulu)
並且必須(MUST)包含秒(即,時間格式是YYYYMMDDHHMMSSZ),甚至其秒的數目
等於零。GeneralizedTime值必須不(MUST NOT)包含小數部分秒(fractional seconds)。

4.1.2.6主題

    主題字段標識符與存儲在主題公開密鑰字段中相關聯的密鑰實體。主題名字和/或在
subjectAltName擴展中被附帶。如果主題是一CA(例如,如同在4.2.1.10討論那樣,基本
約束擴展存在和cA的值是真的(TRUE)),那麼主題字段必須(MUST)是隨着一非空的
可識別的名字存在,在所有的主題CA簽發的證書和發行者字段(見4.1.2.4)的目錄相匹配。
如果主題命名信息僅存在subjectAltName擴展(例如一把密鑰侷限於一電子郵件地址或者
URI)中,那麼主題名字必須(MUST)是一空的序列並且subjectAltName擴展一定是關鍵
的。

    在它非空的地方,主題字段必須(MUST)含有一X.500可識別名字 (DN)。DN必須
(MUST)對於每一主題實體是唯一的通過被簽發者名字字段定義的一CA證明。一CA可
以用同樣的DN向同樣的主題實體簽發多個證書。

    主題名字字段定義爲X.501類型名字。工具(應用)要求這字段是那些簽發者字段定義
的 (見4.1.2.4)。當將類型DirectoryString的屬性值編碼的時候,關於簽發者字段的編碼規
則必須(MUST)被執行。本文說明的工具一定是有準備的接收包含爲簽發者字段推薦的屬
性類型的主題名字。本文說明的工具應該(SHOULD)是有準備的接收含有爲簽發人字段
建議屬性類型的主題名字。這些屬性類型句法和相結合的對象標識符(OIDs)在附錄A和
BASN.1模塊中被提供。本文說明的工具可以(MAY)使用這些相似規則去處理不熟悉屬性
類型(例如,對於名字鏈條)。這允許工具在不熟悉屬性的主題名字中處理證書。

    此外,遺留工具存在於一RFC 822名字作爲EmailAddress屬性被嵌入在可識別的名字
中。作爲IA5String類型的EmailAddress屬性值允許包含字符'@',其不在PrintableString字
符集中。EmailAddress屬性值是不區分大小寫的(例如,"[email protected]"與
[email protected]是一樣的)。

    隨着電子郵件地址使產生新證書工具必須(MUST)在主題字段可能的選擇中使用
rfc822Name (見4.2.1.7)的名字描繪。同時包含在主題中可識別名字的EmailAddress屬性
值去支持遺留工具被反對,但是允許(即不禁止)。

4.1.2.7主題公開密鑰信息

    使用這字段攜帶公開密鑰和密鑰使用算法的標識符。算法使用在部分4.1.1.2中指定
AlgorithmIdentifier結構被標識。在部分7.3中指定對象標識符作爲將公開密鑰材料(公開密
鑰和參數)支持的編碼算法和方法。

4.1.2.8唯一標識符

    這些字段可能僅出現在版本2或者3中(見4.1.2.1)。主題和發行者的唯一標識符存在
於證書中去處理在超出(有效)時間主題和/或發行者名字的再使用的可能性。本文推薦名
字不在不同實體中重用以及Internet證書唯一標識符不被使用。CAs遵從本文不應該
(SHOULD NOT)使用唯一標識符產生證書。遵從本文應用(程序)應該(SHOULD)是
能解析唯一標識符的語法並且作比較。

4.1.2.9擴展

    這字段可能如果僅出現在版本3(見4.1.2.1)中。如果存在,這字段是一連串
(SEQUENCE)的一個或多個證書擴展。在Internet PKI中證書擴展的格式和內容將在4.2
定義。

4.2標準證書擴展

    在X.509 v3證書擴展定義中提供爲用戶或者公開密鑰和證書管理等級制度相結合的附
加屬性的方法。X.509 v3證書格式也允許社區(一個具體應用環境――譯者注)定義私有範
圍爲那些社區攜帶所特有信息。在一張證書中的每一擴展可以是關鍵的或者非關鍵的。如果
遇到一項不能識別的關鍵擴展,那麼應用系統必須(MUST)拒絕接受此證書;但是,如果
不被認出的項是非關鍵擴展則可以被忽視。下面章節推薦在Internet證書和標準信息以內使
用擴展。然而社區可以選擇使用附加擴展(針對具體應用環境的自定義擴展――譯者注);
但是,應該謹慎採用在證書中的任何關鍵擴展,其可以阻礙在一般背景(證書比較普遍的應
用環境――譯者注)中的證書應用。

    每一項擴展包含一OID和一ASN.1結構。當一擴展出現在一張證書中的時候,OID作
爲字段extnID和相應的ASN.1結構按照八位字符(octet string )extnValue的值編碼。僅一
特定擴展的事例可以出現在一張特定證書中。例如,一張證書可以含有僅一當局密鑰標識符
擴展(見4.2.1.1)。一擴展包含boolean類型關鍵值,缺省值爲FALSE。文本爲每一擴展指
定可接受作爲關鍵字段的值。

    CAs必須(MUST)支持密鑰標識符(見4.2.1.1和4.2.1.2)、基本約束(見4.2.1.10)、
密鑰應用(見4.2.1.3,)和證書策略(見4.2.1.5)擴展。如果CA頒發空序列主題證書,CA
必須(MUST)支持可選擇的名字擴展 (見4.2.1.7)。支持餘下的擴展是可選的。CAs可以
支持在本文說明以內不被識別的擴展標識符;提醒證書發行者把這樣的擴展標記關鍵可以抑
制雙方的共同操作。

    最低限度,本文的應用必須(MUST)能夠識別在本文中必須或者可能的擴展。這些擴
展是:密鑰應用(見4.2.1.3)、證書策略(見4.2.1.5)、主題可替換名字(見4.2.1.7)、基本
約束(見4.2.1.10)、名字約束(見4.2.1.11)、策略約束(見4.2.1.12)和密鑰應用擴展(見
4.2.1.13)。

    此外,本文推薦(RECOMMENDS)支持權威和主題密鑰標識符(見4.2.1.1和4.2.1.2) 
的應用擴展。

4.2.1標準擴展

    這部分介紹在Internet PKI應用中[X.509]定義的標準證書。[X.509] 定義中的每一擴展
和一OID聯繫起來。這些OIDs 是id-arc的成員,定義如下:

譯者注:OID是OBJECT IDENTIFIER(對象標識符)的簡稱,其是國際性組織定義的全球
標準的對象定義,是一樹結構,id-arc是樹結構中ISO組織定義的一枝,感興趣的
讀者請閱讀相關文檔。

   id-ce   OBJECT IDENTIFIER ::=  {joint-iso-ccitt(2) ds(5) 29}

4.2.1.1權威密鑰標識符

    權威密鑰標識符擴展提供一識別出對使用私有密鑰在一張證書上簽名相對應的公開密
鑰的手段。這個擴展用於一個發行者有多個簽名密鑰(也由於多重同時發生的密鑰對或者由
於密鑰更換)。標識符可以建立在任一個密鑰標識符(在發行者的證書中的主題密鑰標識符)
或者有關發行者名字和序列號的基礎上。

    authorityKeyIdentifier擴展的keyIdentifier字段必須(MUST)是包含在所有的由CAs
遵照便於鏈條構建所產生的證書內。有一例外:一CA以一張"自我簽名"證書的形式分配它
的公開密鑰,權威密鑰標識符可以被刪掉。在這個情況中,主題和權威密鑰標識符將是完全
相同的(等價的)。

    keyIdentifier字段的值應該(SHOULD)從驗證證書籤名的公開密鑰或者產生唯一值的
方法中得到(keyIdentifier字段的值產生算法――譯者注)。兩個從公開密鑰產生密鑰標識符
的通用方法描述在4.2.1.2。一個產生唯一值的通用方法在4.2.1.2中描述。因爲一個密鑰標
識符還沒有先前建立,本文推薦使用這些方法中的一種產生keyIdentifiers。

    本文推薦(使用)經過所有的證書用戶支持密鑰標識符的算法。

    這擴展必須不(MUST NOT)要被標記爲關鍵。

  id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }

   AuthorityKeyIdentifier ::= SEQUENCE {
      keyIdentifier             [0] KeyIdentifier           OPTIONAL,
      authorityCertIssuer       [1] GeneralNames            OPTIONAL,
      authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL  }

   KeyIdentifier ::= OCTET STRING

4.2.1.2主題密鑰標識符

    主題密鑰標識符擴展提供一種識別出包含一特定公開密鑰的證書的手段。

    爲了便於鏈條(證書鏈)構建,這個擴展必須(MUST)出現在所有CA證書中,也就
是說所有證書中包含基本約束擴展證書(見4.2.1.10)它的cA的值是TRUE。主題密鑰標識
符的值必須(MUST)是按照這張證書的主題值放入權威密鑰標識符擴展(見4.2.1.1)的證
書的發出的密鑰標識符字段。

    同CA證書一樣,主題密鑰標識符應該(SHOULD)從公開密鑰或者產生唯一值方法中
得到。兩種從公開密鑰產生密鑰標識符的通用方法如下:

(1) keyIdentifier由BIT STRING subjectPublicKey的值的160位SHA1哈希值
組成(排除標籤,長度和不在使用的bits數目)。

(2) keyIdentifier 四bit類型字段值爲0100以及隨後的由BIT STRING  
subjectPublicKey的值SHA 1哈希的值中最後60 bits連接組成。

    一個產生唯一值通用方法是一整數的monotomically遞增序列。

    爲末端實體證書,主題密鑰標識符擴展提供一識別出包含在一種應用中使用特定公開密
鑰的證書的手段。一末端實體已經得到多重證書,特別從多重CAs,主題密鑰標識符提供一
迅速識別出包含一特定公開密鑰證書的手段。爲幫助在應用方面識別適合末端實體證書,這
擴展應該包含在所有的末端實體證書內。

    爲末端實體證書,主題密鑰標識符應該(SHOULD)從公開密鑰得到。從公開密鑰產
生密鑰標識符的兩個通用方法在上面描述了。

    因爲一個密鑰標識符還沒有先前建立,本文說明推薦使用這些方法中的一種產生密鑰標
識符。

    這擴展必須不(MUST NOT)要標記爲關鍵。

   id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }

   SubjectKeyIdentifier ::= KeyIdentifier

4.2.1.3 密鑰使用

    密鑰使用擴展定義包含在證書的密鑰的目的(例如加密,簽名,簽名證書)。當一把能
被用於超出一個操作時候(超出了密鑰應用範圍――譯者注),密鑰使用限制可以被使用。
例如,當一RSA密鑰應該是僅用於簽名使用的時候,digitalSignature和/或nonRepudiation
位(bits)將被斷言(有效,置爲1――譯者注)。同樣,當一RSA密鑰應該是僅用於密鑰
管理使用的時候,keyEncipherment位將被斷言。當使用的時候,這擴展應該(SOULD)被
標記爲關鍵。

      id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }

      KeyUsage ::= BIT STRING {
           digitalSignature        (0),
           nonRepudiation          (1),
           keyEncipherment         (2),
           dataEncipherment        (3),
           keyAgreement            (4),
           keyCertSign             (5),

           cRLSign                 (6),
           encipherOnly            (7),
           decipherOnly            (8) }

    在KeyUsage類型中位(Bits)使用如下:

    digitalSignature位被斷言,當主題公開密鑰用一數字的簽名算法來支持安全服務而非抗
抵賴性(位1)、簽名證書(位5)或者簽名撤銷信息(位6) 的時候。數字的簽名算法常
常爲實體和數據起源(做)完整性驗證。

    nonRepudiation位被斷言,當主題公開密鑰被用於驗證提供抗抵賴性服務的數字簽名的
時候,其簽名實體避免虛假拒絕的一些行動所造成的危害,這些行動排除簽名證書或者
CRL。

    keyEncipherment位被斷言,當主題公開密鑰被用於密鑰傳輸的時候。例如,當一RSA
密鑰用於密鑰管理時候,那麼這位將被斷言。

    當主題公開密鑰用於(除了密碼學的密鑰)將用戶數據加密使用的時候,
dataEncipherment位被斷言。

    keyAgreement位被斷言,當主題公開密鑰爲用於密鑰協議的時候。例如,當一Diffie 
Hellman密鑰是要爲密鑰管理被使用的時候,那麼這位將被斷言。

    當主題公開密鑰用於驗證在證書上的簽名使用的時候,keyCertSign位被斷言。這位可
以僅在CA證書中被斷言。

    當主題公開密鑰用於驗證有關撤銷信息(例如一CRL)簽名使用的時候,cRLSign位被
斷言。

    encipherOnly位的意思是在沒有keyAgreement位(缺席)時定義的。當encipherOnly
位被斷言和keyAgreement位也被設定的時候,主題公開密鑰可以僅用於將數據加密(加密)
被使用,同時履行密鑰協議。

    decipherOnly位的意思是在沒有keyAgreement位(缺席)時定義的。當decipherOnly
位被斷言和keyAgreement位也被設定的時候,主題公開密鑰可以僅用於譯解出數據(解密)
被使用,同時履行密鑰協議。

    本文不限制在keyUsage擴展實例中那些位的結合。但是,在部分7.3中將指定適合值
作爲爲特定算法keyUsage擴展。

4.2.1.4私有密鑰使用週期

    本文推薦反對這擴展的使用。CAs遵從本文一定不(MUST NOT)要私有密鑰使用周
期爲關鍵擴展時產生證書。

    私有密鑰使用週期擴展允許證書發行者與證書相比,爲私有密鑰明確不同的有效性周
期。這擴展打算用於給數字的簽名密鑰的使用。這擴展由兩個可選成分組成,notBefore和
notAfter。和證書聯繫起來的私有密鑰不應該在兩個成分指定的時間提前或者過後對對象籤
名使用。CAs除非至少兩個成分之一存在,遵從本文一定不(MUST NOT)要在私有密鑰
使用週期擴展存在時產生證書。

   使用的地方,如同在部分4.1.2.5.2中定義那樣,描述爲GeneralizedTime必須(MUST)
指定notBefore和notAfter。

   id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::=  { id-ce 16 }

   PrivateKeyUsagePeriod ::= SEQUENCE {
        notBefore       [0]     GeneralizedTime OPTIONAL,
        notAfter        [1]     GeneralizedTime OPTIONAL }

4.2.1.5證書策略

    證書策略擴展包含一連串的一個或多個策略信息條目,每一個由一對象標識符(OID)
和可選的限定語(組成)。這些策略信息條款指示在其之下證書被簽發的策略和證書可以被
使用的目的。可以存在的可選的限定語不預期改變策略的定義。

    預期隨着特有策略需求的應用有那些他們將接受的策略的清單以及把在證書中策略
OIDs和那清單比較。如果這擴展是關鍵的,路徑驗證軟件必須(MUST)是能理解這(包
含可選的限定語)擴展的,否則必須丟棄證書。

    爲促進雙方的互操作性,本文推薦(RECOMMENDS)策略信息條目由僅一OID構成。
單獨OID不足的地方,本文強烈建議在這部分中識別出那些限制使用限定語。

    本文爲經過證書策略書寫者(writers)和證書發行者使用定義的兩個策略限定語。限定
語類型是CPS  Pointer和User Notice 。

    CPS Pointer限定語含有一指向經過CA發佈的(Certification Practice Statement)
證書實施聲明(CPS)的指針。指針是URI的格式。

    當證書被使用的時候,User notice將展示依靠部分。應用(軟件)應該(SHOULD)在
所有的證書上展示所有的使用證書路徑的用戶注意(User notice),除了如果那個注意(notes)
被複制,僅一複製品需求被展示的情況下。爲阻礙這樣複製,這個限定語應該(SHOULD)
僅是存在於末端實體(end-entity)證書和簽發給其它組織的CA證書中。

    用戶注意(user notice)有兩個可選字段:noticeRef字段和explicitText字段。

    如果使用noticeRef字段通過數字(經過那組織準備的特殊原文的陳述)給一組織命名。
例如,它可以識別出組織"CertsRUs"和注意數字(notice number )1。在一典型工具中,應
用(軟件)將有一爲含有當前一套注意(notices)CertsRUs文件:應用將從文件摘取注意文
本並且展示它。信息可以是用多種語言表達的允許軟件爲它的自己環境選擇特定語言信息。

    explicitText字段在證書中直接包含原文的聲明。explicitText字段是一個最大爲200個字
符的字符串。

    如果在noticeRef和explicitText兩個可選項中包含在一個限定語內並且如果應用軟件能
找到按照noticeRef可選項指示注意的文本,那麼那文本應該被展示;除此之外,explicitText
字符應該被展示。

   id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }

   certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation

   PolicyInformation ::= SEQUENCE {
        policyIdentifier   CertPolicyId,
        policyQualifiers   SEQUENCE SIZE (1..MAX) OF
                                PolicyQualifierInfo OPTIONAL }

   CertPolicyId ::= OBJECT IDENTIFIER

   PolicyQualifierInfo ::= SEQUENCE {
        policyQualifierId  PolicyQualifierId,
        qualifier          ANY DEFINED BY policyQualifierId }

   -- policyQualifierIds for Internet policy qualifiers

   id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
   id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
   id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }

   PolicyQualifierId ::=
        OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )

   Qualifier ::= CHOICE {
        cPSuri           CPSuri,
        userNotice       UserNotice }

   CPSuri ::= IA5String

   UserNotice ::= SEQUENCE {
        noticeRef        NoticeReference OPTIONAL,
        explicitText     DisplayText OPTIONAL}

   NoticeReference ::= SEQUENCE {
        organization     DisplayText,
        noticeNumbers    SEQUENCE OF INTEGER }

   DisplayText ::= CHOICE {
        visibleString    VisibleString  (SIZE (1..200)),
        bmpString        BMPString      (SIZE (1..200)),
        utf8String       UTF8String     (SIZE (1..200)) }

4.2.1.6策略映射

    這擴展使用在CA證書中。它列出一對或多對OIDs;每一對包含issuerDomainPolicy和
subjectDomainPolicy。配對指示簽發CA認爲它的issuerDomainPolicy等於主題CA的
subjectDomainPolicy。

    爲特定應用簽發CA的用戶可以接受一issuerDomainPolicy。策略映射對發行與主題CA
相聯繫的策略的CA用戶是可以與他們接受的策略相比較起作用。

    這擴展可以被CAs和/或應用支持,並且它必須(MUST)是非關鍵的。

   id-ce-policyMappings OBJECT IDENTIFIER ::=  { id-ce 33 }

   PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
        issuerDomainPolicy      CertPolicyId,
        subjectDomainPolicy     CertPolicyId }

4.2.1.7主題可替換名字

    主題可替換名字擴展允許附加與證書的主題相同的標識符。定義可選項包含Internet電
子郵件地址、DNS名字、IP地址和uniform resource identifier (URI)。其它可選項存在,
並且包含完全的本地定義。每一名字形式的多重名字形式和多重事例可以被包含。每當這樣
相同的標識符是要被綁定成一張證書,主題可選名字(或者發行者可替換名字)擴展必須
(MUST)被使用。

    因爲主題可替換名字被認爲是與公開密鑰結合,主題可選名字所有的部分必須(MUST)
被CA驗證。

    進一步,如果在證書中僅包含有主題身份是一可替換名字形式(例如一電子郵件地址),
那麼主題可識別名字必須(MUST)爲空(一空序列)以及subjectAltName擴展必須(MUST)
存在。如果主題字段包含一空序列,subjectAltName擴展必須(MUST)是標記爲關鍵。

   當subjectAltName擴展含有一Internet郵遞地址的時候,地址必須(MUST)是作爲一
rfc822Name包含。rfc822Name的格式是一" addr-spec ",如同在RFC 822[RFC 822]中定
義那樣。addr-spec格式爲" local-part@domain "。注意在addr-spec之前沒有(例如一
通用名字)短語,在它之後沒有comment (text surrounded in parentheses)並且沒有
"<"和">"包圍。注意在RFC 822 addr-spec中大寫和小寫體字符是允許的,這種情況不區分
大小寫。

    當subjectAltName擴展含有一iPAddress的時候,地址必須(MUST)是如同在RFC 
791[RFC 791]中指定那樣,在"network byte order"八位字符中儲藏。每一八位的最低有效位
(LSB)是在網絡地址中相應字節的LSB。如同在RFC 791中指定的IP版本4那樣,八位
字符必須(MUST)含有正好四個八位。如同在RFC 1883中指定的IP版本6那樣,八位字
符必須(MUST)含有正好十六個八位[RFC 1883]。

    當subjectAltName擴展含有一個域名服務標籤的時候,域名必須(MUST)是在dNSName
(IA5String)中儲藏。名字一定是如同經過RFC 1034[RFC 1034]指定那樣,在" preferred name 
syntax "中。注意在域名中允許大寫和小寫體字符,並且在這種情況下不分大小寫。另外“ ”
(空格)在域名中是一個合法的字符的同時,dNSName的subjectAltName擴展“ ” (空
格)是不允許的。最後,DNS代表Internet郵遞地址 (以wpolk.nist.gov代替[email protected]
的使用是不允許的;這樣的標識符是要作爲rfc822Name被編碼。

    當subjectAltName擴展含有一URI的時候,名字必須(MUST)存儲在
uniformResourceIdentifier(IA5String)中。名字必須(MUST)是無關的(non-relative) URL
並且必須(MUST)按照[RFC 1738] 定義的URL句法和編碼規則。名字必須包含兩種模式
(例如"http"或者"ftp")和scheme-specific-part。scheme-specific-part必須包含作爲主機完全
合格域名或者IP地址。

    如同在[RFC 1738]定義的那樣,模式(scheme)名字不是大小寫敏感的(case-sensitive )
(例如,"http"是等於"HTTP")。主機部分也不是大小寫敏感的,但是scheme-specific-part
的其它成分可以是大小寫敏感的。當比較URIs的時候,保證工具必須(MUST)比較scheme
和主機而不管大小寫,但是認爲scheme-specific-part的剩下的部分是大小寫敏感的。

    主題可替換名字如同在部分4.2.1.11中描繪那樣主題識別名字使用名字約束擴展同樣的
方式被約束。

    如果subjectAltName擴展存在,序列必須(MUST)含有至少一入口。不像主題字段,
使CAs遵照必須不(MUST NOT)頒發subjectAltNames含有空GeneralName字段的證書。
例如,把rfc822Name描述爲IA5String。在一個空字符串是有效IA5String的同時,這樣的
rfc822Name在本文不被允許。當客戶(軟件)加工一證書路徑的時候,不由本文定義客戶
(軟件)的行爲。

    最後,包括通配符(例如,是爲一套名字的佔位符號)的主題替換名字語義學不在本文
說明。隨着具體需求應用可以使用這樣的名字,但是要定義語義學。

      id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }

      SubjectAltName ::= GeneralNames

      GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

      GeneralName ::= CHOICE {
           otherName                       [0]     OtherName,
           rfc822Name                      [1]     IA5String,
           dNSName                         [2]     IA5String,
           x400Address                     [3]     ORAddress,
           directoryName                   [4]     Name,
           ediPartyName                    [5]     EDIPartyName,
           uniformResourceIdentifier       [6]     IA5String,
           iPAddress                       [7]     OCTET STRING,
           registeredID                    [8]     OBJECT IDENTIFIER}

      OtherName ::= SEQUENCE {
           type-id    OBJECT IDENTIFIER,
           value      [0] EXPLICIT ANY DEFINED BY type-id }

      EDIPartyName ::= SEQUENCE {
           nameAssigner            [0]     DirectoryString OPTIONAL,
           partyName               [1]     DirectoryString }

4.2.1.8發行者可替換名字

    和4.2.1.7一樣,使用這擴展把Internet類型標識符和證書發行者聯繫起來。發行者可替
換名字必須(MUST)是4.2.1.7中描述的方式編碼。

    目前的情況,這擴展不應該(SHOULD NOT)被標記爲關鍵。

      id-ce-issuerAltName OBJECT IDENTIFIER ::=  { id-ce 18 }

      IssuerAltName ::= GeneralNames

4.2.1.9主題目錄服務系統屬性

    主題目錄服務系統屬性擴展不推薦作爲本文的必須的部分,但是它可以在本地環境中被
使用。這擴展一定是非關鍵的。

   id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::=  { id-ce 9 }

   SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute

4.2.1.10基本約束

    基本約束擴展識別出是否證書的主題一CA以及一證書路徑通過CA可以存在的深度。

    僅當如果cA被設置爲TRUE,那麼pathLenConstraint字段是有意義的。在這個情況中,
它給出最大CA證書的數目(證書鏈的長度――譯者注),其可以隨着這張在一證書路徑中
證書來到的。零值指示僅一張末端實體證書沿着路徑可以進入。它出現的地方,
pathLenConstraint字段必須(MUST)是大於等於零。pathLenConstraint不出現的地方,事
實上沒有對證書路徑的允許長度進行限制。

    這個擴展必須(MUST)似乎在所有的CA證書中是關鍵擴展。這擴展不應該(SHOULD 
NOT)出現在末端實體證書中。

   id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }

   BasicConstraints ::= SEQUENCE {
        cA                      BOOLEAN DEFAULT FALSE,
        pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

4.2.1.11名字約束

    名字約束擴展指示一名字空間,必須(MUST)是僅在一張CA證書中使用的,在一證
書路徑中以內所有的隨後證書中主題名字將被找到的。限制可以施加可識別名字或者主題可
替換名字於主題。僅當指定的名字形式存在的時候,限制提出申請。如果沒有類型的名字在
證書中,證書是可接受。

    限制按照允許或者排除名字子樹中被定義。不管出現在permittedSubtrees的信息,任何
在excludedSubtrees字段限制相配的名字是無效的。這擴展必須(MUST)是關鍵的。

    在本文以內,最低的和最大的字段域不隨着任何名字形式被應用,因此最低的總是零,
和最大的限度總是不存在。

    約束向主機部分名字申請URIs。約束可以指定一個主機或者域。例子可以是
"foo.bar.com"和".xyz.com"。什麼時候約束以一分隔符開始,它可以是一或更多子域
(subdomains)膨脹。也就是說約束".xyz.com"被abc.xyz.com和abc.def.xyz.com滿足。但是,
約束".xyz.com"不被"xyz.com"滿足。當約束不以一分隔符開始的時候,它指定一個主機。

    爲Internat郵遞地址名字約束可以指定一個特定郵箱、所有的在一個特定主機地址或者
所有的在一域中的郵箱。指示一個特定郵箱,約束是完整郵遞地址。例如,"[email protected]"
指示在主機"xyz.com"上根郵箱。說明所有的在一個特定主機上Internet郵遞地址,指定約束
作爲主機名字。例如,約束"xyz.com"在主機"xyz.com"被任何郵遞地址滿足。指定任何在域
以內的地址,用一領頭的分隔符約束(和URIs)一樣被指定。例如,".xyz.com"指示所有的
Internet郵遞地址在"xyz.com"域中,但是Internet郵遞地址在主機"xyz.com"上。

    DNS名字限制作爲foo.bar.com被表示。任何子域滿足名字約束。例如,www.foo.bar.com
將滿足約束,但是bigfoo.bar.com不滿足。

    遺留工具存在於RFC 822名字嵌入的在一個類型EmailAddress(見4.1.2.6)的屬性中
可識別名字主題。當rfc822名字是限制的,但是證書不包含主題可替換名字的時候,rfc822
名字約束必須(MUST)是在主題識別名字中施加於EmailAddress類型的屬性。對
EmailAddress ASN.1句法和相應的OID在附錄A和B中被補充。

    形式directoryName的限制必須(MUST)是施加於在證書中主題字段和directoryName
類型的subjectAltName擴展。形式x400Address的限制必須(MUST)是施加於類型
x400Address的subjectAltName擴展。

    當應用形式directoryName的限制的時候,工具必須(MUST)比較DN屬性。在一最
低限度,工具必須(MUST)履行在部分4.1.2.4中指定DN比較規則。CAs頒發的形式
directoryName限制的證書不應該(SHOULD NOT)信賴完全ISO DN名字比較算法的工具
上。這個暗示名字限制將向在主題字段或者subjectAltName擴展中使用的編碼同一地陳述。

    iPAddress的句法必須(MUST)是如同在第4.2.1.7段中那樣,對於名字約束被特別描
繪。對於IPv4地址,generalName的ipAddress字段必須(MUST)含有八(8) octets,在
RFC 1519(CIDR)的款式中編碼表現爲地址範圍。對於IPv6 地址,ipAddress字段必須
(MUST)包含同樣的32 octets編碼。例如對於" class C "名字約束亞網10.9.8.0將是0A 09 08 
00 FF FF FF 00octets描述爲八位代表,CIDR註釋代表爲10.9.8.0/255.255.255.0。

    不由本文定義爲otherName,ediPartyName和registeredID名字約束句法和語義學。

      id-ce-nameConstraints OBJECT IDENTIFIER ::=  { id-ce 30 }

      NameConstraints ::= SEQUENCE {
           permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
           excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }

      GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree

      GeneralSubtree ::= SEQUENCE {
           base                    GeneralName,
           minimum         [0]     BaseDistance DEFAULT 0,
           maximum         [1]     BaseDistance OPTIONAL }

      BaseDistance ::= INTEGER (0..MAX)

4.2.1.12策略約束

    策略約束擴展能在頒發的CAs證書中被使用。策略約束擴展在兩種方式中強迫路徑驗
證。它能用於禁止策略映射或者要求每一在路徑中證書含有一個可接受策略標識符。

    如果inhibitPolicyMapping字段存在,在策略映射是不再允許之前,值指示附加證書可
以出現在路徑的數目。例如,一值指示策略映射可以在這張證書的主題發出的證書中處理,
但是不在路徑中附加。

    如果requireExplicitPolicy字段存在,隨後的證書將包含一個可接受策略標識符。在一
顯示策略被要求之前,requireExplicitPolicy的值指示可以出現在路徑的附加證書的數目。一
個可接受策略標識符是一經過證書路徑或者標識符的用戶對一通過策略映射被宣佈是等於
策略需求標識符的。

    使CAs遵照一定不(MUST NOT)要頒發在策略約束空序列時的證書。也就是說在
inhibitPolicyMapping字段或者requireExplicitPolicy字段中最少一個必須(MUST)存在。當
遭遇一空的策略約束字段時,客戶(軟件)的行爲不在本文中描述。

    這擴展可以是關鍵或者非關鍵。

   id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }

   PolicyConstraints ::= SEQUENCE {
        requireExplicitPolicy           [0] SkipCerts OPTIONAL,
        inhibitPolicyMapping            [1] SkipCerts OPTIONAL }

   SkipCerts ::= INTEGER (0..MAX)

4.2.1.13擴大密鑰使用領域

    這字段指示一或更多確認的公開密鑰增加或者代替基本密鑰使用擴展字段中表明的目
的。這字段定義如下:

   id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}

   ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId

   KeyPurposeId ::= OBJECT IDENTIFIER

    密鑰目的可以由任何有需求的組織定義。使用對象標識符識別出密鑰目的將與IANA或
者ITU TRec.X.660|ISO IEC/ITU 9834-1一致被分配。

    這擴展在證書發行者的可選項方面可以擴展,是既關鍵又非關鍵。

    如果擴展被標誌爲關鍵,那麼證書必須(MUST)是僅用於目的標誌之一使用。

    如果擴展被標誌爲非關鍵,那麼它指示密鑰的預設目的或者可以在發現在有多重密鑰/
證書的實體中恰當的密鑰/證書方面被使用。它是一顧問字段並且不暗示密鑰的使用被證書
權威機構目的指示的限制。儘管如此證書應用可以要求一特殊目的被表明爲了證書能對那種
應用是可接受的。

    如果一張證書含有一關鍵的密鑰使用字段和一關鍵的擴展密鑰使用字段,那麼在兩字段
必須(MUST)被獨立處理並且證書必須(MUST)僅對兩個字段一致目的被使用。如果事
實上沒有和兩個字段一致目的,那麼證書一定不要(MUST NOT)用於任何目的。

    本文確定下列的密鑰使用目的:

   id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }

   id-kp-serverAuth              OBJECT IDENTIFIER ::=   {id-kp 1}
   -- TLS Web server authentication
   -- Key usage bits that may be consistent: digitalSignature,
   --                         keyEncipherment or keyAgreement
   --
   id-kp-clientAuth              OBJECT IDENTIFIER ::=   {id-kp 2}
   -- TLS Web client authentication
   -- Key usage bits that may be consistent: digitalSignature and/or
   --                            keyAgreement
   --
   id-kp-codeSigning             OBJECT IDENTIFIER ::=   {id-kp 3}
   -- Signing of downloadable executable code
   -- Key usage bits that may be consistent: digitalSignature
   --
   id-kp-emailProtection         OBJECT IDENTIFIER ::=   {id-kp 4}
   -- E-mail protection
   -- Key usage bits that may be consistent: digitalSignature,
   --                         nonRepudiation, and/or (keyEncipherment
   --                         or keyAgreement)
   --
   id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }
   -- Binding the hash of an object to a time from an agreed-upon time
   -- source. Key usage bits that may be consistent: digitalSignature,
   --                         nonRepudiation

4.2.1.14 CRL發佈點

    CRL發佈點擴展標識出CRL信息如何得到。擴展應該(SHOULD)是非關鍵,但是本
文建議由CAs和應用(程序)支持這擴展。CRL管理的進一步討論包含在部分5中。

    如果cRLDistributionPoints擴展含有一類型URI的DistributionPointName,下列的語義
學必須被假定:URI爲相關的理由和將結合cRLIssuer被髮出的指向當前CRL。爲URI預期
值在4.2.1.7部分定義。處理關於其它值的規則不由本文定義。如果distributionPoint刪掉理
由,CRL必須(MUST)撤銷所有理由。如果distributionPoint刪掉cRLIssuer,CRL必須(MUST)
是由發行證書的CA發出的。

   id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::=  { id-ce 31 }

   cRLDistributionPoints ::= {
        CRLDistPointsSyntax }

   CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint

   DistributionPoint ::= SEQUENCE {
        distributionPoint       [0]     DistributionPointName OPTIONAL,
        reasons                 [1]     ReasonFlags OPTIONAL,
        cRLIssuer               [2]     GeneralNames OPTIONAL }

   DistributionPointName ::= CHOICE {
        fullName                [0]     GeneralNames,
        nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }

   ReasonFlags ::= BIT STRING {
        unused                  (0),
        keyCompromise           (1),
        cACompromise            (2),
        affiliationChanged      (3),
        superseded              (4),
        cessationOfOperation    (5),
        certificateHold         (6) }

4.2.2私有Internet擴展

    這部分爲在Internet公開密鑰基礎中的使用定義一新擴展。這擴展可以被直接應用
(direct applications)識別出一聯機批准服務的申請支撐的發行CA。當信息可以是在多重形
式有效時,每一擴展是一連串的IA5String值、每一個代表一URI。URI不言明地指定關於
得到信息的信息和方法的位置和格式。

    一個對象標識符爲私有擴展被定義。把對象標識符和私有擴展聯繫起來在id-pkix名字
空間以內的arc id-pe下面被定義。任何爲Internet PKI定義的未來擴展將也在arc id-pe 下面
被定義。

      id-pkix  OBJECT IDENTIFIER  ::=
               { iso(1) identified-organization(3) dod(6) internet(1)
                       security(5) mechanisms(5) pkix(7) }

      id-pe  OBJECT IDENTIFIER  ::=  { id-pkix 1 }

4.2.2.1權威信息存取

    權威信息存取擴展指示怎樣訪問CA關於擴展出現在證書的發行人的信息和服務。信息
和服務可以包含聯機授權服務和CA策略數據。(CRLs的位置不在這擴展中被指定;那信息
被cRLDistributionPoints擴展提供)這擴展可以包含在主題或者CA證書內,並且它一定是
非關鍵的。

   id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }

   AuthorityInfoAccessSyntax  ::=
           SEQUENCE SIZE (1..MAX) OF AccessDescription

   AccessDescription  ::=  SEQUENCE {
           accessMethod          OBJECT IDENTIFIER,
           accessLocation        GeneralName  }

   id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }

   id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }

    每一在序列AuthorityInfoAccessSyntax入口中描繪附加關於CA的信息的格式和位置,
其發行這擴展出現的證書。信息的類型和格式被accessMethod字段指定;accessLocation字
段指定信息的位置。恢復機制意味着可以用accessMethod或者由accessLocation指定。

    本文爲accessMethod定義一OID。當附加信息列出CAs其已發行的比發行證書的CA
地位高證書的時候,id-ad-caIssuers OID被使用含有這擴展。參照CA發行者描繪在選擇一
由證書用戶信任終止點的證書路徑中幫助證書用戶。

    當id-ad-caIssuers作爲accessInfoType出現的時候,accessLocation字段描繪推薦服務器
和存取協議去得到參照描繪。把accessLocation字段定義爲能採取幾種格式的   
GeneralName。經由http,ftp或者ldap信息可用的地方,accessLocation必須(MUST)是
一uniformResourceIdentifier。信息可用的地方經由目錄服務系統存取協議(dap),
accessLocation必須(MUST)是一directoryName。當信息經由電子郵件可用的時候,
accessLocation必須(MUST)是一rfc822Name。不由本文說明確定accessLocation的其它名
字格式(當accessMethod是id-ad-caIssuers)的語義學。

    附加存取描述符可以在其它PKIX文本說明中被定義。

5 CRL和CRL擴展簡介

    如同前面描繪那樣,X.509 v2CRL本文的一個目標是要幫助發展創造一可由雙方共同操
作的和可再用的Internet PKI。達到這目標,擴展使用的指南被指定和一些關於包含在CRL
中本質的假定信息。

    CRLs可以被使用在覆蓋寬廣範圍的可由雙方共同操作目標和甚至更寬廣範圍的應用和
環境的寬闊範圍中的操作上的和擔保需求。本文爲要求寬廣可由雙方共同操作的應用建立一
條共用基線。本文定義一基線套能在每一個CRL中被預期的信息。同時,本文定義爲以及
爲這些屬性共用代表經常用過的屬性在CRL以內的通用位置。

    本文不定義任何私有InternetCRL擴展或者CRL入口擴展。

    隨着附加或者特殊目的需求環境可以建立在本文基礎上或者可以取代它。

    如果其它撤銷或者證書狀況算法被提供,遵照CAs不需要發行CRLs。發行CRLs的
CAs必須(MUST)遵照發行第2版CRLs,以及CAs必須在nextUpdate字段中包含日期(下
一個CRL被髮出的日前)(見5.1.2.5),CRL號擴展(見5.2.3)和權威密鑰標識擴展(見
5.2.1)。遵照應用所需要的去處理第1版和2 版CRLs。

5.1 CRL字段

    X.509 v2CRL句法如下。爲簽名計算,要被簽名的數據是ASN.1 DER編碼。ASN.1 DER
編碼是一標籤、長度、爲每一元素值的編碼系統。

   CertificateList  ::=  SEQUENCE  {
        tbsCertList          TBSCertList,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }

   TBSCertList  ::=  SEQUENCE  {
        version                 Version OPTIONAL,
                                     -- if present, shall be v2
        signature               AlgorithmIdentifier,
        issuer                  Name,
        thisUpdate              Time,
        nextUpdate              Time OPTIONAL,
        revokedCertificates     SEQUENCE OF SEQUENCE  {
             userCertificate         CertificateSerialNumber,
             revocationDate          Time,
             crlEntryExtensions      Extensions OPTIONAL
                                           -- if present, shall be v2
                                  }  OPTIONAL,
        crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
                                           -- if present, shall be v2
                                  }

    版本,時間,CertificateSerialNumber和擴展完全在ASN.1中在第4.1段中被定義。

    AlgorithmIdentifier在第4.1.1.2段中被定義。

    下列的項目描繪X.509 v2CRL在Internet PKI中使用。

5.1.1 CertificateList字段

    CertificateList是一連串(SEQUENCE)的三個需求字段(three required fields)。字段在
下列的分部中被詳細描繪。

5.1.1.1 tbsCertList

    在序列中第一字段是tbsCertList。這字段是它自己的序列,含有發行者的名字、發行日
期,下一個清單(CRL)的發行日期,撤銷證書列表和可選CRL擴展。進一步,每一在撤
銷證書清單上入口是由一連串的用戶證書確定序號,撤銷日期和可選CRL入口擴展。

5.1.1.2 signatureAlgorithm

    signatureAlgorithm字段爲含有算法標識符,經過CA在CertificateList上簽名使用的算
法。字段有在部分4.1.1.2中被定義的類型AlgorithmIdentifier。第7.2段列出爲本文說明支
持的算法。CAs必須(MUST)保證當簽名的時候,使用的簽名算法在第7.2段中定義的算
法標識符。

    這字段必須(MUST)含有同樣的作爲在序列tbsCertList(見5.1.2.2)中籤名字段算法
標識符。

5.1.1.3 signatureValue

    signatureValue字段在ASN.1 DER編碼tbsCertList上含有一數字的簽名計算。使用ASN.1 
DER編碼tbsCertList作爲簽名函數的輸入。那是ASN.1作爲BIT STRING將這簽名值編碼
幷包含在CRL的signatureValue字段中。在部分7.2中對每一個支持的算法描述這過程的細
節。

5.1.2證書列表" To Be Signed"

    被簽名的證書清單或者TBSCertList是一連串(SEQUENCE)的必須的和可選的字段。
必須字段識別出CRL發行者,使用在CRL上簽名的算法,CRL被髮出的日期和時間以及
在CA將發行下一個CRL的日期和時間。

    可選字段包含撤銷證書和CRL擴展的清單。撤銷證書清單是其CA還沒有撤銷任何它
已發行未到期的證書的可選證明論據。本文需要Cas保證在發行的所有的CRLs中
cRLNumber使用CRL擴展。

5.1.2.1版本

    這個可選字段描繪編碼CRL的版本。當擴展使用的時候,如同本文需要那樣,這字段
必須(MUST)是存在的和必須(MUST)指定版本2(整數值1)。

5.1.2.2簽名

    這個字段含有爲使用在CRL上簽名算法的算法標識符。第7.2段描述了在Internet PKI
中使用的大多流行的簽名算法清單OIDs。

    這字段必須(MUST)含有同樣的作爲在序列CertificateList(見部分5.1.1.2)中  
signatureAlgorithm字段算法標識符。

5.1.2.3發行者名字

    發行者名字標識已經在CRL上簽名和發行的實體。發行者實體在發行者名字字段中被
帶着。可替換名字格式也可以出現在issuerAltName擴展(見5.2.2)。發行者名字字段必須
(MUST)含有一X.500區別名字(DN)。發行者名字字段被定義爲X.501類型名字以及必
須(MUST)遵守在證書(見4.1.2.4)中發行者名字字段的編碼規則。

5.1.2.4更新

    這字段指示這CRL的發佈日期。ThisUpdate可以作爲UTCTime或者GeneralizedTime
被編碼。

    在2049年之前日前中遵從本文其發行CRLs的CAs必須(MUST)作爲UTCTime將
thisUpdate編碼。遵從本文其發行CRLs的CAs必須作爲GeneralizedTime將thisUpdate編碼
在年2050中或者以後日期中。

    作爲UTCTime編碼的地方,必須(MUST)是指定thisUpdate如同在部分4.1.2.5.1中
定義和解釋那樣。作爲GeneralizedTime編碼的地方,必須(MUST)是指定thisUpdate如同
在部分4.1.2.5.2中定義和解釋那樣。

5.1.2.5下次更新

    這字段指示在下一個CRL被髮出的日期,在指示日期以前,下一個CRL能被髮出的,
但是它將不在指示日期或者之後被髮出的。CAs應該(SHOULD)發佈CRLs以一nextUpdate
時間對比向前或者與所有的前一CRLs相比以後。nextUpdate可以作爲UTCTime或者
GeneralizedTime被編碼。

    本文描述必須在CAs發出的所有CRLs中包含nextUpdate。注意TBSCertList的ASN.1
句法描繪這是可選(OPTIONAL)字段,其和在[X.509]定義的ASN.1結構一致。加工CRLs
刪掉nextUpdate的客戶(軟件)行爲不在本文描述。

    在2049年之前日前中遵從本文其發行CRLs的CAs必須(MUST)作爲UTCTime將
thisUpdate編碼。遵從本文其發行CRLs的CAs必須作爲GeneralizedTime將thisUpdate編碼
在年2050中或者以後日期中。

    作爲UTCTime編碼的地方,必須(MUST)是指定thisUpdate如同在部分4.1.2.5.1中
定義和解釋那樣。作爲GeneralizedTime編碼的地方,必須(MUST)是指定thisUpdate如同
在部分4.1.2.5.2中定義和解釋那樣。

5.1.2.6撤銷證書

    撤銷證書被列舉。通過他們的序號給撤銷證書命名。通過證書序列號唯一標識被撤銷的
證書。撤銷發生的日期被指定。revocationDate時間必須(MUST)是如同在部分5.1.2.4中
描繪那樣表示。可以在CRL入口擴展中提供附加信息;CRL入口擴展在部分5.3中被討論。

5.1.2.7擴展

    這字段僅出現在版本2(或者更高版本中)(見5.1.2.1)中。如果存在,這字段是一連
串(SEQUENCE)的一或更多CRL擴展。CRL擴展在部分5.2中被討論。

5.2 CRL擴展

    由ANSI X9和ISO/IEC/ITU爲X.509 v2CRLs[X.509]定義擴展。[X9.55]提供把附加屬性
和CRLs聯繫起來的方法。X.509 v2CRL格式也允許社區定義私有範圍攜帶那些社區所特有
信息的擴展。每一在CRL中的擴展可以是關鍵或者非關鍵的。如果它遭遇一它不知道如何
處理的關鍵擴展,CRL批准必須(MUST)失敗。但是,未被認出的非關鍵擴展可以被忽視。
下列的部分提出在InternetCRLs以內使用的那些擴展。社區可以選擇在本文說明中包含在
CRLs中不被定義的擴展。但是,應該謹慎採用任何可以在一般背景方面被運用的CRLs中
的關鍵擴展。

    發行CRLs的CAs確認包含權威密鑰標識符(見5.2.1)和在所有發行的CRLs中的CRL
數字擴展(見5.2.3)。

5.2.1權威密鑰標識符

    權威密鑰標識符擴展提供一識別出對使用私有密鑰在一CRL上簽名相對應的公開密鑰
的手段。確認能被建立在任一個的基礎上密鑰標識符(在CRL簽名者的證書中的主題密鑰
標識符)或者有關發行者名字和序號。一個發行者有超過一個由於多重同時發生的密鑰對或
者由於密鑰對更換的地方,這擴展特別有用。

    CAs遵照必須(MUST)使用密鑰標識符方法和必須(MUST)在所有發行的CRLs中
包含這擴展。

    這CRL擴展句法在部分4.2.1.1中被定義。

5.2.2發行者可替換名字

    發行者可替換名字擴展允許額外標識和CRL的發行者聯繫起來。定義可選項包含一
rfc822名字(電子郵件地址),一DNS名字,一IP地址和一URI。一名字和多重名字格式
的多重事例可以被包含。每當這樣的標識符被使用,發行者可替換名字擴展必須(MUST)
被使用。

    issuerAltName擴展不應該(SHOULD NOT)被標記爲關鍵。

    這CRL擴展OID和句法在部分4.2.1.8中被定義.

5.2.3 CRL Number

    CRL Number是經過CA發出的非關鍵CRL擴展,其爲每一CRL表達一單調地增加序
列號的。這擴展允許用戶容易決定什麼時候一特定CRL取代另一CRL。CAs遵從本文必須
(MUST)在所有的CRLs中包含這擴展。

   id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }

   cRLNumber ::= INTEGER (0..MAX)

5.2.4 Delta CRL標識符

    Delta CRL標識符是一識別出一delta-CRL的關鍵CRL擴展。delta-CRL的使用能在相
當大的程度上爲應用(程序)提高比CRL結構之外儲藏撤銷信息格式的處理時間。這個允
許改變被加入本地數據庫,同時忽視未改變的信息(其已經是在本地數據庫中的)。

    當一delta-CRL發出的時候,CAs必須(MUST)同時發行一完整CRL。

    BaseCRLNumber的值識別出CRL號在產生這delta-CRL中使用作爲起始點。delta-CRL
含有在基(base)CRL和當前CRL之間改變(和delta-CRL一道發出的)。它是由CA決定
是否提供delta-CRL。再次,一delta-CRL一定不(MUST NOT)要沒有一相應的完整CRL
被髮出的。CRLNumber的值爲delta-CRL和相應的完整CRL值必須(MUST)是完全相同
的。

    如果收到delta-CRL的CRLNumber是最後加工的超過一的delta-CRL,一個CRL用戶
必須(MUST)認爲建造從delta-CRLs 獲取的CRL是不完全的和不能使用(unusable)的。

   id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }

   deltaCRLIndicator ::= BaseCRLNumber

   BaseCRLNumber ::= CRLNumber

5.2.5發行發佈點

    發行發佈點是一關鍵CRL擴展,其爲一特定CRL識別出CRL發佈點的,和它指示是
否CRL僅爲末端實體證書、僅爲CA證書或者一套限制(limitied)理由代碼覆蓋撤銷。雖
然擴展是關鍵,不被保證工具支持這擴展所需要的。

    在CRL上簽名使用CA的私有密鑰。CRL發佈點沒有他們的自己密鑰對。如果CRL存
儲在X.500目錄服務系統,它存儲在與CRL發佈點相對應的目錄實體,可以和CA的目錄
實體不同。

    代碼和發佈點關聯的理由將在onlySomeReasons中被指定。如果onlySomeReasons不出
現,發佈點將含有所有撤銷理由代碼。CAs可以使用CRL發佈點基於損害和常規(compromise 
and routine)撤銷把CRL分成部分。這個情況,隨着理由代碼keyCompromise(1)和
cACompromise(2)的撤銷出現在一發布點,以及撤銷中有其他理由代碼出現在另一發布點。

    issuingDistributionPoint擴展含有一URL的地方,下列的語義學必須被假定:對象是經
過這CA發出的指向最當前CRL的指針。URI系統ftp、http、mailto[RFC1738]和ldap[RFC1778]
爲了這目的被定義。URI必須(MUST)是一絕對的、不相關的路徑名和必須(MUST)指
定主機。

   id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }

   issuingDistributionPoint ::= SEQUENCE {
        distributionPoint       [0] DistributionPointName OPTIONAL,
        onlyContainsUserCerts   [1] BOOLEAN DEFAULT FALSE,
        onlyContainsCACerts     [2] BOOLEAN DEFAULT FALSE,
        onlySomeReasons         [3] ReasonFlags OPTIONAL,
        indirectCRL             [4] BOOLEAN DEFAULT FALSE }

5.3 CRL入口擴展

    已經由ANSI X9和ISO/IEC/ITU爲X.509 v2CRLs定義的CRL入口擴展提供爲附加屬
性和CRL入口[X.509][X9.55]聯繫起來的方法。X.509 v2CRL格式也允許社區定義私有CRL
入口擴展攜帶那些社區所特有信息。每一在CRL入口中的擴展可以是關鍵或者非關鍵。如
果遭遇一它不知道如何處理的關鍵CRL入口擴展,CRL批准必須失敗。但是,一未被認出
的非關鍵CRL入口擴展可以被忽視。下列的部分提出,在InternetCRL入口和標準信息的位
置以內使用推薦的擴展。社區可以選擇使用附加CRL入口擴展;但是,應該謹慎在採用任
何在可以被使用在一般背景中CRL的入口中的關鍵擴展。

    在本文說明中使用所有的CRL入口擴展是非關鍵的。支持這些擴展因爲對CAs和應用
保證是可選的。但是,每當這信息是可用的,發行CRLs的CAs應該(SHOULD)包含理
由代碼(見5.3.1)和無效日期(見5.3.3)。

5.3.1理由代碼

    reasonCode是一非關鍵CRL入口擴展,其識別出證書撤銷的理由。CAs強烈被鼓勵在
CRL入口中包含有意義的理由代碼;但是,理由代碼CRL入口擴展應該(SHOULD)不存
在而不是使用非特指的(0)reasonCode值。

   id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 }

   -- reasonCode ::= { CRLReason }

   CRLReason ::= ENUMERATED {
        unspecified             (0),
        keyCompromise           (1),
        cACompromise            (2),
        affiliationChanged      (3),
        superseded              (4),
        cessationOfOperation    (5),
        certificateHold         (6),
        removeFromCRL           (8) }

5.3.2保持指示代碼

    保持指示代碼是一非關鍵CRL入口擴展,其提供一個登記指示標識符,其指示行動被
採取在遭遇一張證書之後,被放在着力點(hold)上的。

   id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }

   holdInstructionCode ::= OBJECT IDENTIFIER

    下列的指示準則被定義。使加工這擴展的應用(程序)保持必須(MUST)承認下列的
指示準則。

   holdInstruction    OBJECT IDENTIFIER ::=
                    { iso(1) member-body(2) us(840) x9-57(10040) 2 }

   id-holdinstruction-none   OBJECT IDENTIFIER ::= {holdInstruction 1}
   id-holdinstruction-callissuer
                             OBJECT IDENTIFIER ::= {holdInstruction 2}
   id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3}

    使遭遇一id-holdinstruction- callissuer的應用(程序)保證必須(MUST)給證書發行者
打電話或者丟棄證書。使遭遇一id- holdinstruction-reject的應用(程序)保證必須(MUST)
丟棄證書。着力點指示id-holdinstruction-none按語義地是等於不存在一holdInstructionCode,
而且它的使用強烈爲Internet PKI所反對。

5.3.3無效日期

    無效日期是一非關鍵CRL入口擴展,其定義日期被知道或者懷疑其私有密鑰被泄露或
者證書除此之外變得無效的。這日期可以在CRL入口中是與撤銷日期相比更早,其日前是
在其CA加工撤銷的日期。當一撤銷經過CA在CRL中第一次之後的時候,無效日期可以
在更早的CRLs的日期之前,但是撤銷日期不應該(SHOULD NOT)在更早的CRLs的日期
之前。每當這信息是可用的時候,CAs強烈被促進和CRL用戶共享它。

    GeneralizedTime值必須(MUST)是在格林威治標準時間中表示(Zulu)和必須(MUST)
是指定在這字段中如同在部分4.1.2.5.2中定義和解釋那樣。

   id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }

   invalidityDate ::=  GeneralizedTime

5.3.4證書發行者

    這CRL入口擴展識別出與一間接的CRL入口聯繫起來的證書發行者(間接CRL是指,
例如含有indirectCRL被指示者嵌入它的發行發佈點擴展)。如果這擴展在一間接CRL中第
一入口點上不存在,證書發行者默認CRL發行者。在一間接CRL中的隨後入口點上,如果
這擴展不存在,對入口的證書發行者和那個前面入口一樣。這字段被定義如下:

   id-ce-certificateIssuer   OBJECT IDENTIFIER ::= { id-ce 29 }

   certificateIssuer ::=     GeneralNames

    如果CAs保證發行CRLs的使用,這擴展總是關鍵的。如果工具忽視這擴展,它不能
正確地把CRL入口歸於證書。本文推薦工具識別出這擴展。

6證書路徑批准

    把證書路徑批准Internet PKI的過程建立在第12.4.3段的基礎上的[X.509]。證書路徑處
理驗證在主題識別名字和/或統治可用作替換名字與主題公開密鑰之間綁定。綁定被約束限
制在包括路徑的證書中指定。基本約束和策略約束擴展允許證書路徑處理使決策過程自動化
的邏輯。

    這部分描繪有效證書路徑的算法。本文說明的工具保證執行這算法不是必要的,但是從
處理過程必須(MUST)官能地等於外部行爲產生的結果。只要它得到正確結果任何算法可
以被一特殊工具使用。

    在部分6.1中,文本描繪基本路徑批准。文本認爲所有的有效路徑以經過一單一的"最
受信任的CA"("most-trusted CA")發出的證書開始。算法需要CA的公開密鑰、CA的名字、
公開密鑰的有效期以及任何在可以使用這密鑰有效的一套路徑上的約束。

   "最受信任的CA"是一個策略問題:它能是一在等級制度的PKI中的根CA;發行證明者
的自己證書(s)的CA;或者任何在一網絡PKI中另一CA。路徑批准過程不管對"絕大部
分受信任的CA"("most-trusted CA.")的選擇如何都一樣。

    第6.2段描繪基本路徑批准算法的擴展。兩種情況被討論:一種情況指路徑可以從幾個
信任的CAs之一開始;另一種情況與PEM結構兼容性被需要。

6.1基本路徑批准

    文本假定那個受信任的公開密鑰(和相關信息)在一張"自籤"("self-signed")證書中被
含有這個簡化路徑處理過程的描繪。注意在自簽證書上的簽名不提供任何安全服務。受信任
的公開密鑰(和相關信息)可以在其它格式中得到;信息由於其他的過程過去經常得到它和
保衛而被信任。

    路徑批准的目標是要驗證在一主題識別名字或者主題可替換名字以及如同在末端中代
表那樣的主題公開密鑰之間的綁定,把實體證書建立在"最受信任的CA"("most-trusted CA")
的公開密鑰的基礎上。這個需要得到一連串的支持那個綁定的證書。履行得到這後果手續是
超出了這部分的描述範圍。

    文本的下列部分也假定如同在本文以內建議那樣,證書不使用主題或者唯一標識符字段
或者私有關鍵擴展。但是,如果這些成分出現在證書中,他們必須(MUST)被加工。最後,
策略限定語爲了透明也被忽視。

    一證書路徑是一連串的n個證書:

      * for all x in {1,(n-1)}, the subject of certificate x is the
      issuer of certificate x+1.
      * certificate x=1 is the the self-signed certificate, and
      * certificate x=n is the end entity certificate.

    這部分假定向路徑處理邏輯提供下列的輸入:

(a) 一證書路徑長度n;

(b) 一套初始策略標識符(每個包括一連串的策略要素標識符),其識別出一或更
多證書策略,任何一個的將爲了證書路徑處理或者特殊值"any-policy"是可接
受的策略;

(c) 當前日期/時間 (如果證書路徑處理模塊不可用);和

(d) 路徑的有效性應該確定的時間T。(這個可以是當前日期/時間,或者一些在
過去中指)。

    從輸入,過程初始化五個狀態變量:

(a) 可接受的策略設置:一套包括,連同通過策略映射認爲是等於策略以公開密
鑰用戶承認的策略或者(多個)策略的證書策略標識符。可接受策略設置的
初始值是特殊值"any-policy"。

(b) 限制子樹:一套定義在所有的在證書路徑中隨後證書中主題名字以內降下的
根名字的一套子樹。初始值是"unbounded"。

(c) 排除子樹:定義一套子樹,在證書路徑中隨後證書中沒有主題名字以內可以
降下的根名字。初始值是"empty"。

(d) 明確策略:指示如果一個明確策略標識符被需求的整數。整數指示在這個需
求被利用的路徑中第一張證書。一旦設定,這變量就可以被減少但是可以不
被增加。(也就是說如果一張在路徑需求明確策略標識符的證書,隨後的證書
不能去除這個需求)。初始值是n+1。

(e) 策略映射:一指示如果策略映射被允許的整數。整數指示最後的證書(last 
certificate)在哪一個策略映射可以被應用。一旦設定,這變量就可以被減少
但是可以不被增加。(也就是說如果一張在路徑中的證書具體指定策略映射不
被允許,它不能被隨後的證書overriden)。初始值是n+1。

    動作下面被描寫,經過路徑處理軟件爲每一張證書i=1通過n執行。自簽證書是證書i=1,
末端實體證書是i=n.處理連續地被執行,因此加工證書i對加工證書(i+1)狀態變量有影響。
注意那個行動(g)通過(l)不適合於末端實體證書(證書n)。

    被執行的路徑處理行動是:

(a) 驗證基本證書信息,包含:

(1) 在證書上簽名使用從證書i-1主題公開密鑰(在特殊情況i=1中,這步可以被
刪掉;如果不是這樣,使用從同樣的證書主題公開密鑰)。
(2) 包含時間T的證書有效期。
(3) 證書在時刻T還沒有被撤銷和時間T以前保持狀態(hold status)不是現時。
(這個可以通過得到適合的CRL或者狀況信息、或者out-of-band機制被決
定)。和
(4) 主題和發行者名字鏈條正確(也就是說這張證書的發行者是前一證書的主
題)。

(b) 驗證那個主題名字和subjectAltName擴展(關鍵或者非關鍵)是和約束的子
樹狀態變量一致。

(c) 驗證那個主題名字和subjectAltName擴展(關鍵或者非關鍵)是和排除子樹
狀態變量一致。

(d) 驗證策略信息是和初始策略裝置一致:

(1) 如果明確策略狀態變量小於獲等於i,在證書中策略標識符將在初始策略
裝置中;和
(2) 如果策略映射變量小於獲等於i,策略標識可以不被映射。

(e) 驗證策略信息是和可接受策略裝置一致:

(1) 如果把證書策略擴展標記爲關鍵,擴展和可接受策略制定的策略的交點
將是non-null;

(2) 給可接受策略裝置分配結果交點(resulting intersection)作爲它的新值。

(f) 驗證可接受策略裝置和初始策略裝置的交點是non-null。

(g) 識別和加工任何在證書中其他關鍵擴展。

(h) 驗證(如同在一basicConstraints擴展中指定那樣或者如同out-of-band驗證那
樣)證書是一張CA證書。

(i) 如果permittedSubtrees存在於證書中,使約束的子樹狀態變量爲它的前一交
點值和在擴展字段中指示值。

(j) 如果excludedSubtrees存在於證書中,使排除子樹狀態變量爲它的前一聯合
值和在擴展字段中指示值。

(k) 如果一策略約束擴展包含在證書內,如下修改明確策略和策略映射狀態變量:

(1) 如果requireExplicitPolicy存在和有值r,明確策略狀態變量被設置爲
它的當前值最小值以及r和i的總和(在序列中當前證書)。

(2) 如果inhibitPolicyMapping存在和有值q,策略映射狀態變量被設置爲
它的當前值最小值以及q和i的總和(在序列中當前證書)。

(l) 如果密鑰使用擴展標記爲關鍵,保證keyCertSign位被設定。

    如果上述任何一項檢驗失敗,過程結束。返回一失敗指示和一適合的理由。如果上述在
末端實體上的檢驗沒有失敗,過程終止,連同一套所有在證書中的策略限定語值返回成功指
示。

6.2擴展路徑批准

    存在於6.1中的路徑批准算法建立在幾個簡化假定的基礎上(例如,所有的有效路徑開
始於一單個受信任的CA)。這算法可以擴展到假定不支持的情況。

    這過程可以被擴展到通過向批准模塊提供一套自簽證書的多重受信任的CAs。在這個情
況中,一有效路徑能以任何一個的自簽證書開始。信任路徑中的侷限性可以爲任何特殊密鑰
被自簽證書的擴展包括進去。這樣,自簽證書允許路徑批准模塊自動把本地安全策略和要求
包括進去。

    它也指定一上述證書路徑處理過程的擴展版本,其結果是和PEM[RFC 1422]的定義完
全相同缺省的行爲的是可能的。在這擴展版本中,向過程附加的輸入是一或更多策略證明權
威(PCAs)名字的清單和一在PCA被預期證書路徑中位置的指示者。在命名的PCA位置,
CA名字與這清單作比較。如果一識別出的PCA名字被找出,那麼一SubordinateToCA的約
束不言明地爲剩下的部分被假定的證書路徑和處理繼續。如果沒有有效PCA名字被找出,
並且如果證書路徑不能基於標識出的策略有效,那麼認爲證書路徑是無效的。

7算法技術支持

    這部分描述可以在本文使用的密碼學算法。這部分描繪單向哈希函數和數字簽名算法,
這些算法可以使用在證書和CRLs上簽名和爲包含在一張證書的公開密鑰識別出OIDs。

    遵照CAs和應用不需要必須支持在這部分中描繪算法或者算法標識符。但是,使用這
裏識別出算法的CAs和應用保證必須(MUST)如同指定那樣支持他們。

7.1個單向哈希函數

    這部分爲在Internet PKI中使用的單向哈希函數。單向哈希函數也稱爲信息摘要算法。
SHA 1爲Internet PKI更受歡迎的單向哈希函數。但是,PEM使用爲證書MD2[RFC 1422][RFC 
1423]和MD5在其它遺留應用中被使用。爲此,MD2和MD5包含在本文內。

7.1.1 MD2單向哈希函數

   MD2爲RSA數據安全(RSA Data Security公司)Ron Rivest發明。RSA數據安全還沒
有把MD2算法放入公開領域。還有,RSA數據安全已同意給爲非商業因特網私有增強郵件
(Internet Privacy-Enhanced Mail)使用MD2的許可。爲此,MD2可以繼續在PEM證書中
使用,但是SHA 1被首選。MD2生產一輸出128位"hash"。MD2在RFC 1319[RFC 1319]
中被完整描繪。

    在1995年5月的密碼學'95會議上的有選擇區域(Selected Areas),Rogier和Chauvaud
提出對MD2的攻擊幾乎發現衝突[RC95]。當一能找出產生同樣的信息摘要的兩個不同信息
的時候,衝突發生。一在MD2中校驗和操作是唯一的停留對攻擊的成功障礙。爲此,MD2
在新的應用中使用是灰心喪氣的。它是仍然合理的在使用MD2驗證存在的簽名,當在MD2
中發現衝突時不能使一個攻擊者能發現新信息與前一個計算的哈希值相同。

7.1.2 MD5單向哈希函數

    MD5由RSA數據安全的Ron Rivest發展。RSA數據安全已把MD5算法放入公共領域。
MD5生產一輸出的128位"hash"。MD5在RFC 1321[RFC 1321]中被完整描繪。

    Den Boer和Bosselaers[DB94]已爲MD5找到pseudo-collisions衝突,但是事實上沒有其
它可知的密碼分析結果。MD5爲新應用的使用是灰心喪氣的。使用MD5驗證現存的簽名仍
然是合乎情理的。

7.1.3 SHA1單向哈希函數

    SHA 1被美國政府發展。SHA 1生產一輸出的160位"hash"。SHA 1在FIPS 180-1[FIPS 
180-1]被完整描繪。

    SHA 1是作爲RSA和DSA簽名算法(見7.2)的使用選擇的單向哈希函數。

7.2簽名算法

    按照這標準描繪的證書和CRLs可以使用任何公開密鑰簽名算法簽名。證書或者CRL
通過一個算法標識符指示算法,其出現在一證書或者CertificateList中signatureAlgorithm字
段。這個算法標識符是一OID和可選的已結合參數。這部分識別出算法標識符和參數,將
在一證書或者CertificateList中signatureAlgorithm字段中被使用的。

    RSA和DSA是在Internet中使用最受歡迎的簽名算法。簽名算法總是和在部分7.1中
描述的一個單向哈希函數一起被使用。

    簽名算法和單向哈希函數經常在一張證書或者CRL上簽名通過一個算法標識符的使用
指示。一個算法標識符是一OID和可以包含的結合參數。這部分爲RSA和DSA識別出OIDS。
每一算法參數成分的內容變化:向每一算法提供細節。

    數據被簽名(例如單向哈希函數輸出值)被格式化簽名算法使用。然後,一私有密鑰操
作(例如RSA加密)被執行產生簽名值。簽名值然後作爲ASN.1中作爲BIT STRING類型
編碼並且在簽名字段中證書或者CertificateList中被包含。

7.2.1 RSA簽名算法

    關於RSA算法專利聲明在本文的後面提供。

    RSA算法被命名以紀念它的發明者:Rivest,Shamir和Adleman(三個人名字頭字母的
組合――譯者注)。本文包含建立在RSA非對稱加密算法基礎上的三種簽名算法。簽名算法
把RSA與MD2,MD5或者SHA 1單向的哈希函數結合起來。

    MD2和RSA加密算法的簽名算法在PKCS#1[RFC 2313]中被定義。如同在RFC 2313
中定義那樣,ASN.1 OID用於識別出這簽名算法是:

        md2WithRSAEncryption OBJECT IDENTIFIER  ::=  {
            iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
            pkcs-1(1) 2  }

    MD5和RSA加密算法的簽名算法在PKCS#1[RFC 2313]中被定義。如同在RFC 2313
中定義那樣,ASN.1 OID用於識別出這簽名算法是:

        md5WithRSAEncryption OBJECT IDENTIFIER  ::=  {
            iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
            pkcs-1(1) 4  }

    SHA 1和RSA加密算法的簽名算法通過使用填充或者編碼被應用,其在PKCS#1[RFC 
2313]中描繪。信息摘要被計算使用SHA 1哈希算法。使用ASN.1對象標識符識別出這簽名
算法:

        sha-1WithRSAEncryption OBJECT IDENTIFIER  ::=  {
            iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
            pkcs-1(1) 5  }

    當任何這些三個OIDs出現是在ASN.1類型的AlgorithmIdentifier的時候,類型參數的
成分將是ASN.1類型NULL。

    RSA簽名產生過程和編碼的結果在RFC 2313中詳細被描繪。

7.2.2 DSA簽名算法

    關於DSA專利聲明在本文的後面被描述。

    數字的簽名算法(DSA)被稱爲數字的簽名標準(DSS)。DSA被美國政府發展,DSA
與SHA 1單向哈希函數結合使用。DSA在FIPS 186[FIPS 186]中被完整描繪。ASN.1 OIDs
用於標識出這簽名算法是:

           id-dsa-with-sha1 ID  ::=  {
                   iso(1) member-body(2) us(840) x9-57 (10040)
                   x9cm(4) 3 }

    id-dsa-with-sha1算法標識符作爲算法字段出現在AlgorithmIdentifier的地方,編碼中算
法字段將刪掉參數字段。也就是說AlgorithmIdentifier將是一連串的一個成分- the OBJECT 
IDENTIFIER id-dsa-with-sha1。

在證書的subjectPublicKeyInfo字段中發行人的DSA參數將提出簽名的驗證申請。

   當簽名的時候,DSA算法產生兩個值。通常把這些值觀稱作r和s。很容易地傳遞這兩
個值,他們將是ASN.1編碼使用下列的ASN.1結構:

           Dss-Sig-Value  ::=  SEQUENCE  {
                   r       INTEGER,
                   s       INTEGER  }

7.3主題公開密鑰算法

    按照本文描繪證書可以爲任何公開密鑰算法傳送一公開密鑰。證書通過一個算法標識符
指示算法。這個算法標識符是一OID和可選參數的結合。

    這部分爲RSA,DSA和Diffie Hellman算法識別出首選OIDs和參數。當發行證書,爲
這些算法包含公開密鑰的時候,使CAs保證應用(程序)識別出OIDs。至少要識別出OID
標識符。

7.3.1 RSA密鑰

        pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
                       rsadsi(113549) pkcs(1) 1 }

        rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1}

    打算讓rsaEncryption OID在有類型AlgorithmIdentifier的值算法字段中被使用。參數字
段將爲這個算法標識符有ASN.1類型NULL。

    RSA公開密鑰將被編碼使用ASN.1類型RSAPublicKey:

      
      RSAPublicKey ::= SEQUENCE {
         modulus            INTEGER, -- n
         publicExponent     INTEGER  -- e -- }

    模n,和publicExponent是公共密鑰質數e。DER編碼RSAPublicKey是BIT STRING 
subjectPublicKey的值。

    這OID在公開密鑰證書中爲即在RSA簽名密鑰,又在RSA加密密鑰被同樣使用。密
鑰的申請可以在密鑰使用字段中被指示(見4.2.1.3)。一單一的密鑰的同時用於簽名和加密
目的使用不被推薦,但是不被禁止。

    如果keyUsage擴展是存在於一張傳送一RSA公開密鑰的末端實體證書中,任何有下列
值結合可以存在:digitalSignature;nonRepudiation;keyEncipherment;和dataEncipherment。
如果keyUsage擴展是存在於一張傳送一RSA公開密鑰的CA證書中,任何有下列值結合可
以存在:digitalSignature;nonRepudiation;keyEncipherment;dataEncipherment;keyCertSign;   
和cRLSign。但是,本文推薦(RECOMMENDS)如果keyCertSign或者cRLSign存在,則
keyEncipherment和dataEncipherment不應該存在。

7.3.2 Diffie-Hellman密鑰交換密鑰

    在本文中Diffie HellmanOID支持由ANSI X9.42[X9.42]定義。

        dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2)
                  us(840) ansi-x942(10046) number-type(2) 1 }

    打算讓dhpublicnumber OID在類型AlgorithmIdentifier的值算法字段中被使用。那個類
型的參數字段爲任何這算法定義(ANY DEFINED BY)的algorithm-specific句法、有ASN.1
類型DomainParameters。

        
        DomainParameters ::= SEQUENCE {
              p       INTEGER, -- odd prime, p=jq +1
              g       INTEGER, -- generator, g
              q       INTEGER, -- factor of p-1
              j       INTEGER OPTIONAL, -- subgroup factor
              validationParms  ValidationParms OPTIONAL }

        ValidationParms ::= SEQUENCE {
              seed             BIT STRING,
              pgenCounter      INTEGER }

   類型DomainParameters的字段有下列的定義:

      p 識別出定義在Galois字段中素數p;

      g 指定次序g的乘法子羣的生產器;

      q 指定因素因子p-1;

      j 可選的指定值,其滿足等式p=jq+1支持組參數的可選覈實;

      種子隨意地指定作爲位字符參數使用作爲種子系統參數產生過程;和

      pgenCounter隨意地指定整數值輸出作爲系統參數的部分產生過程起動。

    如果任一個參數產生成分(pgencounter或者種子)被提供,其他將同樣存在。

    Diffie-Hellman公開密鑰將作爲ASN.1整數類型編碼;這個編碼將是subjectPublicKey
成分(a BIT STRING)subjectPublicKeyInfo數據元素的內容(即值)被使用。

DHPublicKey ::= INTEGER -- public key, y = g^x mod p

    如果keyUsage擴展存在於一張傳送一DH公開密鑰的證書中,下列的值可以存在:
keyAgreement;encipherOnly;和decipherOnly。最多一個encipherOnly和decipherOnly將在
keyUsage擴展中存在。

7.3.3 DSA簽名密鑰

    數字的簽名算法(DSA)也是以是數字的簽名標準(DSS)而聞名。DSA OID按照本
文技術支持是

        id-dsa ID ::= { iso(1) member-body(2) us(840) x9-57(10040)
                  x9cm(4) 1 }

    id-dsa算法句法包含可選參數。通常把這些參數稱作p,q和g。當刪掉的時候,參數成
分將完全被刪掉。也就是說AlgorithmIdentifier將是一連串的一個成分-對象標識符id-dsa。

    如果DSA算法參數是存在於subjectPublicKeyInfo AlgorithmIdentifier,參數被包含使用
下列的ASN.1結構:

        Dss-Parms  ::=  SEQUENCE  {
            p             INTEGER,
            q             INTEGER,
            g             INTEGER  }

   如果DSA算法參數是不在subjectPublicKeyInfo AlgorithmIdentifier和CA在主題證書上
簽名使用DSA,那麼證書發行者的DSA參數適用於主題的DSA密鑰。如果DSA算法參數
是不在subjectPublicKeyInfo AlgorithmIdentifier和CA在主題證書上簽名使用除了DSA簽名
算法,那麼主題的DSA參數被另一手段發佈。如果subjectPublicKeyInfo AlgorithmIdentifier
字段刪掉參數成分和CA簽署主題隨着一除了DSA簽名算法,那麼客戶將丟棄證書。

    當簽名的時候,DSA算法產生兩個值。通常把這些值稱作r和s。容易傳遞作爲簽名的
兩個值,他們的ASN.1編碼使用下列的ASN.1結構:

        Dss-Sig-Value  ::=  SEQUENCE  {
            r             INTEGER,
            s             INTEGER  }

    編碼簽名是在一證書或者CertificateList中以BIT STRING類型簽名值被傳送。

    DSA公開密鑰將是ASN.1 DER作爲整數(INTEGER)類型編碼;這個編碼將是
subjectPublicKey成分(a BIT STRING)SubjectPublicKeyInfo數據元素的內容(即,值)被
使用。

        DSAPublicKey ::= INTEGER -- public key, Y

    如果keyUsage擴展是存在於一張傳送一DSA公開密鑰的末端實體證書中,任何有下列
值結合可以存在:digitalSignature;和nonRepudiation。

    如果keyUsage擴展是存在於一張傳送一DSA公開密鑰的CA證書中,任何有下列值結
合可以存在:digitalSignature;nonRepudiation;keyCertSign;和cRLSign。

8參考資料

   [FIPS 180-1]  Federal Information Processing Standards Publication
                 (FIPS PUB) 180-1, Secure Hash Standard, 17 April 1995.
                 [Supersedes FIPS PUB 180 dated 11 May 1993.]

   [FIPS 186]    Federal Information Processing Standards Publication
                 (FIPS PUB) 186, Digital Signature Standard, 18 May
                 1994.

   [RC95]        Rogier, N. and Chauvaud, P., "The compression function
                 of MD2 is not collision free," Presented at Selected
                 Areas in Cryptography '95, May 1995.

   [RFC 791]     Postel, J., "Internet Protocol", STD 5, RFC 791,
                 September 1981.

   [RFC 822]     Crocker, D., "Standard for the format of ARPA Internet
                 text messages", STD 11, RFC 822, August 1982.

   [RFC 1034]    Mockapetris, P., "Domain names - concepts and
                 facilities", STD 13, RFC 1034, November 1987.

   [RFC 1319]    Kaliski, B., "The MD2 Message-Digest Algorithm," RFC
                 1319, April 1992.

   [RFC 1321]    Rivest, R., "The MD5 Message-Digest Algorithm," RFC
                 1321, April 1992.

   [RFC 1422]    Kent, S.,  "Privacy Enhancement for Internet Electronic
                 Mail: Part II: Certificate-Based Key Management," RFC
                 1422, February 1993.

   [RFC 1423]    Balenson, D., "Privacy Enhancement for Internet
                 Electronic Mail: Part III: Algorithms, Modes, and
                 Identifiers," RFC 1423, February 1993.

   [RFC 1519]    Fuller, V., Li, T., Yu, J. and K. Varadhan. "Classless
                 Inter-Domain Routing (CIDR): an Address Assignment and
                 Aggregation Strategy", RFC 1519, September 1993.

   [RFC 1738]    Berners-Lee, T., Masinter L., and M. McCahill.
                 "Uniform Resource Locators (URL)", RFC 1738, December
                 1994.

   [RFC 1778]    Howes, T., Kille S., Yeong, W. and C. Robbins. "The
                 String Representation of Standard Attribute Syntaxes,"
                 RFC 1778, March 1995.

   [RFC 1883]    Deering, S. and R. Hinden. "Internet Protocol, Version
                 6 (IPv6) Specification", RFC 1883, December 1995.

   [RFC 2119]    Bradner, S., "Key words for use in RFCs to Indicate
                 Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC 2247]    Kille, S., Wahl, M., Grimstad, A., Huber, R. and S.
                 Sataluri. "Using Domains in LDAP/X.500 Distinguished
                 Names", RFC 2247, January 1998.

   [RFC 2277]    Alvestrand, H., "IETF Policy on Character Sets and
                 Languages", RFC 2277, January 1998.

   [RFC 2279]    Yergeau, F., "UTF-8, a transformation format of ISO
                 10646", RFC 2279, January 1998.

   [RFC 2313]    Kaliski, B., "PKCS #1: RSA Encryption Version 1.5", RFC
                 2313, March 1998.

   [SDN.701]     SDN.701, "Message Security Protocol 4.0", Revision A
                 1997-02-06.

   [X.208]       CCITT Recommendation X.208: Specification of Abstract
                 Syntax Notation One (ASN.1), 1988.

   [X.501]       ITU-T Recommendation X.501: Information Technology -
                 Open Systems Interconnection - The Directory: Models,
                 1993.

   [X.509]       ITU-T Recommendation X.509 (1997 E): Information
                 Technology - Open Systems Interconnection - The
                 Directory: Authentication Framework, June 1997.

   [X.520]       ITU-T Recommendation X.520: Information Technology -
                 Open Systems Interconnection - The Directory: Selected
                 Attribute Types, 1993.

   [X9.42]       ANSI X9.42-199x, Public Key Cryptography for The
                 Financial Services Industry: Agreement of Symmetric
                 Algorithm Keys Using Diffie-Hellman (Working Draft),
                 December 1997.

   [X9.55]       ANSI X9.55-1995, Public Key Cryptography For The
                 Financial Services Industry: Extensions To Public Key
                 Certificates And Certificate Revocation Lists, 8
                 December, 1995.

   [X9.57]        ANSI X9.57-199x, Public Key Cryptography For The
                 Financial Services Industry: Certificate Management
                 (Working Draft), 21 June, 1996.

9知識產權

    IETF已經通知對於某些或者全部包含在本文說明的提出知識產權聲明。更多信息查閱
要求資訊權利的在線清單。

    IETF關於任何知識產權或者其它權利的有效性或者範圍沒有擔任職務,可以被要求得
到屬於工具或者使用的技術描繪在本文中或者擴展到向其在這樣權利下任何許可證可以或
者不可以有效;它也不代表它已做出任何努力認爲任何這樣權利是等同的。關於IETF的關
於標準軌跡(standards-track)和標準相關(standards-related)的信息文檔能在BCP 11中被
找出。拷貝的聲明權利對於出版和任何保證的執照可用,或者嘗試得到一個普遍執照結果或
者通過工具批准能被爲這樣所有人的權利或者在本文說明使用的用戶從IETF祕書得到。

10安全考慮

    本文說明的多數是專用於證書和CRLs的格式和內容的。既然證書和CRLs是數字簽名
的,沒有附加完整性服務是必然的。無論證書還是CRLs都不需求保持隱祕、和無限制的和
匿名訪問證書和CRLs的通路沒有安全含意。

但是,超出了本文說明範圍的安全因素將影響向證書用戶提供的保證。這部分強調嚴重
問題,應該被使用工具者,行政管理人員和用戶考慮的。

    經過CAs和Ras執行過程非常批准主題的他們的公開密鑰的身份的綁定應該被放入證
書的保證。依靠聚會可以希望審覈CA的證書實踐聲明(certificate practice statement)。當向
其它CAs分發證書的時候,這可以是特別重要的。

    一單一的密鑰對同時用於爲簽名和其它目的使用是強烈阻止的。獨立密鑰對的爲簽名和
密鑰管理的使用提供對用戶幾點好處。和密鑰管理密鑰的丟失或者揭發不同,把衍生結果和
簽名密鑰的丟失或者揭發聯繫起來。使用獨立密鑰對允許一平衡的和有彈性回答。同樣,爲
每一密鑰對不同的有效性時期或者密鑰長度可以在一些應用環境中是適合的。不幸的是,一
些遺留(傳統)應用(例如SSL)爲簽名和密鑰管理使用一單一的密鑰對。

    爲提供保護私有密鑰是一個在保持安全方面關鍵因素。在一小規模,用戶的未能保衛他
們的私有密鑰將允許一個攻擊者假裝是他們或者破譯他們的個人信息。大規模,一CA的私
有簽名密鑰的損害可以有一災難的影響。如果一個攻擊者得到私有密鑰(不被注意到的),
攻擊者可以發行假的證書和CRLs。假的證書和CRLs的存在將損壞對系統的信賴。如果損
害被察覺,所有的發出的CA證書將被取消,阻礙在它的其它CAs的用戶和用戶之間服務。
在這樣損害以後重建將是有問題的,所以建議CAs執行一強烈技術措施的組合(例如抗幹
擾性(tamper-resistant)的密碼學的模塊)和適合的避開這樣一事件的管理過程(例如職責
的分開)。

    一CA的私有簽名密鑰的丟失可能也是有問題的。CA將不能生產CRLs或者執行正常
的密鑰滾翻。建議Cas維持簽名密鑰的備份。密鑰備份過程的安全是一個在避開密鑰損害方
面關鍵因素。

  撤銷信息的有效性和刷新將影響應該被放入一張證書的保證程度。在證書自然到期的同
時,在它的自然一生事件可以發生,其在主題和公開密鑰之間綁定的否定。如果撤銷信息是
不合時宜或者不可獲得的,和綁定聯繫起來擔保明顯減少。同樣,在第6段中描繪路徑批准
算法的刪掉撤銷檢查的工具提供與支持它的那些相比更少的保證。

    路徑批准算法取決於公開密鑰(和其他信息)關於一或更多受信任的CAs的確定知識。
當它最終確定信任一提供的證書時,決定信任一CA是一個重要的決定。授權(通常以一張
"自我簽名"證書的形式)發佈受信任的CA公開密鑰是一關鍵安全,其超出了本文說明的過
程範圍。

    此外,其一密鑰損害或者CA爲一受信任的CA發生失敗,用戶將需要修改,向路徑批
準例行工作提供信息。選擇太多受信任的CAs將使受信任CA信息變得難於維持。另一方
面,僅選擇一個受信任的CA將用戶限制到僅一個社區有效,除非全球性PKI出現。

    發佈證書過程的工具的質量也可以影響提供保證的程度。在第6段中描繪路徑批准算法
信賴受信任的CA信息的完整性,和特別公開密鑰的完整性和受信任的CAs的結合。通過
代替公開密鑰(相對其攻擊者私有密鑰的),一個攻擊者能欺騙用戶接受虛假證書。

    在一密鑰和證書主題之間綁定不能是與密碼學的模塊工具和算法用於產生簽名相比更
強壯。短密鑰長度或者弱哈希算法將限制一張證書的功用。CAs被促進指出密碼學的進展,
所以他們能使用高強度密碼學的技術。此外,CAs應該拒絕向產生弱簽名的CAs或者末端
實體發行證書。

    名字比較規則的不一致應用可能產生接受的無效X.509證明路徑結果或者拒絕有效的
證書路徑等。X.500系列的文本說明下定義了關於比較唯一名字的規則而不管這些情況、字
符集、多重字符(multi-character)空白子串或者打頭的和結尾的空白字符等需求比較的字
符。本文說明放鬆這些需求,在一最低限度需要支持二進制比較。

    CAs將向在經過後面CA發出的證書中發行者字段中可識別名字同一地將在一張CA證
書的主題字段中可識別名字進行編碼。如果CAs使用不同encodings(規則),本文說明的
工具可能對包含這張證書的路徑識別名字鏈條失敗。因此,有效路徑將被拒絕。

    此外,將向編碼同一地被陳述在主題字段或者subjectAltName擴展中使用爲可識別名字
名字約束。如果不,(1)作爲excludedSubTrees名字約束陳述將不匹配以及無效路徑將被接
收,(2)和作爲permittedSubtrees名字約束表示將不匹配以及有效路徑將被拒絕。避免接受
無效路徑,CAs應該對可能作爲permittedSubtrees出現的地方陳述可識別名字約束。

附錄A. PsuedoASN.1結構和OIDs

    這部分描繪數據對象,通過在"ASN.1-like"句法中PKI成分一致應用。這句法是1988
和1993 ASN.1句法的混合。擴展了1988 ASN.1句法的1993 UNIVERSAL類型
UniversalString,BMPString和UTF8String。

    ASN.1句法不允許在ASN.1模塊中包括類型語句,和1993 ASN.1標準不允許在模塊中
使用1988句法的新UNIVERSAL類型的聲明。因此,這模塊不遵從任一ASN.1標準的版本。

    這附錄可以通過爲UNIVERSAL類型用1988捕獲完全(catch-all) "ANY"代替defintions
轉變成1988 ASN.1。

A.1 明示目標模塊(Explicitly Tagged Module),1988句法

PKIX1Explicit88 {iso(1) identified-organization(3) dod(6) internet(1)
  security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit-88(1)}

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

-- EXPORTS ALL --

-- IMPORTS NONE --

-- UNIVERSAL Types defined in '93 and '98 ASN.1
-- but required by this specification

UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
        -- UniversalString is defined in ASN.1:1993

BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
      -- BMPString is the subtype of UniversalString and models
       -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1

UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
        -- The content of this type conforms to RFC 2279.

--
-- PKIX specific OIDs

id-pkix  OBJECT IDENTIFIER  ::=
         { iso(1) identified-organization(3) dod(6) internet(1)

                    security(5) mechanisms(5) pkix(7) }
-- PKIX arcs

id-pe OBJECT IDENTIFIER  ::=  { id-pkix 1 }
        -- arc for private certificate extensions
id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
        -- arc for policy qualifier types
id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
        -- arc for extended key purpose OIDS
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
        -- arc for access descriptors

-- policyQualifierIds for Internet policy qualifiers

id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
        -- OID for CPS qualifier
id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
        -- OID for user notice qualifier

-- access descriptor definitions

id-ad-ocsp      OBJECT IDENTIFIER ::= { id-ad 1 }
id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }

-- attribute data types --

Attribute       ::=     SEQUENCE {
        type            AttributeType,
        values  SET OF AttributeValue
                -- at least one value is required -- }

AttributeType           ::=   OBJECT IDENTIFIER

AttributeValue          ::=   ANY

AttributeTypeAndValue           ::=     SEQUENCE {
        type    AttributeType,
        value   AttributeValue }

-- suggested naming attributes: Definition of the following
--  information object set may be augmented to meet local
--  requirements.  Note that deleting members of the set may
--  prevent interoperability with conforming implementations.
--  presented in pairs: the AttributeType followed by the
--  type definition for the corresponding AttributeValue

--Arc for standard naming attributes
id-at           OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4}

-- Attributes of type NameDirectoryString
id-at-name              AttributeType   ::=     {id-at 41}
id-at-surname           AttributeType   ::=     {id-at 4}
id-at-givenName         AttributeType   ::=     {id-at 42}
id-at-initials          AttributeType   ::=     {id-at 43}
id-at-generationQualifier       AttributeType   ::=     {id-at 44}

X520name        ::= CHOICE {
      teletexString         TeletexString (SIZE (1..ub-name)),
      printableString       PrintableString (SIZE (1..ub-name)),
      universalString       UniversalString (SIZE (1..ub-name)),
      utf8String            UTF8String (SIZE (1..ub-name)),
      bmpString             BMPString (SIZE(1..ub-name))   }

--

id-at-commonName        AttributeType   ::=     {id-at 3}

X520CommonName  ::=      CHOICE {
      teletexString         TeletexString (SIZE (1..ub-common-name)),
      printableString       PrintableString (SIZE (1..ub-common-name)),
      universalString       UniversalString (SIZE (1..ub-common-name)),
      utf8String            UTF8String (SIZE (1..ub-common-name)),
      bmpString             BMPString (SIZE(1..ub-common-name))   }

--

id-at-localityName      AttributeType   ::=     {id-at 7}

X520LocalityName ::= CHOICE {
      teletexString       TeletexString (SIZE (1..ub-locality-name)),
      printableString     PrintableString (SIZE (1..ub-locality-name)),
      universalString     UniversalString (SIZE (1..ub-locality-name)),
      utf8String          UTF8String (SIZE (1..ub-locality-name)),
      bmpString           BMPString (SIZE(1..ub-locality-name))   }

--

id-at-stateOrProvinceName       AttributeType   ::=     {id-at 8}

X520StateOrProvinceName         ::= CHOICE {
      teletexString       TeletexString (SIZE (1..ub-state-name)),
      printableString     PrintableString (SIZE (1..ub-state-name)),
      universalString     UniversalString (SIZE (1..ub-state-name)),
      utf8String          UTF8String (SIZE (1..ub-state-name)),
      bmpString           BMPString (SIZE(1..ub-state-name))   }

--

id-at-organizationName          AttributeType   ::=     {id-at 10}

X520OrganizationName ::= CHOICE {
  teletexString     TeletexString (SIZE (1..ub-organization-name)),
  printableString   PrintableString (SIZE (1..ub-organization-name)),
  universalString   UniversalString (SIZE (1..ub-organization-name)),
  utf8String        UTF8String (SIZE (1..ub-organization-name)),
  bmpString         BMPString (SIZE(1..ub-organization-name))   }

--

id-at-organizationalUnitName    AttributeType   ::=     {id-at 11}

X520OrganizationalUnitName ::= CHOICE {
 teletexString    TeletexString (SIZE (1..ub-organizational-unit-name)),
 printableString        PrintableString
                      (SIZE (1..ub-organizational-unit-name)),
 universalString        UniversalString
                      (SIZE (1..ub-organizational-unit-name)),
 utf8String       UTF8String (SIZE (1..ub-organizational-unit-name)),
 bmpString        BMPString (SIZE(1..ub-organizational-unit-name))   }

--

id-at-title     AttributeType   ::=     {id-at 12}

X520Title ::=   CHOICE {
      teletexString         TeletexString (SIZE (1..ub-title)),
      printableString       PrintableString (SIZE (1..ub-title)),
      universalString       UniversalString (SIZE (1..ub-title)),
      utf8String            UTF8String (SIZE (1..ub-title)),
      bmpString             BMPString (SIZE(1..ub-title))   }

--

id-at-dnQualifier       AttributeType   ::=     {id-at 46}
X520dnQualifier ::=     PrintableString

id-at-countryName       AttributeType   ::=     {id-at 6}
X520countryName ::=     PrintableString (SIZE (2)) -- IS 3166 codes

 -- Legacy attributes

pkcs-9 OBJECT IDENTIFIER ::=
       { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }

emailAddress AttributeType      ::= { pkcs-9 1 }

Pkcs9email ::= IA5String (SIZE (1..ub-emailaddress-length))

-- naming data types --

Name            ::=   CHOICE { -- only one possibility for now --
                                 rdnSequence  RDNSequence }

RDNSequence     ::=   SEQUENCE OF RelativeDistinguishedName

DistinguishedName       ::=   RDNSequence

RelativeDistinguishedName  ::=
                    SET SIZE (1 .. MAX) OF AttributeTypeAndValue

-- Directory string type --

DirectoryString ::= 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))   }

-- certificate and CRL specific structures begin here

Certificate  ::=  SEQUENCE  {
     tbsCertificate       TBSCertificate,
     signatureAlgorithm   AlgorithmIdentifier,
     signature            BIT STRING  }

TBSCertificate  ::=  SEQUENCE  {
     version         [0]  Version DEFAULT v1,
     serialNumber         CertificateSerialNumber,
     signature            AlgorithmIdentifier,
     issuer               Name,
     validity             Validity,
     subject              Name,
     subjectPublicKeyInfo SubjectPublicKeyInfo,
     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version shall be v2 or v3
     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                          -- If present, version shall be v2 or v3
     extensions      [3]  Extensions OPTIONAL
                          -- If present, version shall be v3 --  }

Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }

CertificateSerialNumber  ::=  INTEGER

Validity ::= SEQUENCE {
     notBefore      Time,
     notAfter       Time }

Time ::= CHOICE {
     utcTime        UTCTime,
     generalTime    GeneralizedTime }

UniqueIdentifier  ::=  BIT STRING

SubjectPublicKeyInfo  ::=  SEQUENCE  {
     algorithm            AlgorithmIdentifier,
     subjectPublicKey     BIT STRING  }

Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension

Extension  ::=  SEQUENCE  {
     extnID      OBJECT IDENTIFIER,
     critical    BOOLEAN DEFAULT FALSE,
     extnValue   OCTET STRING  }

-- CRL structures

CertificateList  ::=  SEQUENCE  {
     tbsCertList          TBSCertList,
     signatureAlgorithm   AlgorithmIdentifier,
     signature            BIT STRING  }

TBSCertList  ::=  SEQUENCE  {
     version                 Version OPTIONAL,
                                  -- if present, shall be v2
     signature               AlgorithmIdentifier,
     issuer                  Name,
     thisUpdate              Time,
     nextUpdate              Time OPTIONAL,
     revokedCertificates     SEQUENCE OF SEQUENCE  {
          userCertificate         CertificateSerialNumber,
          revocationDate          Time,
          crlEntryExtensions      Extensions OPTIONAL
                                         -- if present, shall be v2
                               }  OPTIONAL,
     crlExtensions           [0] Extensions OPTIONAL
                                         -- if present, shall be v2 -- }

-- Version, Time, CertificateSerialNumber, and Extensions were
-- defined earlier for use in the certificate structure

AlgorithmIdentifier  ::=  SEQUENCE  {

     algorithm               OBJECT IDENTIFIER,
     parameters              ANY DEFINED BY algorithm OPTIONAL  }
                                -- contains a value of the type
                                -- registered for use with the
                                -- algorithm object identifier value

-- Algorithm OIDs and parameter structures

pkcs-1 OBJECT IDENTIFIER ::= {
     iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }

rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1 }

md2WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 2 }

md5WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 4 }

sha1WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 5 }

id-dsa-with-sha1 OBJECT IDENTIFIER ::=  {
     iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }

Dss-Sig-Value  ::=  SEQUENCE  {
     r       INTEGER,
     s       INTEGER  }

dhpublicnumber OBJECT IDENTIFIER ::= {
     iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 }

DomainParameters ::= SEQUENCE {
     p       INTEGER, -- odd prime, p=jq +1
     g       INTEGER, -- generator, g
     q       INTEGER, -- factor of p-1
     j       INTEGER OPTIONAL, -- subgroup factor, j>= 2
     validationParms  ValidationParms OPTIONAL }

ValidationParms ::= SEQUENCE {
     seed             BIT STRING,
     pgenCounter      INTEGER }

id-dsa OBJECT IDENTIFIER ::= {
     iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }

Dss-Parms  ::=  SEQUENCE  {
     p             INTEGER,
     q             INTEGER,
     g             INTEGER  }

-- x400 address syntax starts here
--      OR Names

ORAddress ::= SEQUENCE {
   built-in-standard-attributes BuiltInStandardAttributes,
   built-in-domain-defined-attributes
                        BuiltInDomainDefinedAttributes OPTIONAL,
   -- see also teletex-domain-defined-attributes
   extension-attributes ExtensionAttributes OPTIONAL }
--      The OR-address is semantically absent from the OR-name if the
--      built-in-standard-attribute sequence is empty and the
--      built-in-domain-defined-attributes and extension-attributes are
--      both omitted.

--      Built-in Standard Attributes

BuiltInStandardAttributes ::= SEQUENCE {
   country-name CountryName OPTIONAL,
   administration-domain-name AdministrationDomainName OPTIONAL,
   network-address      [0] NetworkAddress OPTIONAL,
   -- see also extended-network-address
   terminal-identifier  [1] TerminalIdentifier OPTIONAL,
   private-domain-name  [2] PrivateDomainName OPTIONAL,
   organization-name    [3] OrganizationName OPTIONAL,
   -- see also teletex-organization-name
   numeric-user-identifier      [4] NumericUserIdentifier OPTIONAL,
   personal-name        [5] PersonalName OPTIONAL,
   -- see also teletex-personal-name
   organizational-unit-names    [6] OrganizationalUnitNames OPTIONAL
   -- see also teletex-organizational-unit-names -- }

CountryName ::= [APPLICATION 1] CHOICE {
   x121-dcc-code NumericString
                (SIZE (ub-country-name-numeric-length)),
   iso-3166-alpha2-code PrintableString
                (SIZE (ub-country-name-alpha-length)) }

AdministrationDomainName ::= [APPLICATION 2] CHOICE {
   numeric NumericString (SIZE (0..ub-domain-name-length)),
   printable PrintableString (SIZE (0..ub-domain-name-length)) }

NetworkAddress ::= X121Address  -- see also extended-network-address

X121Address ::= NumericString (SIZE (1..ub-x121-address-length))

TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))

PrivateDomainName ::= CHOICE {

   numeric NumericString (SIZE (1..ub-domain-name-length)),
   printable PrintableString (SIZE (1..ub-domain-name-length)) }

OrganizationName ::= PrintableString
                            (SIZE (1..ub-organization-name-length))
-- see also teletex-organization-name

NumericUserIdentifier ::= NumericString
                            (SIZE (1..ub-numeric-user-id-length))

PersonalName ::= SET {
   surname [0] PrintableString (SIZE (1..ub-surname-length)),
   given-name [1] PrintableString
                        (SIZE (1..ub-given-name-length)) OPTIONAL,
   initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL,
   generation-qualifier [3] PrintableString
                (SIZE (1..ub-generation-qualifier-length)) OPTIONAL }
-- see also teletex-personal-name

OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
                                        OF OrganizationalUnitName
-- see also teletex-organizational-unit-names

OrganizationalUnitName ::= PrintableString (SIZE
                        (1..ub-organizational-unit-name-length))

--      Built-in Domain-defined Attributes

BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
                                (1..ub-domain-defined-attributes) OF
                                BuiltInDomainDefinedAttribute

BuiltInDomainDefinedAttribute ::= SEQUENCE {
   type PrintableString (SIZE
                        (1..ub-domain-defined-attribute-type-length)),
   value PrintableString (SIZE
                        (1..ub-domain-defined-attribute-value-length))}

--      Extension Attributes

ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
                        ExtensionAttribute

ExtensionAttribute ::=  SEQUENCE {
   extension-attribute-type [0] INTEGER (0..ub-extension-attributes),
   extension-attribute-value [1]
                        ANY DEFINED BY extension-attribute-type }

-- Extension types and attribute values
--

common-name INTEGER ::= 1

CommonName ::= PrintableString (SIZE (1..ub-common-name-length))

teletex-common-name INTEGER ::= 2

TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))

teletex-organization-name INTEGER ::= 3

TeletexOrganizationName ::=
                TeletexString (SIZE (1..ub-organization-name-length))

teletex-personal-name INTEGER ::= 4

TeletexPersonalName ::= SET {
   surname [0] TeletexString (SIZE (1..ub-surname-length)),
   given-name [1] TeletexString
                (SIZE (1..ub-given-name-length)) OPTIONAL,
   initials [2] TeletexString (SIZE (1..ub-initials-length)) OPTIONAL,
   generation-qualifier [3] TeletexString (SIZE
                (1..ub-generation-qualifier-length)) OPTIONAL }

teletex-organizational-unit-names INTEGER ::= 5

TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
        (1..ub-organizational-units) OF TeletexOrganizationalUnitName

TeletexOrganizationalUnitName ::= TeletexString
                        (SIZE (1..ub-organizational-unit-name-length))

pds-name INTEGER ::= 7

PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))

physical-delivery-country-name INTEGER ::= 8

PhysicalDeliveryCountryName ::= CHOICE {
   x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
   iso-3166-alpha2-code PrintableString
                        (SIZE (ub-country-name-alpha-length)) }

postal-code INTEGER ::= 9

PostalCode ::= CHOICE {

   numeric-code NumericString (SIZE (1..ub-postal-code-length)),
   printable-code PrintableString (SIZE (1..ub-postal-code-length)) }

physical-delivery-office-name INTEGER ::= 10

PhysicalDeliveryOfficeName ::= PDSParameter

physical-delivery-office-number INTEGER ::= 11

PhysicalDeliveryOfficeNumber ::= PDSParameter

extension-OR-address-components INTEGER ::= 12

ExtensionORAddressComponents ::= PDSParameter

physical-delivery-personal-name INTEGER ::= 13

PhysicalDeliveryPersonalName ::= PDSParameter

physical-delivery-organization-name INTEGER ::= 14

PhysicalDeliveryOrganizationName ::= PDSParameter

extension-physical-delivery-address-components INTEGER ::= 15

ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter

unformatted-postal-address INTEGER ::= 16

UnformattedPostalAddress ::= SET {
   printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF
           PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
   teletex-string TeletexString
         (SIZE (1..ub-unformatted-address-length)) OPTIONAL }

street-address INTEGER ::= 17

StreetAddress ::= PDSParameter

post-office-box-address INTEGER ::= 18

PostOfficeBoxAddress ::= PDSParameter

poste-restante-address INTEGER ::= 19

PosteRestanteAddress ::= PDSParameter

unique-postal-name INTEGER ::= 20

UniquePostalName ::= PDSParameter

local-postal-attributes INTEGER ::= 21

LocalPostalAttributes ::= PDSParameter

PDSParameter ::= SET {
   printable-string PrintableString
                (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
   teletex-string TeletexString
                (SIZE(1..ub-pds-parameter-length)) OPTIONAL }

extended-network-address INTEGER ::= 22

ExtendedNetworkAddress ::= CHOICE {
   e163-4-address SEQUENCE {
        number [0] NumericString (SIZE (1..ub-e163-4-number-length)),
        sub-address [1] NumericString
                (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL },
   psap-address [0] PresentationAddress }

PresentationAddress ::= SEQUENCE {
        pSelector       [0] EXPLICIT OCTET STRING OPTIONAL,
        sSelector       [1] EXPLICIT OCTET STRING OPTIONAL,
        tSelector       [2] EXPLICIT OCTET STRING OPTIONAL,
        nAddresses      [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }

terminal-type  INTEGER ::= 23

TerminalType ::= INTEGER {
   telex (3),
   teletex (4),
   g3-facsimile (5),
   g4-facsimile (6),
   ia5-terminal (7),
   videotex (8) } (0..ub-integer-options)

--      Extension Domain-defined Attributes

teletex-domain-defined-attributes INTEGER ::= 6

TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
   (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute

TeletexDomainDefinedAttribute ::= SEQUENCE {
        type TeletexString
               (SIZE (1..ub-domain-defined-attribute-type-length)),
        value TeletexString

               (SIZE (1..ub-domain-defined-attribute-value-length)) }

--  specifications of Upper Bounds shall be regarded as mandatory
--  from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
--  Upper Bounds

--      Upper Bounds
ub-name INTEGER ::=     32768
ub-common-name  INTEGER ::=     64
ub-locality-name        INTEGER ::=     128
ub-state-name   INTEGER ::=     128
ub-organization-name    INTEGER ::=     64
ub-organizational-unit-name     INTEGER ::=     64
ub-title        INTEGER ::=     64
ub-match        INTEGER ::=     128

ub-emailaddress-length INTEGER ::= 128

ub-common-name-length INTEGER ::= 64
ub-country-name-alpha-length INTEGER ::= 2
ub-country-name-numeric-length INTEGER ::= 3
ub-domain-defined-attributes INTEGER ::= 4
ub-domain-defined-attribute-type-length INTEGER ::= 8
ub-domain-defined-attribute-value-length INTEGER ::= 128
ub-domain-name-length INTEGER ::= 16
ub-extension-attributes INTEGER ::= 256
ub-e163-4-number-length INTEGER ::= 15
ub-e163-4-sub-address-length INTEGER ::= 40
ub-generation-qualifier-length INTEGER ::= 3
ub-given-name-length INTEGER ::= 16
ub-initials-length INTEGER ::= 5
ub-integer-options INTEGER ::= 256
ub-numeric-user-id-length INTEGER ::= 32
ub-organization-name-length INTEGER ::= 64
ub-organizational-unit-name-length INTEGER ::= 32
ub-organizational-units INTEGER ::= 4
ub-pds-name-length INTEGER ::= 16
ub-pds-parameter-length INTEGER ::= 30
ub-pds-physical-address-lines INTEGER ::= 6
ub-postal-code-length INTEGER ::= 16
ub-surname-length INTEGER ::= 40
ub-terminal-id-length INTEGER ::= 24
ub-unformatted-address-length INTEGER ::= 180
ub-x121-address-length INTEGER ::= 16

-- Note - upper bounds on string types, such as TeletexString, are
-- measured in characters.  Excepting PrintableString or IA5String, a
-- significantly greater number of octets will be required to hold

-- such a value.  As a minimum, 16 octets, or twice the specified upper
-- bound, whichever is the larger, should be allowed for TeletexString.
-- For UTF8String or UniversalString at least four times the upper
-- bound should be allowed.

END

A.2 隱式目標模塊(Implicitly Tagged Module), 1988 句法

PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1)
  security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)}

DEFINITIONS IMPLICIT TAGS ::=

BEGIN

-- EXPORTS ALL --

IMPORTS
        id-pkix, id-pe, id-qt, id-kp, id-qt-unotice, id-qt-cps,
            id-ad, id-ad-ocsp, id-ad-caIssuers,
            -- delete following line if "new" types are supported --
            BMPString, UniversalString, UTF8String, -- end "new" types
                ORAddress, Name, RelativeDistinguishedName,
                CertificateSerialNumber,
                CertificateList, AlgorithmIdentifier, ub-name,
                Attribute, DirectoryString
                FROM PKIX1Explicit88 {iso(1) identified-organization(3)
                dod(6) internet(1) security(5) mechanisms(5) pkix(7)
                id-mod(0) id-pkix1-explicit(1)};

-- ISO arc for standard certificate and CRL extensions

id-ce OBJECT IDENTIFIER  ::=  {joint-iso-ccitt(2) ds(5) 29}

-- authority key identifier OID and syntax

id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }

AuthorityKeyIdentifier ::= SEQUENCE {
      keyIdentifier             [0] KeyIdentifier            OPTIONAL,
      authorityCertIssuer       [1] GeneralNames             OPTIONAL,
      authorityCertSerialNumber [2] CertificateSerialNumber  OPTIONAL }
    -- authorityCertIssuer and authorityCertSerialNumber shall both
    -- be present or both be absent

KeyIdentifier ::= OCTET STRING

-- subject key identifier OID and syntax

id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }

SubjectKeyIdentifier ::= KeyIdentifier

-- key usage extension OID and syntax

id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }

KeyUsage ::= BIT STRING {
     digitalSignature        (0),
     nonRepudiation          (1),
     keyEncipherment         (2),
     dataEncipherment        (3),
     keyAgreement            (4),
     keyCertSign             (5),
     cRLSign                 (6),
     encipherOnly            (7),
     decipherOnly            (8) }

-- private key usage period extension OID and syntax

id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::=  { id-ce 16 }

PrivateKeyUsagePeriod ::= SEQUENCE {
     notBefore       [0]     GeneralizedTime OPTIONAL,
     notAfter        [1]     GeneralizedTime OPTIONAL }
     -- either notBefore or notAfter shall be present

-- certificate policies extension OID and syntax

id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }

CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation

PolicyInformation ::= SEQUENCE {
     policyIdentifier   CertPolicyId,
     policyQualifiers   SEQUENCE SIZE (1..MAX) OF
             PolicyQualifierInfo OPTIONAL }

CertPolicyId ::= OBJECT IDENTIFIER

PolicyQualifierInfo ::= SEQUENCE {
       policyQualifierId  PolicyQualifierId,
       qualifier        ANY DEFINED BY policyQualifierId }

-- Implementations that recognize additional policy qualifiers shall
-- augment the following definition for PolicyQualifierId

PolicyQualifierId ::=
    OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )

-- CPS pointer qualifier

CPSuri ::= IA5String

-- user notice qualifier

UserNotice ::= SEQUENCE {
     noticeRef        NoticeReference OPTIONAL,
     explicitText     DisplayText OPTIONAL}

NoticeReference ::= SEQUENCE {
     organization     DisplayText,
     noticeNumbers    SEQUENCE OF INTEGER }

DisplayText ::= CHOICE {
     visibleString    VisibleString  (SIZE (1..200)),
     bmpString        BMPString      (SIZE (1..200)),
     utf8String       UTF8String     (SIZE (1..200)) }

-- policy mapping extension OID and syntax

id-ce-policyMappings OBJECT IDENTIFIER ::=  { id-ce 33 }

PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
     issuerDomainPolicy      CertPolicyId,
     subjectDomainPolicy     CertPolicyId }

-- subject alternative name extension OID and syntax

id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }

SubjectAltName ::= GeneralNames

GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

GeneralName ::= CHOICE {
     otherName                       [0]     AnotherName,
     rfc822Name                      [1]     IA5String,
     dNSName                         [2]     IA5String,
     x400Address                     [3]     ORAddress,
     directoryName                   [4]     Name,
     ediPartyName                    [5]     EDIPartyName,
     uniformResourceIdentifier       [6]     IA5String,
     iPAddress                       [7]     OCTET STRING,
     registeredID                    [8]     OBJECT IDENTIFIER }

-- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as
-- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax

AnotherName ::= SEQUENCE {

     type-id    OBJECT IDENTIFIER,
     value      [0] EXPLICIT ANY DEFINED BY type-id }

EDIPartyName ::= SEQUENCE {
     nameAssigner            [0]     DirectoryString OPTIONAL,
     partyName               [1]     DirectoryString }

-- issuer alternative name extension OID and syntax

id-ce-issuerAltName OBJECT IDENTIFIER ::=  { id-ce 18 }

IssuerAltName ::= GeneralNames

id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::=  { id-ce 9 }

SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute

-- basic constraints extension OID and syntax

id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }

BasicConstraints ::= SEQUENCE {
     cA                      BOOLEAN DEFAULT FALSE,
     pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

-- name constraints extension OID and syntax

id-ce-nameConstraints OBJECT IDENTIFIER ::=  { id-ce 30 }

NameConstraints ::= SEQUENCE {
     permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
     excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }

GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree

GeneralSubtree ::= SEQUENCE {
     base                    GeneralName,
     minimum         [0]     BaseDistance DEFAULT 0,
     maximum         [1]     BaseDistance OPTIONAL }

BaseDistance ::= INTEGER (0..MAX)

-- policy constraints extension OID and syntax

id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }

PolicyConstraints ::= SEQUENCE {
     requireExplicitPolicy           [0] SkipCerts OPTIONAL,

     inhibitPolicyMapping            [1] SkipCerts OPTIONAL }

SkipCerts ::= INTEGER (0..MAX)

-- CRL distribution points extension OID and syntax

id-ce-cRLDistributionPoints     OBJECT IDENTIFIER  ::=  {id-ce 31}

CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint

DistributionPoint ::= SEQUENCE {
     distributionPoint       [0]     DistributionPointName OPTIONAL,
     reasons                 [1]     ReasonFlags OPTIONAL,
     cRLIssuer               [2]     GeneralNames OPTIONAL }

DistributionPointName ::= CHOICE {
     fullName                [0]     GeneralNames,
     nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }

ReasonFlags ::= BIT STRING {
     unused                  (0),
     keyCompromise           (1),
     cACompromise            (2),
     affiliationChanged      (3),
     superseded              (4),
     cessationOfOperation    (5),
     certificateHold         (6) }

-- extended key usage extension OID and syntax

id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}

ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId

KeyPurposeId ::= OBJECT IDENTIFIER

-- extended key purpose OIDs
id-kp-serverAuth      OBJECT IDENTIFIER ::= { id-kp 1 }
id-kp-clientAuth      OBJECT IDENTIFIER ::= { id-kp 2 }
id-kp-codeSigning     OBJECT IDENTIFIER ::= { id-kp 3 }
id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
id-kp-ipsecEndSystem  OBJECT IDENTIFIER ::= { id-kp 5 }
id-kp-ipsecTunnel     OBJECT IDENTIFIER ::= { id-kp 6 }
id-kp-ipsecUser       OBJECT IDENTIFIER ::= { id-kp 7 }
id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }

-- authority info access

id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }

AuthorityInfoAccessSyntax  ::=
        SEQUENCE SIZE (1..MAX) OF AccessDescription

AccessDescription  ::=  SEQUENCE {
        accessMethod          OBJECT IDENTIFIER,
        accessLocation        GeneralName  }

-- CRL number extension OID and syntax

id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }

CRLNumber ::= INTEGER (0..MAX)

-- issuing distribution point extension OID and syntax

id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }

IssuingDistributionPoint ::= SEQUENCE {
     distributionPoint       [0] DistributionPointName OPTIONAL,
     onlyContainsUserCerts   [1] BOOLEAN DEFAULT FALSE,
     onlyContainsCACerts     [2] BOOLEAN DEFAULT FALSE,
     onlySomeReasons         [3] ReasonFlags OPTIONAL,
     indirectCRL             [4] BOOLEAN DEFAULT FALSE }

id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }

-- deltaCRLIndicator ::= BaseCRLNumber

BaseCRLNumber ::= CRLNumber

-- CRL reasons extension OID and syntax

id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }

CRLReason ::= ENUMERATED {
     unspecified             (0),
     keyCompromise           (1),
     cACompromise            (2),
     affiliationChanged      (3),
     superseded              (4),
     cessationOfOperation    (5),
     certificateHold         (6),
     removeFromCRL           (8) }

-- certificate issuer CRL entry extension OID and syntax

id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }

CertificateIssuer ::= GeneralNames

-- hold instruction extension OID and syntax

id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }

HoldInstructionCode ::= OBJECT IDENTIFIER

-- ANSI x9 holdinstructions

-- ANSI x9 arc holdinstruction arc
holdInstruction OBJECT IDENTIFIER ::=
          {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2}

-- ANSI X9 holdinstructions referenced by this standard
id-holdinstruction-none OBJECT IDENTIFIER  ::=
                {holdInstruction 1} -- deprecated
id-holdinstruction-callissuer OBJECT IDENTIFIER ::=
                {holdInstruction 2}
id-holdinstruction-reject OBJECT IDENTIFIER ::=
                {holdInstruction 3}

-- invalidity date CRL entry extension OID and syntax

id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }

InvalidityDate ::=  GeneralizedTime

END

附錄 B. 1993 ASN.1 結構 and OIDs

B.1 明示目標模塊(Explicitly Tagged Module), 1993 句法

PKIX1Explicit93 {iso(1) identified-organization(3) dod(6) internet(1)
   security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit-93(3)}

DEFINITIONS EXPLICIT TAGS ::=

BEGIN

-- EXPORTS ALL --

IMPORTS
        authorityKeyIdentifier, subjectKeyIdentifier, keyUsage,
           extendedKeyUsage, privateKeyUsagePeriod, certificatePolicies,
           policyMappings, subjectAltName, issuerAltName,
           basicConstraints, nameConstraints, policyConstraints,
           cRLDistributionPoints, subjectDirectoryAttributes,
           cRLNumber, reasonCode, instructionCode, invalidityDate,
           issuingDistributionPoint, certificateIssuer,
           deltaCRLIndicator, authorityInfoAccess, id-ce
           FROM PKIX1Implicit93 {iso(1) identified-organization(3)
           dod(6) internet(1) security(5) mechanisms(5) pkix(7)
           id-mod(0) id-pkix1-implicit-93(4)} ;

--
                   --  Locally defined OIDs  --

id-pkix  OBJECT IDENTIFIER  ::=
         { iso(1) identified-organization(3) dod(6) internet(1)
                    security(5) mechanisms(5) pkix(7) }

-- PKIX arcs
-- arc for private certificate extensions
id-pe OBJECT IDENTIFIER  ::=  { id-pkix 1 }
 -- arc for policy qualifier types
id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
-- arc for extended key purpose OIDS
id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
-- arc for access descriptors
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }

-- policyQualifierIds for Internet policy qualifiers
id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
        -- OID for CPS qualifier

id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
        -- OID for user notice qualifier

-- based on excerpts from AuthenticationFramework
--    {joint-iso-ccitt ds(5) modules(1) authenticationFramework(7) 2}

               -- Public Key Certificate --

Certificate            ::=   SIGNED { SEQUENCE {
   version                 [0]   Version DEFAULT v1,
   serialNumber                  CertificateSerialNumber,
   signature                     AlgorithmIdentifier,
   issuer                        Name,
   validity                      Validity,
   subject                       Name,
   subjectPublicKeyInfo          SubjectPublicKeyInfo,
   issuerUniqueIdentifier  [1]   IMPLICIT UniqueIdentifier OPTIONAL,
                              ---if present, version shall be v2 or v3--
   subjectUniqueIdentifier [2]   IMPLICIT UniqueIdentifier OPTIONAL,
                              ---if present, version shall be v2 or v3--
   extensions              [3]   Extensions OPTIONAL
                              --if present, version shall be v3--}  }

UniqueIdentifier        ::=  BIT STRING

Version                 ::=  INTEGER { v1(0), v2(1), v3(2) }

CertificateSerialNumber ::=  INTEGER

Validity                        ::=     SEQUENCE {
   notBefore            Time,
   notAfter             Time }

Time ::= CHOICE {
        utcTime         UTCTime,
        generalTime             GeneralizedTime }

SubjectPublicKeyInfo    ::=     SEQUENCE{
   algorithm            AlgorithmIdentifier,
   subjectPublicKey     BIT STRING}

Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension

Extension         ::=   SEQUENCE {
   extnId            EXTENSION.&id ({ExtensionSet}),
   critical          BOOLEAN DEFAULT FALSE,
   extnValue         OCTET STRING }
                -- contains a DER encoding of a value of type

                -- &ExtnType for the
                -- extension object identified by extnId --

-- The following information object set is defined to constrain the
-- set of legal certificate extensions.

ExtensionSet    EXTENSION       ::=     { authorityKeyIdentifier |
                                        subjectKeyIdentifier |
                                        keyUsage |
                                        extendedKeyUsage |
                                        privateKeyUsagePeriod |
                                        certificatePolicies |
                                        policyMappings |
                                        subjectAltName |
                                        issuerAltName |
                                        basicConstraints |
                                        nameConstraints |
                                        policyConstraints |
                                        cRLDistributionPoints |
                                        subjectDirectoryAttributes |
                                        authorityInfoAccess }

EXTENSION       ::=     CLASS {
   &id          OBJECT IDENTIFIER UNIQUE,
   &ExtnType }
WITH SYNTAX  {
   SYNTAX               &ExtnType
   IDENTIFIED BY        &id }

                  -- Certificate Revocation List --

CertificateList ::=    SIGNED { SEQUENCE {
   version                Version  OPTIONAL, -- if present, shall be v2
   signature              AlgorithmIdentifier,
   issuer                 Name,
   thisUpdate             Time,
   nextUpdate             Time OPTIONAL,
   revokedCertificates    SEQUENCE OF SEQUENCE {
   userCertificate        CertificateSerialNumber,
   revocationDate         Time,
   crlEntryExtensions     EntryExtensions OPTIONAL } OPTIONAL,
   crlExtensions          [0]   CRLExtensions OPTIONAL }}

CRLExtensions        ::=        SEQUENCE SIZE (1..MAX) OF CRLExtension

CRLExtension         ::=        SEQUENCE {
   extnId            EXTENSION.&id ({CRLExtensionSet}),
   critical          BOOLEAN DEFAULT FALSE,

   extnValue         OCTET STRING }
                -- contains a DER encoding of a value of type
                -- &ExtnType for the
                -- extension object identified by extnId --

-- The following information object set is defined to constrain the
-- set of legal CRL extensions.

CRLExtensionSet EXTENSION       ::=     { authorityKeyIdentifier |
                                        issuerAltName |
                                        cRLNumber |
                                        deltaCRLIndicator |
                                        issuingDistributionPoint }

-- EXTENSION defined above for certificates

EntryExtensions        ::=      SEQUENCE SIZE (1..MAX) OF EntryExtension

EntryExtension         ::=      SEQUENCE {
   extnId            EXTENSION.&id ({EntryExtensionSet}),
   critical          BOOLEAN DEFAULT FALSE,
   extnValue         OCTET STRING }
                -- contains a DER encoding of a value of type
                -- &ExtnType for the
                -- extension object identified by extnId --

-- The following information object set is defined to constrain the
-- set of legal CRL entry extensions.

EntryExtensionSet       EXTENSION       ::=     { reasonCode |
                                                instructionCode |
                                                invalidityDate |
                                                certificateIssuer }

         -- information object classes used in the defintion --
                    -- of certificates and CRLs --

-- Parameterized Type SIGNED --

  SIGNED { ToBeSigned } ::= SEQUENCE {
     toBeSigned  ToBeSigned,
     algorithm   AlgorithmIdentifier,
     signature   BIT STRING
  }

-- Definition of AlgorithmIdentifier
-- ISO definition was:
--

-- AlgorithmIdentifier     ::=  SEQUENCE {
--   algorithm          ALGORITHM.&id({SupportedAlgorithms}),
--   parameters         ALGORITHM.&Type({SupportedAlgorithms}
--                                         { @algorithm}) OPTIONAL }
-- Definition of ALGORITHM
-- ALGORITHM    ::=     TYPE-IDENTIFIER

-- The following PKIX definition replaces the X.509 definition
--

AlgorithmIdentifier     ::=  SEQUENCE {
   algorithm            ALGORITHM-ID.&id({SupportedAlgorithms}),
   parameters           ALGORITHM-ID.&Type({SupportedAlgorithms}
                                           { @algorithm}) OPTIONAL }

-- Definition of ALGORITHM-ID

 ALGORITHM-ID ::= CLASS {
     &id    OBJECT IDENTIFIER UNIQUE,
     &Type  OPTIONAL
  }
     WITH SYNTAX { OID &id [PARMS &Type] }

-- The definition of SupportedAlgorithms may be modified as this
-- document does not specify a mandatory algorithm set.  In addition,
-- the set is specified as extensible, since additional algorithms
-- may be supported

SupportedAlgorithms     ALGORITHM-ID  ::=       { ..., -- extensible
                                            rsaPublicKey |
                                            rsaSHA-1  |
                                            rsaMD5 |
                                            rsaMD2 |
                                            dssPublicKey |
                                            dsaSHA-1 |
                                            dhPublicKey }

-- OIDs and parameter structures for ALGORITHM-IDs used
-- in this specification

rsaPublicKey ALGORITHM-ID ::= { OID rsaEncryption PARMS NULL }

rsaSHA-1 ALGORITHM-ID ::= { OID sha1WithRSAEncryption PARMS NULL }

rsaMD5 ALGORITHM-ID ::= { OID md5WithRSAEncryption PARMS NULL  }

rsaMD2 ALGORITHM-ID ::= { OID md2WithRSAEncryption PARMS NULL  }

dssPublicKey ALGORITHM-ID ::= { OID id-dsa PARMS Dss-Parms }

dsaSHA-1 ALGORITHM-ID ::= { OID id-dsa-with-sha1 }

dhPublicKey ALGORITHM-ID ::= {OID dhpublicnumber PARMS DomainParameters}

-- algorithm identifiers and parameter structures

pkcs-1 OBJECT IDENTIFIER ::= {
     iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }

rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1 }

md2WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 2 }

md5WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 4 }

sha1WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 5 }

id-dsa-with-sha1 OBJECT IDENTIFIER ::=  {
     iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }

Dss-Sig-Value  ::=  SEQUENCE  {
     r       INTEGER,
     s       INTEGER  }

dhpublicnumber OBJECT IDENTIFIER ::= {
     iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 }

DomainParameters ::= SEQUENCE {
     p       INTEGER, -- odd prime, p=jq +1
     g       INTEGER, -- generator, g
     q       INTEGER, -- factor of p-1
     j       INTEGER OPTIONAL, -- subgroup factor, j>= 2
     validationParms  ValidationParms OPTIONAL }

ValidationParms ::= SEQUENCE {
     seed             BIT STRING,
     pgenCounter      INTEGER }

id-dsa OBJECT IDENTIFIER ::= {
     iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }

Dss-Parms  ::=  SEQUENCE  {
     p             INTEGER,
     q             INTEGER,
     g             INTEGER  }

     -- The ASN.1 in this section supports the Name type
     -- and the directoryAttribute extension

-- attribute data types --

Attribute       ::=     SEQUENCE {
        type            ATTRIBUTE.&id ({SupportedAttributes}),
        values  SET SIZE (1 .. MAX) OF ATTRIBUTE.&Type
                        ({SupportedAttributes}{@type})}

AttributeTypeAndValue           ::=     SEQUENCE {
        type            ATTRIBUTE.&id ({SupportedAttributes}),
        value   ATTRIBUTE.&Type ({SupportedAttributes}{@type})}

-- naming data types --

Name            ::=     CHOICE { -- only one possibility for now --
                                        rdnSequence  RDNSequence }

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName       ::=
                SET SIZE (1 .. MAX) OF AttributeTypeAndValue

ID     ::=    OBJECT IDENTIFIER

-- ATTRIBUTE information object class specification
--  Note: This has been greatly simplified for PKIX !!

ATTRIBUTE               ::=     CLASS {
        &Type,
        &id                     OBJECT IDENTIFIER UNIQUE }
WITH SYNTAX {
        WITH SYNTAX &Type ID &id }

-- suggested naming attributes
--      Definition of the following information object set may be
--    augmented to meet local requirements.  Note that deleting
--    members of the set may prevent interoperability with
--    conforming implementations.

SupportedAttributes     ATTRIBUTE       ::=     {
                name | commonName | surname | givenName | initials |
                generationQualifier | dnQualifier | countryName |
                localityName | stateOrProvinceName | organizationName |
                        organizationalUnitName | title | pkcs9email }

name ATTRIBUTE  ::=     {

        WITH SYNTAX                     DirectoryString { ub-name }
        ID                              id-at-name }

commonName ATTRIBUTE    ::=     {
        WITH SYNTAX                     DirectoryString {ub-common-name}
        ID                              id-at-commonName }

surname ATTRIBUTE       ::=             {
        WITH SYNTAX                     DirectoryString {ub-name}
        ID                              id-at-surname }

givenName ATTRIBUTE     ::=             {
        WITH SYNTAX                     DirectoryString {ub-name}
        ID                              id-at-givenName }

initials ATTRIBUTE      ::=             {
        WITH SYNTAX                     DirectoryString {ub-name}
        ID                              id-at-initials }

generationQualifier ATTRIBUTE   ::=             {
        WITH SYNTAX                     DirectoryString {ub-name}
        ID                              id-at-generationQualifier}

dnQualifier ATTRIBUTE   ::=     {
        WITH SYNTAX                     PrintableString
        ID                              id-at-dnQualifier }

countryName ATTRIBUTE   ::=     {
        WITH SYNTAX                     PrintableString (SIZE (2))
                                                -- IS 3166 codes only
        ID                              id-at-countryName }

localityName ATTRIBUTE  ::=     {
        WITH SYNTAX             DirectoryString {ub-locality-name}
        ID                      id-at-localityName }

stateOrProvinceName ATTRIBUTE   ::=     {
        WITH SYNTAX             DirectoryString {ub-state-name}
        ID                      id-at-stateOrProvinceName }

organizationName ATTRIBUTE      ::=     {
        WITH SYNTAX             DirectoryString {ub-organization-name}
        ID                      id-at-organizationName }

organizationalUnitName ATTRIBUTE        ::=     {
        WITH SYNTAX  DirectoryString {ub-organizational-unit-name}
        ID                      id-at-organizationalUnitName }

title ATTRIBUTE ::=                     {
        WITH SYNTAX             DirectoryString {ub-title}
        ID                      id-at-title }

 -- Legacy attributes

pkcs9email ATTRIBUTE ::= {
        WITH SYNTAX                     PHGString,
        ID                              emailAddress }

PHGString ::= IA5String (SIZE(1..ub-emailaddress-length))

pkcs-9 OBJECT IDENTIFIER ::=
       { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }

emailAddress OBJECT IDENTIFIER ::= { pkcs-9 1 }

    -- object identifiers for Name type and directory attribute support

-- Object identifier assignments --

id-at   OBJECT IDENTIFIER       ::=     {joint-iso-ccitt(2) ds(5) 4}

-- Attributes --

id-at-commonName        OBJECT IDENTIFIER       ::=     {id-at 3}
id-at-surname           OBJECT IDENTIFIER       ::=     {id-at 4}
id-at-countryName       OBJECT IDENTIFIER       ::=     {id-at 6}
id-at-localityName      OBJECT IDENTIFIER       ::=     {id-at 7}
id-at-stateOrProvinceName     OBJECT IDENTIFIER ::= {id-at 8}
id-at-organizationName        OBJECT IDENTIFIER ::= {id-at 10}
id-at-organizationalUnitName  OBJECT IDENTIFIER ::= {id-at 11}
id-at-title             OBJECT IDENTIFIER       ::=     {id-at 12}
id-at-name              OBJECT IDENTIFIER       ::=     {id-at 41}
id-at-givenName         OBJECT IDENTIFIER       ::=     {id-at 42}
id-at-initials          OBJECT IDENTIFIER       ::=     {id-at 43}
id-at-generationQualifier   OBJECT IDENTIFIER   ::=     {id-at 44}
id-at-dnQualifier       OBJECT IDENTIFIER       ::=     {id-at 46}

-- Directory string type, used extensively in Name types --

DirectoryString { INTEGER:maxSize } ::= CHOICE {
        teletexString           TeletexString (SIZE (1..maxSize)),
        printableString         PrintableString (SIZE (1..maxSize)),
        universalString         UniversalString (SIZE (1..maxSize)),
        bmpString               BMPString (SIZE(1..maxSize)),
        utf8String              UTF8String (SIZE(1..maxSize))
                            }

     -- End of ASN.1 for Name type and directory attribute support --

     -- The ASN.1 in this section supports X.400 style names   --
     -- for implementations that use the x400Address component --
     -- of GeneralName.                                        --

ORAddress ::= SEQUENCE {
   built-in-standard-attributes BuiltInStandardAttributes,
   built-in-domain-defined-attributes
                        BuiltInDomainDefinedAttributes OPTIONAL,
   -- see also teletex-domain-defined-attributes
   extension-attributes ExtensionAttributes OPTIONAL }

--  The OR-address is semantically absent from the OR-name if the
--  built-in-standard-attribute sequence is empty and the
--  built-in-domain-defined-attributes and extension-attributes are
--  both omitted.

--      Built-in Standard Attributes

BuiltInStandardAttributes ::= SEQUENCE {
   country-name CountryName OPTIONAL,
   administration-domain-name AdministrationDomainName OPTIONAL,
   network-address      [0] NetworkAddress OPTIONAL,
   -- see also extended-network-address
   terminal-identifier  [1] TerminalIdentifier OPTIONAL,
   private-domain-name  [2] PrivateDomainName OPTIONAL,
   organization-name    [3] OrganizationName OPTIONAL,
   -- see also teletex-organization-name
   numeric-user-identifier      [4] NumericUserIdentifier OPTIONAL,
   personal-name        [5] PersonalName OPTIONAL,
   -- see also teletex-personal-name
   organizational-unit-names    [6] OrganizationalUnitNames OPTIONAL
   -- see also teletex-organizational-unit-names -- }

CountryName ::= [APPLICATION 1] CHOICE {
   x121-dcc-code NumericString
                (SIZE (ub-country-name-numeric-length)),
   iso-3166-alpha2-code PrintableString
                (SIZE (ub-country-name-alpha-length)) }

AdministrationDomainName ::= [APPLICATION 2] CHOICE {
   numeric NumericString (SIZE (0..ub-domain-name-length)),
   printable PrintableString (SIZE (0..ub-domain-name-length)) }

NetworkAddress ::= X121Address
-- see also extended-network-address

X121Address ::= NumericString (SIZE (1..ub-x121-address-length))

TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))

PrivateDomainName ::= CHOICE {
   numeric NumericString (SIZE (1..ub-domain-name-length)),
   printable PrintableString (SIZE (1..ub-domain-name-length)) }

OrganizationName ::= PrintableString
                           (SIZE (1..ub-organization-name-length))
-- see also teletex-organization-name

NumericUserIdentifier ::= NumericString
                             (SIZE (1..ub-numeric-user-id-length))

PersonalName ::= SET {
   surname    [0] PrintableString (SIZE (1..ub-surname-length)),
   given-name [1] PrintableString
                        (SIZE (1..ub-given-name-length)) OPTIONAL,
   initials   [2] PrintableString
                        (SIZE (1..ub-initials-length)) OPTIONAL,
   generation-qualifier [3] PrintableString
                (SIZE (1..ub-generation-qualifier-length)) OPTIONAL}
-- see also teletex-personal-name

OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
                                        OF OrganizationalUnitName
-- see also teletex-organizational-unit-names

OrganizationalUnitName ::= PrintableString (SIZE
                        (1..ub-organizational-unit-name-length))

--      Built-in Domain-defined Attributes
BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
                                (1..ub-domain-defined-attributes) OF
                                BuiltInDomainDefinedAttribute

BuiltInDomainDefinedAttribute ::= SEQUENCE {
   type PrintableString (SIZE
                (1..ub-domain-defined-attribute-type-length)),
   value PrintableString (SIZE
                (1..ub-domain-defined-attribute-value-length)) }

--      Extension Attributes

ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes)
                                        OF ExtensionAttribute
ExtensionAttribute ::= SEQUENCE {

        extension-attribute-type [0] EXTENSION-ATTRIBUTE.&id
                                        ({ExtensionAttributeTable}),
        extension-attribute-value [1] EXTENSION-ATTRIBUTE.&Type
             ({ExtensionAttributeTable} {@extension-attribute-type}) }

EXTENSION-ATTRIBUTE ::= CLASS {
        &id     INTEGER (0..ub-extension-attributes) UNIQUE,
        &Type }
WITH SYNTAX {&Type IDENTIFIED BY &id}

ExtensionAttributeTable EXTENSION-ATTRIBUTE ::= {
        common-name |
        teletex-common-name |
        teletex-organization-name |
        teletex-personal-name |
        teletex-organizational-unit-names |
        teletex-domain-defined-attributes |
        pds-name |
        physical-delivery-country-name |
        postal-code |
        physical-delivery-office-name |
        physical-delivery-office-number |
        extension-OR-address-components |
        physical-delivery-personal-name |
        physical-delivery-organization-name |
        extension-physical-delivery-address-components |
        unformatted-postal-address |
        street-address |
        post-office-box-address |
        poste-restante-address |
        unique-postal-name |
        local-postal-attributes |
        extended-network-address |
        terminal-type }

--      Extension Standard Attributes

common-name EXTENSION-ATTRIBUTE ::= {CommonName IDENTIFIED BY 1}

CommonName ::= PrintableString (SIZE (1..ub-common-name-length))

teletex-common-name EXTENSION-ATTRIBUTE ::=
                {TeletexCommonName IDENTIFIED BY 2}

TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))

teletex-organization-name EXTENSION-ATTRIBUTE ::=
                {TeletexOrganizationName IDENTIFIED BY 3}

TeletexOrganizationName ::=
                TeletexString (SIZE (1..ub-organization-name-length))

teletex-personal-name EXTENSION-ATTRIBUTE ::=
                {TeletexPersonalName IDENTIFIED BY 4}

TeletexPersonalName ::= SET {
   surname [0] TeletexString (SIZE (1..ub-surname-length)),
   given-name [1] TeletexString
                (SIZE (1..ub-given-name-length)) OPTIONAL,
   initials [2] TeletexString (SIZE (1..ub-initials-length)) OPTIONAL,
   generation-qualifier [3] TeletexString (SIZE
                (1..ub-generation-qualifier-length)) OPTIONAL }

teletex-organizational-unit-names EXTENSION-ATTRIBUTE ::=
   {TeletexOrganizationalUnitNames IDENTIFIED BY 5}

TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
        (1..ub-organizational-units) OF TeletexOrganizationalUnitName

TeletexOrganizationalUnitName ::= TeletexString
                        (SIZE (1..ub-organizational-unit-name-length))

pds-name EXTENSION-ATTRIBUTE ::= {PDSName IDENTIFIED BY 7}

PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))

physical-delivery-country-name EXTENSION-ATTRIBUTE ::=
   {PhysicalDeliveryCountryName IDENTIFIED BY 8}

PhysicalDeliveryCountryName ::= CHOICE {
   x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
   iso-3166-alpha2-code PrintableString
                        (SIZE (ub-country-name-alpha-length)) }

postal-code EXTENSION-ATTRIBUTE ::= {PostalCode IDENTIFIED BY 9}

PostalCode ::= CHOICE {
   numeric-code NumericString (SIZE (1..ub-postal-code-length)),
   printable-code PrintableString (SIZE (1..ub-postal-code-length)) }

physical-delivery-office-name EXTENSION-ATTRIBUTE ::=
                        {PhysicalDeliveryOfficeName IDENTIFIED BY 10}

PhysicalDeliveryOfficeName ::= PDSParameter

physical-delivery-office-number EXTENSION-ATTRIBUTE ::=
   {PhysicalDeliveryOfficeNumber IDENTIFIED BY 11}

PhysicalDeliveryOfficeNumber ::= PDSParameter

extension-OR-address-components EXTENSION-ATTRIBUTE ::=
   {ExtensionORAddressComponents IDENTIFIED BY 12}

ExtensionORAddressComponents ::= PDSParameter

physical-delivery-personal-name EXTENSION-ATTRIBUTE ::=
   {PhysicalDeliveryPersonalName IDENTIFIED BY 13}

PhysicalDeliveryPersonalName ::= PDSParameter

physical-delivery-organization-name EXTENSION-ATTRIBUTE ::=
   {PhysicalDeliveryOrganizationName IDENTIFIED BY 14}

PhysicalDeliveryOrganizationName ::= PDSParameter

extension-physical-delivery-address-components EXTENSION-ATTRIBUTE ::=
   {ExtensionPhysicalDeliveryAddressComponents IDENTIFIED BY 15}

ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter

unformatted-postal-address EXTENSION-ATTRIBUTE ::=
                        {UnformattedPostalAddress IDENTIFIED BY 16}

UnformattedPostalAddress ::= SET {
   printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF
           PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
   teletex-string TeletexString (SIZE
                         (1..ub-unformatted-address-length)) OPTIONAL }

street-address EXTENSION-ATTRIBUTE ::=
                {StreetAddress IDENTIFIED BY 17}

StreetAddress ::= PDSParameter

post-office-box-address EXTENSION-ATTRIBUTE ::=
                {PostOfficeBoxAddress IDENTIFIED BY 18}

PostOfficeBoxAddress ::= PDSParameter

poste-restante-address EXTENSION-ATTRIBUTE ::=
                {PosteRestanteAddress IDENTIFIED BY 19}

PosteRestanteAddress ::= PDSParameter

unique-postal-name EXTENSION-ATTRIBUTE ::=
                {UniquePostalName IDENTIFIED BY 20}

UniquePostalName ::= PDSParameter

local-postal-attributes EXTENSION-ATTRIBUTE ::=
                {LocalPostalAttributes IDENTIFIED BY 21}

LocalPostalAttributes ::= PDSParameter

PDSParameter ::= SET {
   printable-string PrintableString
            (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
   teletex-string TeletexString
            (SIZE(1..ub-pds-parameter-length)) OPTIONAL }

extended-network-address EXTENSION-ATTRIBUTE ::=
                {ExtendedNetworkAddress IDENTIFIED BY 22}

ExtendedNetworkAddress ::= CHOICE {
        e163-4-address SEQUENCE {
                number [0] NumericString
                   (SIZE (1..ub-e163-4-number-length)),
                sub-address [1] NumericString
                   (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL},
        psap-address [0] PresentationAddress }

PresentationAddress ::= SEQUENCE {
        pSelector       [0] EXPLICIT OCTET STRING OPTIONAL,
        sSelector       [1] EXPLICIT OCTET STRING OPTIONAL,
        tSelector       [2] EXPLICIT OCTET STRING OPTIONAL,
        nAddresses      [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING}

terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}

TerminalType ::= INTEGER {
   telex (3),
   teletex (4),
   g3-facsimile (5),
   g4-facsimile (6),
   ia5-terminal (7),
   videotex (8) } (0..ub-integer-options)

--      Extension Domain-defined Attributes

teletex-domain-defined-attributes EXTENSION-ATTRIBUTE ::=
   {TeletexDomainDefinedAttributes IDENTIFIED BY 6}

TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
   (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute

TeletexDomainDefinedAttribute ::= SEQUENCE {
    type TeletexString
         (SIZE (1..ub-domain-defined-attribute-type-length)),
    value TeletexString
         (SIZE (1..ub-domain-defined-attribute-value-length)) }

--  specifications of Upper Bounds
--  shall be regarded as mandatory
--  from Annex B of ITU-T X.411
--  Reference Definition of MTS Parameter Upper Bounds

--      Upper Bounds
ub-name INTEGER ::=     32768
ub-common-name  INTEGER ::=     64
ub-locality-name        INTEGER ::=     128
ub-state-name   INTEGER ::=     128
ub-organization-name    INTEGER ::=     64
ub-organizational-unit-name     INTEGER ::=     64
ub-title        INTEGER ::=     64
ub-match        INTEGER ::=     128

ub-emailaddress-length INTEGER ::= 128

ub-common-name-length INTEGER ::= 64
ub-country-name-alpha-length INTEGER ::= 2
ub-country-name-numeric-length INTEGER ::= 3
ub-domain-defined-attributes INTEGER ::= 4
ub-domain-defined-attribute-type-length INTEGER ::= 8
ub-domain-defined-attribute-value-length INTEGER ::= 128
ub-domain-name-length INTEGER ::= 16
ub-extension-attributes INTEGER ::= 256
ub-e163-4-number-length INTEGER ::= 15
ub-e163-4-sub-address-length INTEGER ::= 40
ub-generation-qualifier-length INTEGER ::= 3
ub-given-name-length INTEGER ::= 16
ub-initials-length INTEGER ::= 5
ub-integer-options INTEGER ::= 256
ub-numeric-user-id-length INTEGER ::= 32
ub-organization-name-length INTEGER ::= 64
ub-organizational-unit-name-length INTEGER ::= 32
ub-organizational-units INTEGER ::= 4
ub-pds-name-length INTEGER ::= 16
ub-pds-parameter-length INTEGER ::= 30
ub-pds-physical-address-lines INTEGER ::= 6
ub-postal-code-length INTEGER ::= 16
ub-surname-length INTEGER ::= 40
ub-terminal-id-length INTEGER ::= 24
ub-unformatted-address-length INTEGER ::= 180

ub-x121-address-length INTEGER ::= 16

-- Note - upper bounds on TeletexString are measured in characters.
-- A significantly greater number of octets will be required to hold
-- such a value.  As a minimum, 16 octets, or twice the specified upper
-- bound, whichever is the larger, should be allowed.

END

B.2 隱示目標模塊(Implicitly Tagged Module), 1993 句法

PKIX1Implicit93  {iso(1) identified-organization(3) dod(6) internet(1)
   security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-93(4)}

DEFINITIONS IMPLICIT TAGS::=

BEGIN

--EXPORTS ALL --

IMPORTS
        id-pe, id-qt, id-kp, id-ad, id-qt-unotice,
                ORAddress, Name, RelativeDistinguishedName,
                CertificateSerialNumber, CertificateList,
                AlgorithmIdentifier, ub-name, DirectoryString,
                Attribute, EXTENSION
                FROM PKIX1Explicit93 {iso(1) identified-organization(3)
                dod(6) internet(1) security(5) mechanisms(5) pkix(7)
                id-mod(0) id-pkix1-explicit-93(3)};

-- Key and policy information extensions --

authorityKeyIdentifier EXTENSION ::= {
        SYNTAX          AuthorityKeyIdentifier
        IDENTIFIED BY   id-ce-authorityKeyIdentifier }

AuthorityKeyIdentifier ::= SEQUENCE {
    keyIdentifier               [0] KeyIdentifier            OPTIONAL,
    authorityCertIssuer         [1] GeneralNames             OPTIONAL,
    authorityCertSerialNumber   [2] CertificateSerialNumber  OPTIONAL }
        ( WITH COMPONENTS       {..., authorityCertIssuer PRESENT,
                                authorityCertSerialNumber PRESENT} |
         WITH COMPONENTS        {..., authorityCertIssuer ABSENT,
                                authorityCertSerialNumber ABSENT} )

KeyIdentifier ::= OCTET STRING

subjectKeyIdentifier EXTENSION ::= {
        SYNTAX          SubjectKeyIdentifier
        IDENTIFIED BY   id-ce-subjectKeyIdentifier }

SubjectKeyIdentifier ::= KeyIdentifier

keyUsage EXTENSION ::= {
        SYNTAX  KeyUsage
        IDENTIFIED BY id-ce-keyUsage }

KeyUsage ::= BIT STRING {
        digitalSignature     (0),
        nonRepudiation       (1),
        keyEncipherment      (2),
        dataEncipherment     (3),
        keyAgreement         (4),
        keyCertSign          (5),
        cRLSign              (6),
      encipherOnly         (7),
      decipherOnly         (8) }

extendedKeyUsage EXTENSION ::= {
        SYNTAX SEQUENCE SIZE (1..MAX) OF KeyPurposeId
        IDENTIFIED BY id-ce-extKeyUsage }

KeyPurposeId ::= OBJECT IDENTIFIER

-- PKIX-defined extended key purpose OIDs
id-kp-serverAuth      OBJECT IDENTIFIER ::= { id-kp 1 }
id-kp-clientAuth      OBJECT IDENTIFIER ::= { id-kp 2 }
id-kp-codeSigning     OBJECT IDENTIFIER ::= { id-kp 3 }
id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
id-kp-ipsecEndSystem  OBJECT IDENTIFIER ::= { id-kp 5 }
id-kp-ipsecTunnel     OBJECT IDENTIFIER ::= { id-kp 6 }
id-kp-ipsecUser       OBJECT IDENTIFIER ::= { id-kp 7 }
id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }

privateKeyUsagePeriod EXTENSION ::= {
        SYNTAX  PrivateKeyUsagePeriod
        IDENTIFIED BY { id-ce-privateKeyUsagePeriod } }

PrivateKeyUsagePeriod ::= SEQUENCE {
        notBefore       [0]     GeneralizedTime OPTIONAL,
        notAfter        [1]     GeneralizedTime OPTIONAL }
        ( WITH COMPONENTS       {..., notBefore PRESENT} |
        WITH COMPONENTS         {..., notAfter PRESENT} )

certificatePolicies EXTENSION ::= {
        SYNTAX  CertificatePoliciesSyntax
        IDENTIFIED BY id-ce-certificatePolicies }

CertificatePoliciesSyntax ::=
                SEQUENCE SIZE (1..MAX) OF PolicyInformation

PolicyInformation ::= SEQUENCE {
        policyIdentifier   CertPolicyId,
        policyQualifiers   SEQUENCE SIZE (1..MAX) OF
                PolicyQualifierInfo OPTIONAL }

CertPolicyId ::= OBJECT IDENTIFIER

PolicyQualifierInfo ::= SEQUENCE {
        policyQualifierId       CERT-POLICY-QUALIFIER.&id
                                    ({SupportedPolicyQualifiers}),
        qualifier               CERT-POLICY-QUALIFIER.&Qualifier
                                    ({SupportedPolicyQualifiers}
                                    {@policyQualifierId})OPTIONAL }

SupportedPolicyQualifiers CERT-POLICY-QUALIFIER ::= { noticeToUser |
                                                      pointerToCPS }

CERT-POLICY-QUALIFIER ::= CLASS {
        &id             OBJECT IDENTIFIER UNIQUE,
        &Qualifier      OPTIONAL }
WITH SYNTAX {
        POLICY-QUALIFIER-ID     &id
        [QUALIFIER-TYPE &Qualifier] }

policyMappings EXTENSION ::= {
        SYNTAX  PolicyMappingsSyntax
        IDENTIFIED BY id-ce-policyMappings }

PolicyMappingsSyntax ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
        issuerDomainPolicy           CertPolicyId,
        subjectDomainPolicy          CertPolicyId }

-- Certificate subject and certificate issuer attributes extensions --

subjectAltName EXTENSION ::= {
        SYNTAX  GeneralNames
        IDENTIFIED BY id-ce-subjectAltName }

GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName

GeneralName ::= CHOICE {
        otherName                   [0] INSTANCE OF OTHER-NAME,
        rfc822Name                  [1] IA5String,
        dNSName                     [2] IA5String,
        x400Address                 [3] ORAddress,
        directoryName               [4] Name,
        ediPartyName                [5] EDIPartyName,
        uniformResourceIdentifier   [6] IA5String,
        iPAddress                   [7] OCTET STRING,
        registeredID                [8] OBJECT IDENTIFIER }

OTHER-NAME ::= TYPE-IDENTIFIER

EDIPartyName ::= SEQUENCE {
        nameAssigner        [0] DirectoryString {ub-name} OPTIONAL,
        partyName           [1] DirectoryString {ub-name} }

issuerAltName EXTENSION ::= {
        SYNTAX  GeneralNames
        IDENTIFIED BY id-ce-issuerAltName }

subjectDirectoryAttributes EXTENSION ::= {
        SYNTAX  AttributesSyntax
        IDENTIFIED BY id-ce-subjectDirectoryAttributes }

AttributesSyntax ::= SEQUENCE SIZE (1..MAX) OF Attribute

-- Certification path constraints extensions --

basicConstraints EXTENSION ::= {
        SYNTAX  BasicConstraintsSyntax
        IDENTIFIED BY id-ce-basicConstraints }

BasicConstraintsSyntax ::= SEQUENCE {
        cA                      BOOLEAN DEFAULT FALSE,
        pathLenConstraint       INTEGER (0..MAX) OPTIONAL }

nameConstraints EXTENSION ::= {
        SYNTAX  NameConstraintsSyntax
        IDENTIFIED BY id-ce-nameConstraints }

NameConstraintsSyntax ::= SEQUENCE {
        permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
        excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }

GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree

GeneralSubtree ::= SEQUENCE {
        base                    GeneralName,
        minimum         [0]     BaseDistance DEFAULT 0,
        maximum         [1]     BaseDistance OPTIONAL }

BaseDistance ::= INTEGER (0..MAX)

policyConstraints EXTENSION ::= {
        SYNTAX  PolicyConstraintsSyntax
        IDENTIFIED BY id-ce-policyConstraints }

PolicyConstraintsSyntax ::= SEQUENCE {
        requireExplicitPolicy   [0] SkipCerts OPTIONAL,
        inhibitPolicyMapping    [1] SkipCerts OPTIONAL }

SkipCerts ::= INTEGER (0..MAX)

-- Basic CRL extensions --

cRLNumber EXTENSION ::= {
        SYNTAX  CRLNumber
        IDENTIFIED BY id-ce-cRLNumber }

CRLNumber ::= INTEGER (0..MAX)

reasonCode EXTENSION ::= {
        SYNTAX  CRLReason
        IDENTIFIED BY id-ce-reasonCode }

CRLReason ::= ENUMERATED {
        unspecified             (0),
        keyCompromise           (1),
        cACompromise            (2),
        affiliationChanged      (3),
        superseded              (4),
        cessationOfOperation    (5),
        certificateHold         (6),
        removeFromCRL           (8) }

instructionCode EXTENSION ::= {
        SYNTAX  HoldInstruction
        IDENTIFIED BY id-ce-instructionCode }

HoldInstruction ::= OBJECT IDENTIFIER

-- holdinstructions described in this specification, from ANSI x9

-- ANSI x9 arc holdinstruction arc
holdInstruction OBJECT IDENTIFIER ::= {
     joint-iso-ccitt(2) member-body(2) us(840) x9cm(10040) 2}

-- ANSI X9 holdinstructions referenced by this standard
id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1}
id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2}
id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3}

invalidityDate EXTENSION ::= {
        SYNTAX  GeneralizedTime
        IDENTIFIED BY id-ce-invalidityDate }

-- CRL distribution points and delta-CRL extensions --

cRLDistributionPoints EXTENSION ::= {

        SYNTAX  CRLDistPointsSyntax
        IDENTIFIED BY id-ce-cRLDistributionPoints }

CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint

DistributionPoint ::= SEQUENCE {
        distributionPoint       [0]     DistributionPointName OPTIONAL,
        reasons         [1]     ReasonFlags OPTIONAL,
        cRLIssuer               [2]     GeneralNames OPTIONAL }

DistributionPointName ::= CHOICE {
        fullName                [0]     GeneralNames,
        nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }

ReasonFlags ::= BIT STRING {
        unused                  (0),
        keyCompromise           (1),
        caCompromise            (2),
        affiliationChanged      (3),
        superseded              (4),
        cessationOfOperation    (5),
        certificateHold         (6) }

issuingDistributionPoint EXTENSION ::= {
        SYNTAX  IssuingDistPointSyntax
        IDENTIFIED BY id-ce-issuingDistributionPoint }

IssuingDistPointSyntax ::= SEQUENCE {
        distributionPoint       [0] DistributionPointName OPTIONAL,
        onlyContainsUserCerts   [1] BOOLEAN DEFAULT FALSE,
        onlyContainsCACerts     [2] BOOLEAN DEFAULT FALSE,
        onlySomeReasons         [3] ReasonFlags OPTIONAL,
        indirectCRL             [4] BOOLEAN DEFAULT FALSE }

certificateIssuer EXTENSION ::= {
        SYNTAX          GeneralNames
        IDENTIFIED BY id-ce-certificateIssuer }

deltaCRLIndicator EXTENSION ::= {
        SYNTAX          BaseCRLNumber
        IDENTIFIED BY id-ce-deltaCRLIndicator }

BaseCRLNumber ::= CRLNumber

-- Object identifier assignments for ISO certificate extensions --
id-ce   OBJECT IDENTIFIER       ::=     {joint-iso-ccitt(2) ds(5) 29}

id-ce-subjectDirectoryAttributes   OBJECT IDENTIFIER ::= {id-ce 9}

id-ce-subjectKeyIdentifier         OBJECT IDENTIFIER ::= {id-ce 14}
id-ce-keyUsage                     OBJECT IDENTIFIER ::= {id-ce 15}
id-ce-privateKeyUsagePeriod        OBJECT IDENTIFIER ::= {id-ce 16}
id-ce-subjectAltName               OBJECT IDENTIFIER ::= {id-ce 17}
id-ce-issuerAltName                OBJECT IDENTIFIER ::= {id-ce 18}
id-ce-basicConstraints             OBJECT IDENTIFIER ::= {id-ce 19}
id-ce-cRLNumber                    OBJECT IDENTIFIER ::= {id-ce 20}
id-ce-reasonCode                   OBJECT IDENTIFIER ::= {id-ce 21}
id-ce-instructionCode              OBJECT IDENTIFIER ::= {id-ce 23}
id-ce-invalidityDate               OBJECT IDENTIFIER ::= {id-ce 24}
id-ce-deltaCRLIndicator            OBJECT IDENTIFIER ::= {id-ce 27}
id-ce-issuingDistributionPoint     OBJECT IDENTIFIER ::= {id-ce 28}
id-ce-certificateIssuer            OBJECT IDENTIFIER ::= {id-ce 29}
id-ce-nameConstraints              OBJECT IDENTIFIER ::= {id-ce 30}
id-ce-cRLDistributionPoints        OBJECT IDENTIFIER ::= {id-ce 31}
id-ce-certificatePolicies          OBJECT IDENTIFIER ::= {id-ce 32}
id-ce-policyMappings               OBJECT IDENTIFIER ::= {id-ce 33}
id-ce-policyConstraints            OBJECT IDENTIFIER ::= {id-ce 36}
id-ce-authorityKeyIdentifier       OBJECT IDENTIFIER ::= {id-ce 35}
id-ce-extKeyUsage                  OBJECT IDENTIFIER ::= {id-ce 37}

-- PKIX 1 extensions

authorityInfoAccess EXTENSION ::= {
        SYNTAX  AuthorityInfoAccessSyntax
        IDENTIFIED BY id-pe-authorityInfoAccess }

AuthorityInfoAccessSyntax  ::=
        SEQUENCE SIZE (1..MAX) OF AccessDescription

AccessDescription  ::=  SEQUENCE {
        accessMethod          OBJECT IDENTIFIER,
        accessLocation        GeneralName  }

id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }

id-ad-ocsp      OBJECT IDENTIFIER ::= { id-ad 1 }
id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }

-- PKIX policy qualifier definitions

noticeToUser CERT-POLICY-QUALIFIER ::= {
     POLICY-QUALIFIER-ID    id-qt-cps QUALIFIER-TYPE       CPSuri}

pointerToCPS CERT-POLICY-QUALIFIER ::= {
     POLICY-QUALIFIER-ID    id-qt-unotice QUALIFIER-TYPE   UserNotice}

id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }

id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }

CPSuri ::= IA5String

UserNotice ::= SEQUENCE {
     noticeRef        NoticeReference OPTIONAL,
     explicitText     DisplayText OPTIONAL}

NoticeReference ::= SEQUENCE {
     organization     DisplayText,
     noticeNumbers    SEQUENCE OF INTEGER }

DisplayText ::= CHOICE {
     visibleString    VisibleString  (SIZE (1..200)),
     bmpString        BMPString      (SIZE (1..200)),
     utf8String       UTF8String     (SIZE (1..200)) }

END

附錄 C. ASN.1 註解

   結構"SEQUENCE SIZE (1..MAX) OF"出現在幾個ASN.1結構中。一個有效的序列(結構)
將包括零個或者多個實體。結構SIZE (1..MAX)包括最少一個實體序列。MAX 指示上屆沒
有特指。實現(Implementations)自由選擇適合他們(應用)環境的上屆。

   結構"positiveInt ::= INTEGER (0..MAX)"定義positiveInt作爲INTEGER的子集包
含大於或者等於0的整數。上屆沒有特指。實現(Implementations)自由選擇適合他們(應
用)環境的上屆。

   字符串類型PrintableString支持一個非常基本的拉丁(Latin)字符集:小寫字母 'a' 
到'z'、大寫字母'A'到'Z'、數字'0'到'9'、十一個特殊字符 ' " ( ) + , - . / : ? 以
及空格(space)。

   字符串類型TeletexString是PrintableString的超集。TeletexString 支持一個完整
標準 (ascii-like) 拉丁(Latin)字符集、 non-spacing accents 拉丁(Latin)字符
集以及日文字符(Japanese characters)。

   字符串類型UniversalString支持任何ISO 10646-1允許的字符。ISO 10646是普遍多
字節編碼字符集(the Universal multiple-octet coded Character Set (UCS))。ISO 10646-1
指定了結構格式和基本多語種平臺( "basic multilingual plane") - 一個大標準字符集
包括所有主要的世界字符標準。

   字符串類型UTF8String在1998版的ASN.1引入。UTF8String是普遍類型和已經被分配
12數字標籤(tag number 12)。UTF8String的內容被RFC2044定義和RFC 2279 "UTF-8, a 
transformation Format of ISP 10646."更新。同時ISO是預期標準加入UTF8String到1998
年DirectoryString選擇列表。

   準備這些改變,以及與IETF Best Practices 在RFC 2277編碼保持一致,在字符集和
語言的IETF Policy,這篇文檔包括UTF8String作爲在DirectoryString和CPS限定語擴
展的一個選擇。

附錄 D. 示例

   這部分包括四個例子:三個證書和一個CRL(例子)。
   前兩個證書和CRL包含最小的證書路徑。

   部分D.1包含一個由唯一名字是cn=us,o=gov,ou=nist的CA簽發的“自籤”證書十六進
制(堆)解釋。 證書包含DSA公開密鑰和(相關)參數,以及相對DSA私有的簽名。

   部分D.2包含一個終端證書的十六進制(堆)說明。終端證書包含一個DSA公鑰,以及
部分D.1中“自籤”證書中相對應私鑰的簽名。

   部分D.3包含一個終端證書十六進制(堆)解釋,其包含一RSA公開密鑰以及RSA and MD5
算法的簽名。這個證書不是最小證書路徑中的一部分。

   部分D.4包含一個CRL十六進制(堆)解釋。這個CRL是由唯一名字是
cn=us,o=gov,ou=nist 的CA簽發的。證書撤銷列表包括部分D.2中描述的終端證書。

D.1 證書

   這部分包括一版本3證書共699字節十六進制(堆)解釋。證書包含下列信息:
   (a) the serial number is 17 (11 hex);
   (b) the certificate is signed with DSA and the SHA-1 hash algorithm;
   (c) the issuer's distinguished name is OU=nist; O=gov; C=US
   (d) and the subject's distinguished name is OU=nist; O=gov; C=US
   (e) the certificate was issued on June 30, 1997 and will expire on
   December 31, 1997;
   (f) the certificate contains a 1024 bit DSA public key with
   parameters;
   (g) the certificate contains a subject key identifier extension; and
   (h) the certificate is a CA certificate (as indicated through the
   basic constraints extension.)

0000 30 82 02 b7  695: SEQUENCE
0004 30 82 02 77  631: . SEQUENCE    tbscertificate
0008 a0 03          3: . . [0]
0010 02 01          1: . . . INTEGER 2
                     : 02
0013 02 01          1: . . INTEGER 17
                     : 11

0016 30 09          9: . . SEQUENCE
0018 06 07          7: . . . OID 1.2.840.10040.4.3: dsa-with-sha
                     : 2a 86 48 ce 38 04 03
0027 30 2a         42: . . SEQUENCE
0029 31 0b         11: . . . SET
0031 30 09          9: . . . . SEQUENCE
0033 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0038 13 02          2: . . . . . PrintableString  'US'
                     : 55 53
0042 31 0c         12: . . . SET
0044 30 0a         10: . . . . SEQUENCE
0046 06 03          3: . . . . . OID 2.5.4.10: O
                     : 55 04 0a
0051 13 03          3: . . . . . PrintableString  'gov'
                     : 67 6f 76
0056 31 0d         13: . . . SET
0058 30 0b         11: . . . . SEQUENCE
0060 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b
0065 13 04          4: . . . . . PrintableString  'nist'
                     : 6e 69 73 74
0071 30 1e         30: . . SEQUENCE
0073 17 0d         13: . . . UTCTime  '970630000000Z'
                     : 39 37 30 36 33 30 30 30 30 30 30 30 5a
0088 17 0d         13: . . . UTCTime  '971231000000Z'
                     : 39 37 31 32 33 31 30 30 30 30 30 30 5a
0103 30 2a         42: . . SEQUENCE
0105 31 0b         11: . . . SET
0107 30 09          9: . . . . SEQUENCE
0109 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0114 13 02          2: . . . . . PrintableString  'US'
                     : 55 53
0118 31 0c         12: . . . SET
0120 30 0a         10: . . . . SEQUENCE
0122 06 03          3: . . . . . OID 2.5.4.10: O
                     : 55 04 0a
0127 13 03          3: . . . . . PrintableString  'gov'
                     : 67 6f 76
0132 31 0d         13: . . . SET
0134 30 0b         11: . . . . SEQUENCE
0136 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b
0141 13 04          4: . . . . . PrintableString  'nist'
                     : 6e 69 73 74
0147 30 82 01 b4  436: . . SEQUENCE
0151 30 82 01 29  297: . . . SEQUENCE

0155 06 07          7: . . . . OID 1.2.840.10040.4.1: dsa
                     : 2a 86 48 ce 38 04 01
0164 30 82 01 1c  284: . . . . SEQUENCE
0168 02 81 80     128: . . . . . INTEGER
                     : d4 38 02 c5 35 7b d5 0b a1 7e 5d 72 59 63 55 d3
                     : 45 56 ea e2 25 1a 6b c5 a4 ab aa 0b d4 62 b4 d2
                     : 21 b1 95 a2 c6 01 c9 c3 fa 01 6f 79 86 83 3d 03
                     : 61 e1 f1 92 ac bc 03 4e 89 a3 c9 53 4a f7 e2 a6
                     : 48 cf 42 1e 21 b1 5c 2b 3a 7f ba be 6b 5a f7 0a
                     : 26 d8 8e 1b eb ec bf 1e 5a 3f 45 c0 bd 31 23 be
                     : 69 71 a7 c2 90 fe a5 d6 80 b5 24 dc 44 9c eb 4d
                     : f9 da f0 c8 e8 a2 4c 99 07 5c 8e 35 2b 7d 57 8d
0299 02 14         20: . . . . . INTEGER
                     : a7 83 9b f3 bd 2c 20 07 fc 4c e7 e8 9f f3 39 83
                     : 51 0d dc dd
0321 02 81 80     128: . . . . . INTEGER
                     : 0e 3b 46 31 8a 0a 58 86 40 84 e3 a1 22 0d 88 ca
                     : 90 88 57 64 9f 01 21 e0 15 05 94 24 82 e2 10 90
                     : d9 e1 4e 10 5c e7 54 6b d4 0c 2b 1b 59 0a a0 b5
                     : a1 7d b5 07 e3 65 7c ea 90 d8 8e 30 42 e4 85 bb
                     : ac fa 4e 76 4b 78 0e df 6c e5 a6 e1 bd 59 77 7d
                     : a6 97 59 c5 29 a7 b3 3f 95 3e 9d f1 59 2d f7 42
                     : 87 62 3f f1 b8 6f c7 3d 4b b8 8d 74 c4 ca 44 90
                     : cf 67 db de 14 60 97 4a d1 f7 6d 9e 09 94 c4 0d
0452 03 81 84     132: . . . BIT STRING  (0 unused bits)
                     : 02 81 80 aa 98 ea 13 94 a2 db f1 5b 7f 98 2f 78
                     : e7 d8 e3 b9 71 86 f6 80 2f 40 39 c3 da 3b 4b 13
                     : 46 26 ee 0d 56 c5 a3 3a 39 b7 7d 33 c2 6b 5c 77
                     : 92 f2 55 65 90 39 cd 1a 3c 86 e1 32 eb 25 bc 91
                     : c4 ff 80 4f 36 61 bd cc e2 61 04 e0 7e 60 13 ca
                     : c0 9c dd e0 ea 41 de 33 c1 f1 44 a9 bc 71 de cf
                     : 59 d4 6e da 44 99 3c 21 64 e4 78 54 9d d0 7b ba
                     : 4e f5 18 4d 5e 39 30 bf e0 d1 f6 f4 83 25 4f 14
                     : aa 71 e1
0587 a3 32         50: . . [3]
0589 30 30         48: . . . SEQUENCE
0591 30 0f          9: . . . . SEQUENCE
0593 06 03          3: . . . . . OID 2.5.29.19: basicConstraints
                     : 55 1d 13
0598 01 01          1: . . . . . TRUE
                     : ff
0601 04 05          5: . . . . . OCTET STRING
                     : 30 03 01 01 ff
0608 30 1d         29: . SEQUENCE
0610 06 03          3: . . . . . OID 2.5.29.14: subjectKeyIdentifier
                     : 55 1d 0e
0615 04 16         22: . . . . . OCTET STRING
                     : 04 14 e7 26 c5 54 cd 5b a3 6f 35 68 95 aa d5 ff

                     : 1c 21 e4 22 75 d6
0639 30 09          9: . SEQUENCE
0641 06 07          7: . . OID 1.2.840.10040.4.3: dsa-with-sha
                     : 2a 86 48 ce 38 04 03
0650 03 2f         47: . BIT STRING  (0 unused bits)
                     : 30 2c 02 14 a0 66 c1 76 33 99 13 51 8d 93 64 2f
                     : ca 13 73 de 79 1a 7d 33 02 14 5d 90 f6 ce 92 4a
                     : bf 29 11 24 80 28 a6 5a 8e 73 b6 76 02 68

D.2 證書

   這部分包括一版本3證書共730字節十六進制(堆)解釋。證書包含下列信息:
   (a) the serial number is 18 (12 hex);
   (b) the certificate is signed with DSA and the SHA-1 hash algorithm;
   (c) the issuer's distinguished name is OU=nist; O=gov; C=US
   (d) and the subject's distinguished name is CN=Tim Polk; OU=nist;
   O=gov; C=US
   (e) the certificate was valid from July 30, 1997 through December 1,
   1997;
   (f) the certificate contains a 1024 bit DSA public key;
   (g) the certificate is an end entity certificate, as the basic
   constraints extension is not present;
   (h) the certificate contains an authority key identifier extension;
   and
   (i) the certificate includes one alternative name - an RFC 822
   address.

0000 30 82 02 d6  726: SEQUENCE
0004 30 82 02 96  662: . SEQUENCE
0008 a0 03          3: . . [0]
0010 02 01          1: . . . INTEGER 2
                     : 02
0013 02 01          1: . . INTEGER 18
                     : 12
0016 30 09          9: . . SEQUENCE
0018 06 07          7: . . . OID 1.2.840.10040.4.3: dsa-with-sha
                     : 2a 86 48 ce 38 04 03
0027 30 2a         42: . . SEQUENCE
0029 31 0b         11: . . . SET
0031 30 09          9: . . . . SEQUENCE
0033 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0038 13 02          2: . . . . . PrintableString  'US'
                     : 55 53
0042 31 0c         12: . . . SET
0044 30 0a         10: . . . . SEQUENCE
0046 06 03          3: . . . . . OID 2.5.4.10: O

                     : 55 04 0a
0051 13 03          3: . . . . . PrintableString  'gov'
                     : 67 6f 76
0056 31 0d         13: . . . SET
0058 30 0b         11: . . . . SEQUENCE
0060 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b
0065 13 04          4: . . . . . PrintableString  'nist'
                     : 6e 69 73 74
0071 30 1e         30: . . SEQUENCE
0073 17 0d         13: . . . UTCTime  '970730000000Z'
                     : 39 37 30 37 33 30 30 30 30 30 30 30 5a
0088 17 0d         13: . . . UTCTime  '971201000000Z'
                     : 39 37 31 32 30 31 30 30 30 30 30 30 5a
0103 30 3d         61: . . SEQUENCE
0105 31 0b         11: . . . SET
0107 30 09          9: . . . . SEQUENCE
0109 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0114 13 02          2: . . . . . PrintableString  'US'
                     : 55 53
0118 31 0c         12: . . . SET
0120 30 0a         10: . . . . SEQUENCE
0122 06 03          3: . . . . . OID 2.5.4.10: O
                     : 55 04 0a
0127 13 03          3: . . . . . PrintableString  'gov'
                     : 67 6f 76
0132 31 0d         13: . . . SET
0134 30 0b         11: . . . . SEQUENCE
0136 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b
0141 13 04          4: . . . . . PrintableString  'nist'
                     : 6e 69 73 74
0147 31 11         17: . . . SET
0149 30 0f         15: . . . . SEQUENCE
0151 06 03          3: . . . . . OID 2.5.4.3: CN
                     : 55 04 03
0156 13 08          8: . . . . . PrintableString  'Tim Polk'
                     : 54 69 6d 20 50 6f 6c 6b
0166 30 82 01 b4  436: . . SEQUENCE
0170 30 82 01 29  297: . . . SEQUENCE
0174 06 07          7: . . . . OID 1.2.840.10040.4.1: dsa
                     : 2a 86 48 ce 38 04 01
0183 30 82 01 1c  284: . . . . SEQUENCE
0187 02 81 80     128: . . . . . INTEGER
                     : d4 38 02 c5 35 7b d5 0b a1 7e 5d 72 59 63 55 d3
                     : 45 56 ea e2 25 1a 6b c5 a4 ab aa 0b d4 62 b4 d2
                     : 21 b1 95 a2 c6 01 c9 c3 fa 01 6f 79 86 83 3d 03

                     : 61 e1 f1 92 ac bc 03 4e 89 a3 c9 53 4a f7 e2 a6
                     : 48 cf 42 1e 21 b1 5c 2b 3a 7f ba be 6b 5a f7 0a
                     : 26 d8 8e 1b eb ec bf 1e 5a 3f 45 c0 bd 31 23 be
                     : 69 71 a7 c2 90 fe a5 d6 80 b5 24 dc 44 9c eb 4d
                     : f9 da f0 c8 e8 a2 4c 99 07 5c 8e 35 2b 7d 57 8d
0318 02 14         20: . . . . . INTEGER
                     : a7 83 9b f3 bd 2c 20 07 fc 4c e7 e8 9f f3 39 83
                     : 51 0d dc dd
0340 02 81 80     128: . . . . . INTEGER
                     : 0e 3b 46 31 8a 0a 58 86 40 84 e3 a1 22 0d 88 ca
                     : 90 88 57 64 9f 01 21 e0 15 05 94 24 82 e2 10 90
                     : d9 e1 4e 10 5c e7 54 6b d4 0c 2b 1b 59 0a a0 b5
                     : a1 7d b5 07 e3 65 7c ea 90 d8 8e 30 42 e4 85 bb
                     : ac fa 4e 76 4b 78 0e df 6c e5 a6 e1 bd 59 77 7d
                     : a6 97 59 c5 29 a7 b3 3f 95 3e 9d f1 59 2d f7 42
                     : 87 62 3f f1 b8 6f c7 3d 4b b8 8d 74 c4 ca 44 90
                     : cf 67 db de 14 60 97 4a d1 f7 6d 9e 09 94 c4 0d
0471 03 81 84     132: . . . BIT STRING  (0 unused bits)
                     : 02 81 80 a8 63 b1 60 70 94 7e 0b 86 08 93 0c 0d
                     : 08 12 4a 58 a9 af 9a 09 38 54 3b 46 82 fb 85 0d
                     : 18 8b 2a 77 f7 58 e8 f0 1d d2 18 df fe e7 e9 35
                     : c8 a6 1a db 8d 3d 3d f8 73 14 a9 0b 39 c7 95 f6
                     : 52 7d 2d 13 8c ae 03 29 3c 4e 8c b0 26 18 b6 d8
                     : 11 1f d4 12 0c 13 ce 3f f1 c7 05 4e df e1 fc 44
                     : fd 25 34 19 4a 81 0d dd 98 42 ac d3 b6 91 0c 7f
                     : 16 72 a3 a0 8a d7 01 7f fb 9c 93 e8 99 92 c8 42
                     : 47 c6 43
0606 a3 3e         62: . . [3]
0608 30 3c         60: . . . SEQUENCE
0610 30 19         25: . . . . SEQUENCE
0612 06 03          3: . . . . . OID 2.5.29.17: subjectAltName
                     : 55 1d 11
0617 04 12         18: . . . . . OCTET STRING
                     : 30 10 81 0e 77 70 6f 6c 6b 40 6e 69 73 74 2e 67
                     : 6f 76
0637 30 1f         31: . . . . SEQUENCE
0639 06 03          3: . . . . . OID 2.5.29.35: subjectAltName
                     : 55 1d 23
0644 04 18         24: . . . . . OCTET STRING
                     : 30 16 80 14 e7 26 c5 54 cd 5b a3 6f 35 68 95 aa
                     : d5 ff 1c 21 e4 22 75 d6
0670 30 09          9: . SEQUENCE
0672 06 07          7: . . OID 1.2.840.10040.4.3: dsa-with-sha
                     : 2a 86 48 ce 38 04 03
0681 03 2f         47: . BIT STRING  (0 unused bits)
                     : 30 2c 02 14 3c 02 e0 ab d9 5d 05 77 75 15 71 58
                     : 92 29 48 c4 1c 54 df fc 02 14 5b da 53 98 7f c5
                     : 33 df c6 09 b2 7a e3 6f 97 70 1e 14 ed 94

D.3 RSA算法終端證書

   這部分包括一版本3證書共675字節十六進制(堆)解釋。證書包含下列信息:
   (a) the serial number is 256;
   (b) the certificate is signed with RSA and the MD2 hash algorithm;
   (c) the issuer's distinguished name is OU=Dept. Arquitectura de
   Computadors; O=Universitat Politecnica de Catalunya; C=ES
   (d) and the subject's distinguished name is CN=Francisco Jordan;
   OU=Dept. Arquitectura de Computadors; O=Universitat Politecnica de
   Catalunya; C=ES
   (e) the certificate was issued on May 21, 1996 and expired on May 21,
   1997;
   (f) the certificate contains a 768 bit RSA public key;
   (g) the certificate is an end entity certificate (not a CA
   certificate);
   (h) the certificate includes an alternative subject name and an
   alternative issuer name - bothe are URLs;
   (i) the certificate include an authority key identifier and
   certificate policies extensions; and
   (j) the certificate includes a critical key usage extension
   specifying the public is intended for generation of digital
   signatures.

0000 30 80           : SEQUENCE   (size undefined)
0002 30 82 02 40  576: . SEQUENCE
0006 a0 03          3: . . [0]
0008 02 01          1: . . . INTEGER 2
                     : 02
0011 02 02          2: . . INTEGER 256
                     : 01 00
0015 30 0d         13: . . SEQUENCE
0017 06 09          9: . . . OID 1.2.840.113549.1.1.2:
                                       MD2WithRSAEncryption
                     : 2a 86 48 86 f7 0d 01 01 02
0028 05 00          0: . . . NULL
0030 30 68         88: . . SEQUENCE
0032 31 0b         11: . . . SET
0034 30 09          9: . . . . SEQUENCE
0036 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0041 13 02          2: . . . . . PrintableString  'ES'
                     : 45 53
0045 31 2d         45: . . . SET
0047 30 2b         43: . . . . SEQUENCE
0049 06 03          3: . . . . . OID 2.5.4.10: O
                     : 55 04 0a
0054 13 24         36: . . . . . PrintableString

                     'Universitat Politecnica de Catalunya'
                     : 55 6e 69 76 65 72 73 69 74 61 74 20 50 6f 6c 69
                     : 74 65 63 6e 69 63 61 20 64 65 20 43 61 74 61 6c
                     : 75 6e 79 61
0092 31 2a         42: . . . SET
0094 30 28         40: . . . . SEQUENCE
0096 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b
0101 13 21         33: . . . . . PrintableString
                     'OU=Dept. Arquitectura de Computadors'
                     : 44 65 70 74 2e 20 41 72 71 75 69 74 65 63 74 75
                     : 72 61 20 64 65 20 43 6f 6d 70 75 74 61 64 6f 72
                     : 73
0136 30 1e         30: . . SEQUENCE
0138 17 0d         13: . . . UTCTime  '960521095826Z'
                     : 39 36 30 37 32 32 31 37 33 38 30 32 5a
0153 17 0d         13: . . . UTCTime  '979521095826Z'
                     : 39 37 30 37 32 32 31 37 33 38 30 32 5a
0168 30 81 83     112: . . SEQUENCE
0171 31 0b         11: . . . SET
0173 30 09          9: . . . . SEQUENCE
0175 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0180 13 02          2: . . . . . PrintableString  'ES'
                     : 45 53
0184 31 2d         12: . . . SET
0186 30 2b         16: . . . . SEQUENCE
0188 06 03          3: . . . . . OID 2.5.4.10: O
                     : 55 04 0a
0193 13 24         36: . . . . . PrintableString
                     'Universitat Politecnica de Catalunya'
                     : 55 6e 69 76 65 72 73 69 74 61 74 20 50 6f 6c 69
                     : 74 65 63 6e 69 63 61 20 64 65 20 43 61 74 61 6c
                     : 75 6e 79 61
0231 31 2a         42: . . . SET
0233 30 28         40: . . . . SEQUENCE
0235 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b
0240 13 21         33: . . . . . PrintableString
                     'Dept. Arquitectura de Computadors'
                     : 44 65 70 74 2e 20 41 72 71 75 69 74 65 63 74 75
                     : 72 61 20 64 65 20 43 6f 6d 70 75 74 61 64 6f 72
                     : 73
0275 31 19         22: . . . SET
0277 30 17         20: . . . . SEQUENCE
0279 06 03          3: . . . . . OID 2.5.4.3: CN
                     : 55 04 03
0284 13 10         16: . . . . . PrintableString 'Francisco Jordan'

                     : 46 72 61 6e 63 69 73 63 6f 20 4a 6f 72 64 61 6e
0302 30 7c          2: . . SEQUENCE
0304 30 0d         13: . . . SEQUENCE
0306 06 09          9: . . . . OID 1.2.840.113549.1.1.1: RSAEncryption
                     : 2a 86 48 86 f7 0d 01 01 01
0317 05 00          0: . . . . NULL
0319 03 6b        107: . . . BIT STRING
                     : 00   (0 unused bits)
                     : 30 68 02 61 00 be aa 8b 77 54 a3 af ca 77 9f 2f
                     : b0 cf 43 88 ff a6 6d 79 55 5b 61 8c 68 ec 48 1e
                     : 8a 86 38 a4 fe 19 b8 62 17 1d 9d 0f 47 2c ff 63
                     : 8f 29 91 04 d1 52 bc 7f 67 b6 b2 8f 74 55 c1 33
                     : 21 6c 8f ab 01 95 24 c8 b2 73 93 9d 22 61 50 a9
                     : 35 fb 9d 57 50 32 ef 56 52 50 93 ab b1 88 94 78
                     : 56 15 c6 1c 8b 02 03 01 00 01
0428 a3 81 97     151: . . [3]
0431 30 3c         60: . . . SEQUENCE
0433 30 1f         31: . . . . SEQUENCE
0435 06 03          3: . . . . . OID 2.5.29.35: authorityKeyIdentifier
                     : 55 1d 23
0440 04 14         22: . . . . . OCTET STRING
                     : 30 12 80 10 0e 6b 3a bf 04 ea 04 c3 0e 6b 3a bf
                     : 04 ea 04 c3
0464 30 19         25: . . . . SEQUENCE
0466 06 03          3: . . . . . OID 2.5.29.15: keyUsage
                     : 55 1d 0f
0471 01 01          1: . . . . . TRUE
0474 04 04          4: . . . . . OCTET STRING
                     : 03 02 07 80
0480 30 19         25: . . . . SEQUENCE
0482 06 03          3: . . . . . OID 2.5.29.32: certificatePolicies
                     : 55 1d 20
0487 04 21         33: . . . . . OCTET STRING
                     : 30 1f 30 1d 06 04 2a 84 80 00 30 15 30 07 06 05
                     : 2a 84 80 00 01 30 0a 06 05 2a 84 80 00 02 02 01
                     : 0a
0522 30 1c         28: . . . . SEQUENCE
0524 06 03          3: . . . . . OID 2.5.29.17: subjectAltName
                     : 55 1d 11
0529 04 15         21: . . . . . OCTET STRING
                     : 30 13 86 11 68 74 74 70 3a 2f 2f 61 63 2e 75 70
                     : 63 2e 65 73 2f
0552 30 19         25: . . . . SEQUENCE
0554 06 03          3: . . . . . OID 2.5.29.18: issuerAltName
                     : 55 1d 12
0559 04 12         18: . . . . . OCTET STRING
                     : 30 14 86 12 68 74 74 70 3a 2f 2f 77 77 77 2e 75
                     : 70 63 2e 65

0579 30 80           : . SEQUENCE (indefinite length)
0581 06 07          7: . . OID
0583 05 00          0: . . NULL
0585 00 00          0: . . end of contents marker
0587 03 81 81      47: . BIT STRING
                     : 00      (0 unused bits)
                     : 5c 01 bd b5 41 88 87 7a 0e d3 0e 6b 3a bf 04 ea
                     : 04 cb 5f 61 72 3c a3 bd 78 f5 66 17 fe 37 3a ab
                     : eb 67 bf b7 da a8 38 f6 33 15 71 75 2f b9 8c 91
                     : a0 e4 87 ba 4b 43 a0 22 8f d3 a9 86 43 89 e6 50
                     : 5c 01 bd b5 41 88 87 7a 0e d3 0e 6b 3a bf 04 ea
                     : 04 cb 5f 61 72 3c a3 bd 78 f5 66 17 fe 37 3a ab
                     : eb 67 bf b7 da a8 38 f6 33 15 71 75 2f b9 8c 91
                     : a0 e4 87 ba 4b 43 a0 22 8f d3 a9 86 43 89 e6 50
0637 00 00          0: . . end of contents marker

D.4 證書撤銷列表

   這部分包括一個版本2 CRL一擴展的十六進制(堆)解釋。CRL被OU=nist;O=gov;C=us
在July 7, 1996簽發;下次計劃發佈時間是August 7, 1996.  CRL 包含一個撤銷證書:
序列號 18 (12 hex).CRL本身號碼是18, 使用DSA and SHA-1算法簽名。

0000 30 81 ba     186: SEQUENCE
0003 30 7c        124: . SEQUENCE
0005 02 01          1: . . INTEGER 1
                     : 01
0008 30 09          9: . . SEQUENCE
0010 06 07          7: . . . OID 1.2.840.10040.4.3: dsa-with-sha
                     : 2a 86 48 ce 38 04 03
0019 30 2a         42: . . SEQUENCE
0021 31 0b         11: . . . SET
0023 30 09          9: . . . . SEQUENCE
0025 06 03          3: . . . . . OID 2.5.4.6: C
                     : 55 04 06
0030 13 02          2: . . . . . PrintableString  'US'
                     : 55 53
0034 31 0c         12: . . . SET
0036 30 0a         10: . . . . SEQUENCE
0038 06 03          3: . . . . . OID 2.5.4.10: O
                     : 55 04 0a
0043 13 03          3: . . . . . PrintableString  'gov'
                     : 67 6f 76
0048 31 0d         13: . . . SET
0050 30 0b         11: . . . . SEQUENCE
0052 06 03          3: . . . . . OID 2.5.4.11: OU
                     : 55 04 0b

0057 13 04          4: . . . . . PrintableString  'nist'
                     : 6e 69 73 74
0063 17 0d         13: . . UTCTime  '970801000000Z'
                     : 39 37 30 38 30 31 30 30 30 30 30 30 5a
0078 17 0d         13: . . UTCTime  '970808000000Z'
                     : 39 37 30 38 30 38 30 30 30 30 30 30 5a
0093 30 22         34: . . SEQUENCE
0095 30 20         32: . . . SEQUENCE
0097 02 01          1: . . . . INTEGER 18
                     : 12
0100 17 0d         13: . . . . UTCTime  '970731000000Z'
                     : 39 37 30 37 33 31 30 30 30 30 30 30 5a
0115 30 0c         12: . . . . SEQUENCE
0117 30 0a         10: . . . . . SEQUENCE
0119 06 03          3: . . . . . . OID 2.5.29.21: reasonCode
                     : 55 1d 15
0124 04 03          3: . . . . . . OCTET STRING
                     : 0a 01 01
0129 30 09          9: . SEQUENCE
0131 06 07          7: . . OID 1.2.840.10040.4.3: dsa-with-sha
                     : 2a 86 48 ce 38 04 03
0140 03 2f         47: . BIT STRING  (0 unused bits)
                     : 30 2c 02 14 9e d8 6b c1 7d c2 c4 02 f5 17 84 f9
                     : 9f 46 7a ca cf b7 05 8a 02 14 9e 43 39 85 dc ea
                     : 14 13 72 93 54 5d 44 44 e5 05 fe 73 9a b2

附錄 E. Authors' Addresses

   Russell Housley
   SPYRUS
   381 Elden Street
   Suite 1120
   Herndon, VA 20170
   USA

   EMail: [email protected]

   Warwick Ford
   VeriSign, Inc.
   One Alewife Center
   Cambridge, MA 02140
   USA

   EMail: [email protected]

   Tim Polk
   NIST
   Building 820, Room 426
   Gaithersburg, MD 20899
   USA

   EMail: [email protected]

   David Solo
   Citicorp
   666 Fifth Ave, 3rd Floor
   New York, NY 10103
   USA

   EMail: [email protected]


附錄F.完整版權聲明

   版權(C)Internet協會(1999)。版權所有。

   這個文檔和它的翻譯可以拷貝和分配給其他人,以及有關評論或者別樣的解釋或者其應
用的幫助等派生工作可以被準備、拷貝、發表和發佈,其整體或者部分沒有受到任何限制,
提供上述版權通知以及本段落應被包含在所有這樣的拷貝和派生工作。然而,這個文檔本身
不可以以任何方式修改,例如移走版權通知或者Internet協會或其他Internet組織的參考,
除非爲了發展Internet標準(其版權程序定義在Internet Standards進程如下),或者需要翻譯
成除英語以外的其他語言。

   上述限制允許授權是持久的並且將不被Internet協會或者它的繼承人隱藏或者轉讓。

   This document and the information contained herein is provided on an "AS IS" basis 
and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


附錄 F.  Full Copyright Statement

   Copyright (C) The Internet Society (1999).  All Rights Reserved.

   This document and translations of it may be copied and furnished to others, and 
derivative works that comment on or otherwise explain it or assist in its implementation 
may be prepared, copied, published and distributed, in whole or in part, without 
restriction of any kind, provided that the above copyright notice and this paragraph 
are included on all such copies and derivative works.  However, this document itself 
may not be modified in any way, such as by removing the copyright notice or references 
to the Internet Society or other Internet organizations, except as needed for the purpose 
of developing Internet standards in which case the procedures for copyrights defined 
in the Internet Standards process must be followed, or as required to translate it into 
languages other than English.

   The limited permissions granted above are perpetual and will not be revoked by the 
Internet Society or its successors or assigns.

   This document and the information contained herein is provided on an "AS IS" basis 
and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, 
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.


RFC2459——Internet X.509 Public Key InfrastructureCertificate and CRL Profile 
Internet X.509 公鑰基礎設施――證書和CRL簡介
RFC文檔中文翻譯計劃  1

 

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