[資訊安全] 05 X.509 公鑰證書的格式標準

  • 2020 年 2 月 24 日
  • 筆記

X.509# 公鑰證書的格式標準, 廣泛用於TLS/SSL安全通訊或者其他需要認證的環境中。X.509證書可以由# CA頒發,也可以自簽名產生。

1 Overview {#1-overview}

X.509證書中主要含有公鑰身份資訊簽名資訊有效性資訊等資訊。這些資訊用於構建一個驗證公鑰的體系,用來保證客戶端得到的公鑰正是它期望的公鑰。

  1. 公鑰 : 非對稱密碼中的公鑰。公鑰證書的目的就是為了在互聯網上分發公鑰。
  2. 身份資訊 : 公鑰對應的私鑰持有者的資訊,域名以及用途等。
  3. 簽名資訊 : 對公鑰進行簽名的資訊,提供公鑰的驗證鏈。可以是CA的簽名或者是自簽名,不同之處在於CA證書的根證書大都內置於作業系統或者瀏覽器中,而自簽名證書的公鑰驗證鏈則需要自己維護(手動導入到作業系統中或者再驗證流程中單獨提供自簽名的根證書)。
  4. 有效性資訊:證書的有效時間區間,以及# CRL等相關資訊。

X.509證書的標準規範RFC5280中詳細描述了證書的# 1.1 Encoding Format# 1.2 Structure

1.1 Encoding Format {#1-1-encoding-format}

  1. # DER格式 : 二進位格式。
  2. # 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證書。也可能只是保存了私鑰的文件。

  1. .pem : PEM格式。
  2. .key : PEM格式的私鑰文件。
  3. .pub : PEM格式的公鑰文件。
  4. .crt : PEM格式的# 公鑰證書文件,也可能是DER。
  5. .cer : DER格式的# 公鑰證書文件,也可能是PEM。
  6. .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 1label 2可以有1~N個。常用的label有(https://tools.ietf.org/html/rfc7468#section-4):

  1. CERTIFICATE : 公鑰證書文件 。
  2. CERTIFICATE REQUEST : CSR請求證書文件。
  3. PRIVATE KEY : 私鑰文件。
  4. PUBLIC KEY : 公鑰文件。
  5. X509 CRL : X509證書吊銷列表文件。

下面的文件是上面的google.com.der.cer的PEM編碼形式 : {{}}

參考資料 :

  1. https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail
  2. 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.509/