SSL Certificate實際上就是X.509 Certificate。X.509是一個定義了certificate結構的標准。它在SSL certificate中定義了一個數據域。X.509使用名為 Abstract Syntax Notation One (ASN.1)的通用語言來描述certificate的數據結構。
X.509 certificate 有幾種不同的格式,例如 PEM,DER,PKCS#7 和 PKCS#12。 PEM和PKCS#7格式使用Base64 ASCII編碼,而DER和PKCS#12使用二進制編碼。certificate文件基於不同的編碼格式有不同的文件擴展名。
如下圖就展示了X.509證書的編碼方式和文件擴展名。
PEM 格式(Privacy-Enhanced Mail)
大多數 CA (Certificate Authority) 提供了Base64 ASCII編碼的PEM格式的certificate文件。這些證書文件的后綴可以是 .pem, .crt, .cer, .key。 以.pem結尾的文件可以將服務端證書(server certificate),中間證書(intermediate certificate)和私鑰(private key)包含在一個文件中。服務端證書和中間證書也可以分別存放在.crt 和 .cer兩個文件中。私鑰可以單獨在一個 .key文件中。
PEM文件使用ASCII編碼,所以你可以用文本編輯器打開它,例如notepad,微軟的word等等。每一個PEM文件中的證書都在"---- BEGIN CERTIFICATE---- " 和 "----END CERTIFICATE----"語句之間。私鑰包括在"---- BEGIN RSA PRIVATE KEY-----" 和 "-----END RSA PRIVATE KEY-----"語句之間。而CSR則包含在"-----BEGIN CERTIFICATE REQUEST----- " 和 "-----END CERTIFICATE REQUEST-----"語句之間。
CER或CRT格式證書轉換為PEM格式:
對於CER或CRT格式的證書,您可通過直接修改證書文件擴展名的方式,將其轉換成PEM格式。例如,將server.crt證書文件重命名為server.pem即可。
PKCS#7 格式
PKCS#7格式是一種加密消息語法標准。PKCS#7證書使用Base64 ASCII編碼和文件擴展名 .p7b 或 .p7c 。只有證書可以存儲在這種格式的文件中,私鑰則不可以。P7B證書包含在"-----BEGIN PKCS7-----" 和 "-----END PKCS7-----" 語句之間。
DER 格式(Distinguished Encoding Rules)
DER格式的證書是二進制形式,存儲在以 .der 和 .cer 為擴展名的文件中。這些證書大部分使用在基於java的web服務器上。
PKCS#12 格式
PKCS#12格式的證書也是二進制形式,存儲在以 .pfx 或 .p12為擴展名的文件中。
PKCS#12文件可以存儲服務端證書,中間證書和私鑰在一個 .pfx文件中,並且使用密碼保護。 這類證書主要使用在Windows平台。
將PFX文件轉換為PEM格式時,OpenSSL會將所有證書和私鑰放入一個文件中。您需要在文本編輯器中打開該文件,並將每個證書和私鑰(包括BEGIN / END語句)復制到其各自的文本文件中,並將它們分別保存為certificate.cer,CACert.cer和privateKey.key。
總結
DER 實際上就是密鑰的最原始的二進制格式;而 PEM 是對 DER 的 Base64 的編碼,PEM 解碼后得到的就是 DER 編碼格式。
只要是文本格式的文件,用文本編輯器打開后查看關鍵語句即可。
CSR (certificate signing request )
PKCS (Public Key Cryptography Standards)