[資訊保安] 05 X.509 公鑰證書的格式標準
X.509是# 公鑰證書的格式標準, 廣泛用於TLS/SSL安全通訊或者其他需要認證的環境中。X.509證書可以由# CA頒發,也可以自簽名產生。
1 Overview {#1-overview}
X.509證書中主要含有公鑰
、身份資訊
、簽名信息
和有效性資訊
等資訊。這些資訊用於構建一個驗證公鑰的體系,用來保證客戶端得到的公鑰正是它期望的公鑰。
公鑰
: 非對稱密碼中的公鑰。公鑰證書的目的就是為了在網際網路上分發公鑰。身份資訊
: 公鑰對應的私鑰持有者的資訊,域名以及用途等。簽名信息
: 對公鑰進行簽名的資訊,提供公鑰的驗證鏈。可以是CA的簽名或者是自簽名,不同之處在於CA證書的根證書大都內置於作業系統或者瀏覽器中,而自簽名證書的公鑰驗證鏈則需要自己維護(手動匯入到作業系統中或者再驗證流程中單獨提供自簽名的根證書)。有效性資訊
:證書的有效時間區間,以及# CRL等相關資訊。
X.509證書的標準規範RFC5280中詳細描述了證書的# 1.1 Encoding Format和# 1.2 Structure。
1.1 Encoding Format {#1-1-encoding-format}
- # DER格式 :
二進位制
格式。 - # PEM格式 :
ASCII文字
格式。在DER格式或者其他二進位制資料的基礎上,使用base64編碼為ASCII文字,以便於在僅支援ASCII的環境中使用二進位制的DER編碼的資料
。
1.2 Structure {#1-2-structure}
一個具體的X.509 v3數字證書結構大致如下 :
Certificate Version Number Serial Number Signature Algorithm ID Issuer Name Validity period Not Before Not After Subject name Subject Public Key Info Public Key Algorithm Subject Public Key Issuer Unique Identifier (optional) Subject Unique Identifier (optional) Extensions (optional) ... Certificate Signature Algorithm Certificate Signature
2 File Extension {#2-file-extension}
X.509有很多種常用的副檔名。不過這些副檔名有時候也是其他型別檔案的副檔名,也就是說具有這個副檔名的檔案並不一定是X.509證書。也可能只是儲存了私鑰的檔案。
.pem
: PEM格式。.key
: PEM格式的私鑰檔案。.pub
: PEM格式的公鑰檔案。.crt
: PEM格式的# 公鑰證書檔案,也可能是DER。.cer
: DER格式的# 公鑰證書檔案,也可能是PEM。.crs
: PEM格式的# CSR檔案,也可能是DER。
3 Reference {#reference}
3.1 公鑰證書 {#public-key-certificate}
Public Key Certificate
=公鑰證書
。
參考資料 : https://en.wikipedia.org/wiki/Public_key_certificate
3.2 CA {#certificate-authority}
CA
=Certificate Authority
=證書頒發機構
。
參考資料 : https://en.wikipedia.org/wiki/Certificate_authority
3.3 DER {#distinguished-encoding-rules}
DER
=Distinguished Encoding Rules
是# X.690標準中的一種二進位制編碼格式。
下面的檔案是https://google.com所使用的DER編碼的二進位制公鑰證書檔案(由於是二進位制,故而顯示亂碼)。
{{
參考資料 : https://en.wikipedia.org/wiki/X.690#DER_encoding。
3.4 PEM {#privacy-enhanced-mail}
PEM
=Privacy Enhanced Mail
=隱私增強郵件
。
PEM是一種事實上的標準檔案格式,採用base64來編碼金鑰或證書等其他二進位制資料,以便在僅支援ASCII
文字的環境中使用二進位制資料
。PEM在RFC7468中被正式標準化。具體格式如下:
-----BEGIN label 1-----
base64 string...
-----END label 1-----
-----BEGIN label 2-----
base64 string...
-----END label 2-----
其中label 1
和label 2
可以有1~N
個。常用的label
有(https://tools.ietf.org/html/rfc7468#section-4):
CERTIFICATE
: 公鑰證書檔案 。CERTIFICATE REQUEST
: CSR請求證書檔案。PRIVATE KEY
: 私鑰檔案。PUBLIC KEY
: 公鑰檔案。X509 CRL
: X509證書吊銷列表檔案。
下面的檔案是上面的google.com.der.cer
的PEM編碼形式 :
{{
參考資料 :
- https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail
- https://tools.ietf.org/html/rfc7468
3.5 CSR {#certificate-signing-request}
CSR
=Certificate Signing Request
=證書籤名請求
。
-----BEGIN CERTIFICATE REQUEST-----
MIIBWDCCAQcCAQAwTjELMAkGA1UEBhMCU0UxJzAlBgNVBAoTHlNpbW9uIEpvc2Vm
c3NvbiBEYXRha29uc3VsdCBBQjEWMBQGA1UEAxMNam9zZWZzc29uLm9yZzBOMBAG
ByqGSM49AgEGBSuBBAAhAzoABLLPSkuXY0l66MbxVJ3Mot5FCFuqQfn6dTs+9/CM
EOlSwVej77tj56kj9R/j9Q+LfysX8FO9I5p3oGIwYAYJKoZIhvcNAQkOMVMwUTAY
BgNVHREEETAPgg1qb3NlZnNzb24ub3JnMAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/
BAUDAwegADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgM/ADA8
AhxBvfhxPFfbBbsE1NoFmCUczOFApEuQVUw3ZP69AhwWXk3dgSUsKnuwL5g/ftAY
dEQc8B8jAcnuOrfU
-----END CERTIFICATE REQUEST-----
參考資料 : https://en.wikipedia.org/wiki/Certificate_signing_request
3.6 CRL {#certificate-revocation-list}
CRL
=Certificate Revocation List
=證書吊銷列表
。
-----BEGIN X509 CRL-----
MIIB9DCCAV8CAQEwCwYJKoZIhvcNAQEFMIIBCDEXMBUGA1UEChMOVmVyaVNpZ24s
IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsT
PXd3dy52ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9SUEEgSW5jb3JwLiBieSBSZWYu
LExJQUIuTFREKGMpOTgxHjAcBgNVBAsTFVBlcnNvbmEgTm90IFZhbGlkYXRlZDEm
MCQGA1UECxMdRGlnaXRhbCBJRCBDbGFzcyAxIC0gTmV0c2NhcGUxGDAWBgNVBAMU
D1NpbW9uIEpvc2Vmc3NvbjEiMCAGCSqGSIb3DQEJARYTc2ltb25Aam9zZWZzc29u
Lm9yZxcNMDYxMjI3MDgwMjM0WhcNMDcwMjA3MDgwMjM1WjAjMCECEC4QNwPfRoWd
elUNpllhhTgXDTA2MTIyNzA4MDIzNFowCwYJKoZIhvcNAQEFA4GBAD0zX+J2hkcc
Nbrq1Dn5IKL8nXLgPGcHv1I/le1MNo9t1ohGQxB5HnFUkRPAY82fR6Epor4aHgVy
b+5y+neKN9Kn2mPF4iiun+a4o26CjJ0pArojCL1p8T0yyi9Xxvyc/ezaZ98HiIyP
c3DGMNR+oUmSjKZ0jIhAYmeLxaPHfQwR
-----END X509 CRL-----
參考資料 : https://en.wikipedia.org/wiki/Certificate_revocation_list
3.7 X.690 {#x690}
X.690是一個ITU-T標準,規定了幾種ASN.1編碼格式:
BER
=Basic Encoding Rules
: https://en.wikipedia.org/wiki/X.690#BER_encoding
CER
=Canonical Encoding Rules
: https://en.wikipedia.org/wiki/X.690#CER_encoding
DER
=Distinguished Encoding Rules
: https://en.wikipedia.org/wiki/X.690#DER_encoding
參考資料 : https://en.wikipedia.org/wiki/X.690
3.8 ASN.1 {#abstract-syntax-notation-1}
ASN.1
=Abstract Syntax Notation 1
=抽象標記語法1
。
參考資料 : https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One
4 參考
本文首發於:https://linianhui.github.io/information-security/05-x.5