OpenSSL中雖然使用PEM作為基本的檔案編碼格式,但是,由于不同的對象其封裝和标準格式不太一樣,是以經常會導緻讀者産生迷惑。
一、資料編碼格式
資訊轉換為ASCII碼或其他編碼方式,比如采用DER編碼。
使用對稱加密算法加密經過編碼的資訊。
使用BASE64對加密碼後的資訊進行編碼。
使用一些頭定義對資訊進行封裝,主要包含了進行正确解碼需要的資訊,頭定義的格式形式如下:
Proc-Type:4,ENCRYPTED
DEK-Info:cipher-name,ivec
其中,第一個頭資訊标注了該檔案是否進行了加密,該頭資訊可能的值包括ENCRYPTED(資訊已經加密和簽名),MIC-ONLY(資訊經過資料簽名但沒有加密),MIC-CLEAR(資訊經過數字簽名但是沒有加密,也沒有進行編碼,可使用非PEM格式閱讀),以及CLEAR;第二個頭資訊标注了加密的算法及對稱加密塊算法使用的初始向量。
在這些資訊的前面加上如下形式頭标注資訊:
---BEGIN PRIVACY-ENHANCED MESSAGE---
在這些資訊的後面加上如下形尾标注資訊:
---END PRIVACY-ENHANCED MESSAGE---
OpenSSL的PEM編碼基本上是基于DER編碼之上的,也就是說,它在上述第一步采用的是DER編碼,是以,從本質上來說,OpenSSL的PEM編碼就是在DER編碼基礎上進行BASE64編碼,然後添加一些頭尾資訊組成的。
二、證書标準
三、證書封裝
四、密鑰編碼
---BEGIN RSA PRIVATE KEY---
DEK-Info:DES-ED3-CBC,86B0167E005535D2
……(加密内容密鑰部分)……
---END RSA PRIVATE KEY---
以上的PEM編碼的是RSA(RSA PRIVATE KEY)私鑰,該密鑰經過了加密(ENCRYPTED),使用的是3DES的CBC方式(DES-EDE3-CBC),使用的IV向量是“86B0167E005535D2”。
五、其他标準
本文轉自 Tenderrain 51CTO部落格,原文連結:http://blog.51cto.com/tenderrain/2047788