536 字
3 分鐘
[背景知識] 憑證的格式 PEM 與 DER | 自然人憑證開發筆記
2024-01-29
無標籤

首頁 > 系列文 > 自然人憑證開發筆記


PEM(Privacy Enhanced Mail)和 DER(Distinguished Encoding Rules)是兩種常見的二進位編碼格式,通常用於表示加密和數位簽章相關的資料,如憑證、公鑰和私鑰。


DER (Distinguished Encoding Rules):#

  • 格式: DER 是二進位編碼格式,不同於PEM,它不包含Base64編碼,而是使用二進位形式直接表示資料。
  • 副檔名: .der、.cer
  • 使用情境: DER 格式主要在二進位環境中使用,例如在ASN.1(Abstract Syntax Notation One)資料結構中傳輸資料。在網路協議和標準中,通常使用DER格式進行資料的編碼和解碼。

PEM (Privacy Enhanced Mail)#

  • 格式: PEM 是基於將 DER 內容做Base64 編碼的 ASCII 文字,並且以 -----BEGIN----------END-----標記括住。
  • 副檔名:.pem
  • 使用情境: PEM 格式廣泛用於憑證、公鑰和私鑰等資料,並且由於其易於人類閱讀的 ASCII 格式,很容易在文字檔中存儲和交換。

副檔名#

我們常看到憑證的副檔名有 .der、.pem、.crt、.cer 等等,這其中有兩種含義:

一、以檔案的格式為副檔名#

.der、.pem 如上述就是以檔案格式來分類。.der 為二進制,.pem 為 .der 的 base64 加上前後標籤。

二、以檔案的類型為副檔名#

.crt、.cer 為憑證,.key 為金鑰,.pfx 為 PKCS12,.csr 為憑證請求檔。但不代表檔案的格式為 .pem 或 .der,可能是其中之一的格式。以 Windows 系統為例,他能夠同時解析上述兩種格式的憑證 .crt。


各種 PEM#

憑證的 PEM#

-----BEGIN CERTIFICATE-----
MIIDyzCCArKgAwIBAgIJANnVbBfqVVzMMA0GCSqGSIb3DQEBCwUAMIGAMQswCQYD
VQQGEwJVUzELMAkGA1UECAwCVloxCzAJBgNVBAcMAlZaMQswCQYDVQQKDAJPTjEL
MAkGA1UECwwCUEQxDTALBgNVBAMMBHRlc3QxHjAcBgkqhkiG9w0BCQEWD2luc2lk
ZUBleGFtcGxlLmNvbTAeFw0yMjAxMjcxNjE1MTZaFw0yMjAyMTcxNjE1MTZaMIGA
...
-----END CERTIFICATE-----

公鑰的 PEM#

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1ymUuKnPRw99S1wMbEJt
nKv7lTOyYryYiXAlRjQznFYSaLVa8TACplEKEiLPO2A3aJG9tJf6ObMRiOhKnuGI
E9QJ+ByNOqJZM3mTHm/hAnX0N8d7WCozrJGyXlrb4I/JNkwTFx8DWggT+0rLPTCs
...
-----END PUBLIC KEY-----

私鑰的 PEM#

-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDXKZS4qc9HD31L
XAxsQm2cq/uVM7JivJiJcCVGNDOcVhJotVrxMAqmUQoSIs87YDdomGjbRvSX+jm
zEYjoSpe4YgT1An4HI06olkzeZMeb+ECdfQ3x3tYKjOskbJeWtvgj8k2TBMXHwNa
...
-----END PRIVATE KEY-----

PKCS7 的 PEM#

-----BEGIN PKCS7-----
MIIDrDCCApSgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBiTELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB1ZhbGlkYXRlMRAwDgYDVQQHEwdWYWxpZGF0ZTEOMAwGA1UEChMF
bXlzdGVsbDEUMBIGA1UECxMLRGV2ZWxvcG1lbnQxFzAVBgNVBAMTDnd3dy5leGFt
...
-----BEGIN PKCS7-----

PKCS12 的 PEM#

-----BEGIN PKCS12-----
MIICyDCCAbCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJVUzEL
MAkGA1UECAwCVloxCzAJBgNVBAcMAlZaMQswCQYDVQQKDAJPTjEUMBIGA1UEAwwL
dGVzdC1jcnlwdG8wHhcNMjAwNTA5MjIwMDAwWhcNMjAwNTA5MjIwMDAwWjAyMQsw
...
-----END PKCS12-----

結論#

PEM 是一種基於 Base64 的 ASCII 文字格式,而 DER 是一種二進位格式。在實際應用中,PEM 格式更易於人閱讀,而 DER 格式則更適合在二進位環境中使用。

自然人憑證讀出來的憑證、公鑰、PKCS7 都為 DER 的 Base64,等於是 PEM 去頭去尾中間那段。