本檔案介紹最常用的公開金鑰基礎架構(PKI)資料格式和編碼。
思科建議您瞭解以下主題:
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
如需檔案慣例的相關資訊,請參閱思科技術提示慣例。
抽象語法表示法1(ASN.1)是一種形式化語言,用於定義資料型別和值,以及在各種資料結構中如何使用和組合這些資料型別和值。該標準的目的是定義資訊的抽象語法,而不限制資訊如何被編碼以供傳輸。
以下是一個摘自X.509 RFC的範例:
Version ::= INTEGER { v1(0), v2(1), v3(2) }
CertificateSerialNumber ::= INTEGER
Validity ::= SEQUENCE {
notBefore Time,
notAfter Time }
Time ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
請參閱國際電信聯盟(ITU-T)標準站點中的以下文檔:
ITU-T建議搜尋 — 在記錄中搜尋X.509或standard,Language設定為ASN.1。
ITU-T定義了一種將ASN.1中描述的資料結構編碼為二進位制資料的標準方法。X.690定義基本編碼規則(BER)及其兩個子集,規範編碼規則(CER)和可分辨編碼規則(DER)。 這三個欄位都基於封裝在分層結構中的type-length-value資料欄位,該分層結構由SEQUENCE、SET和CHOICE構建,具有以下差異:
範例:在DER中,20位值1010 101 1100 1101 1110編碼為:
0x03(
位字串)0x04(
位元組)0x04ABCDE0
: 0x030404ABCDE0
前導04
表示必須捨棄編碼值的最後4位(等於尾部0
位),因為編碼值不會在位元組邊界上結束。
請參閱TU-T標準網站中的以下文檔:
在維基百科網站上,請參閱以下文檔:
Cisco IOS、Adaptive Security Appliance(ASA)和其他裝置使用show running-config命令將DER內容顯示為十六進位制轉儲。 以下為輸出內容:
crypto pki certificate chain root
certificate ca 01
30820213 3082017C A0030201 02020101 300D0609 2A864886 F70D0101 04050030
1D310C30 0A060355 040B1303 54414331 0D300B06 03550403 1304726F 6F74301E
170D3039 30373235 31313436 33325A17 0D313230 37323431 31343633 325A301D
...
這種十六進位制轉儲可以通過多種方式轉換回DER。例如,可以刪除空格字元並將其引導到xxd程式:
$ cat ca.hex | tr -d ' ' | xxd -r -p -c 32 | openssl x509 -inform der -text -noout
另一種簡單方法是使用此Perl指令碼:
#!/usr/bin/perl
foreach (<>) {
s/[^a-fA-F0-9]//g;
print join("", pack("H*", $_));
}
$ perl hex2der.pl < hex-file.txt > der-file.der
此外,還有一種轉換證書轉儲的簡潔方法,每個轉儲之前都通過bash命令列手動複製到副檔名為.hex的檔案,如下所示:
for hex in *.hex; do
b="${hex%.hex}"
hex2der.pl < "$hex" > "$b".der
openssl x509 -inform der -in "$b".der > "$b".pem
openssl x509 -in "$b".pem -text -noout > "$b".txt
done
每個檔案都會產生以下結果:
Base64編碼表示只有64個可列印字元(A-Za-z0-9+/
)的二進位制資料,與uuencode類似。在二進位制到Base64的轉換中,原始資料的每個6位塊都被編碼成一個8位可列印的ASCII字元和一個轉換表。因此,編碼後的資料大小增加了33%(資料乘以8除以6位,等於1.333)。
24位緩衝器用於將三(3)組八(8)位轉換為四(4)組六(6)位。因此,在輸入資料流的末尾可能需要一(1)或二(2)位元組的填充。填充在Base64編碼的資料的末尾以一個等號(=)表示,每組八(8)個填充位在編碼期間新增到輸
入。
請參閱來自Wikipedia的示例。
請參閱RFC 4648中的最新資訊:Base16、Base32和Base64資料編碼。
Privacy Enhanced Mail(PEM)是一種完整的Internet工程任務組(IETF)PKI標準,用於交換安全郵件。它不再被廣泛使用,但其封裝語法被廣泛借用,以便格式化和交換Base64編碼的PKI相關資料。
PEM RFC 1421第4.4節:封裝機制,定義由封裝邊界(EB)分隔的PEM訊息(基於RFC 934),格式如下:
-----BEGIN PRIVACY-ENHANCED MESSAGE-----
Header: value
Header: value
...
Base64-encoded data
...
-----END PRIVACY-ENHANCED MESSAGE-----
在今天的實踐中,當分發PEM格式的資料時,會使用以下邊界格式:
-----BEGIN type-----
...
-----END type-----
type可以使用其他金鑰或證書,例如:
RSA私鑰
加密的私鑰
憑證
證書請求
X509 CRL
附註:雖然RFC並未將此規定為必填,但EB中的前導和尾隨短劃線(-
)的數量相當大,應該始終為五(5)。 否則,某些應用程式(例如OpenSSL)會阻塞輸入。另一方面,其他應用(例如Cisco IOS)完全不需要EB。
如需詳細資訊,請參閱以下最近的RFC:
X.509是X.500的子集,它是有關開放系統互連的擴展ITU規範。它專門處理證書和公鑰,並被IETF調整為Internet標準。X.509提供在RFC中用ASN.1表示法表示的結構和語法,以儲存憑證資訊和憑證撤銷清單。
在X.509 PKI中,CA會發出繫結公共金鑰的證書,例如:Rivest-Shamir-Adleman(RSA)或數位簽章演算法(DSA)金鑰用於特定可分辨名稱(DN),或替代名稱(如電子郵件地址或完全限定域名(FQDN))。 DN遵循X.500標準中的結構。以下是範例:
CN=common-name,OU=organizational-unit,O=organization,L=location,C=country
由於ASN.1的定義,X.509資料可以編碼為DER以便以二進位制形式交換,並可選轉換為Base64/PEM用於基於文本的通訊方式,例如終端上的複製貼上。
公開金鑰加密標準(PKCS)是來自RSA Labs的規範,已部分發展為行業標準。最常遇到的問題涉及這些主題;然而,它們並不都處理資料格式。
PKCS#1(RFC 3347) — 涵蓋基於RSA的加密(加密原語、加密/簽名方案、ASN.1語法)的實施方面。
PKCS#5(RFC 2898) — 涵蓋基於密碼的金鑰派生。
PKCS#7(RFC 2315)和S/MIME RFC 3852 - 定義用於傳輸已簽名和加密的資料以及相關證書的消息語法。通常僅用作X.509證書的容器。
PKCS#8 — 定義消息語法以傳輸明文或加密的RSA金鑰對。
PKCS#9(RFC 2985) — 定義其他對象類和身份屬性。
PKCS#10(RFC 2986) — 定義憑證簽署請求(CSR)的訊息語法。CSR由實體傳送到CA,並包含要由CA簽署的資訊,例如公開金鑰資訊、身分和其他屬性。
PKCS#12 — 定義一個容器,用於將相關PKI資料(通常為entity keypair + entity cert + root和中繼CA證書)打包到單個檔案中。它是Microsoft個人資訊交換(PFX)格式的演變。
請參閱以下資源: