PKCS#7 消息內容
我正在使用一個供應商庫來簽署產生 PKCS#7 消息的文本。我不確定這條消息的內容。
pkcs#7 消息是否必須包含簽名消息、證書、有效負載?它必須以 開頭
----BEGIN PKCS7----
和結尾----END PKCS7----
嗎?
首先,PKCS#7——幾乎總是被認為包括其後繼CMS,就像“SSL”通常意味著 TLS——支持多種加密功能;您似乎只詢問有關簽名的問題,因此我將忽略其他部分。如果您想要更多,請閱讀 RFC 和/或添加到您的問題中。
PKCS#7/CMS 有兩種用於簽名數據的選項,一種是數據包含在 SignedData 消息中,通常稱為嵌入,另一種是數據不在消息中但必須可供接收者使用,通常稱為單獨的、外部的,或分離。
包括 SignedData(但不一定是外部數據)的 PKCS#7/CMS 消息首先以 ASN.1 BER 或 DER 編碼,然後可以使用
BEGIN,END PKCS7|CMS
base64 編碼周圍的虛線以二進製或 PEM 格式傳輸和/或儲存。(CMS 消息也可用於格式稍有不同的 S/MIME 消息,但這些消息通常稱為 S/MIME 而不是 PKCS#7 或 CMS。特別是,“clearsigned” S/MIME 消息包含分離的編碼簽名加上作為一封電子郵件的一部分的數據的更易讀的直接編碼。)PKCS#7/CMS SignedData 可以攜帶一個或多個簽名,但更多的是罕見的;它可以攜帶簽名者認為接收者將或可能需要驗證簽名的證書和/或 CRL,但如果發送者知道或相信接收者擁有或可能需要驗證簽名,則不需要這樣做可以通過其他方式獲取證書和吊銷資訊。
事實上,PKCS#7/CMS SignedData 可以在沒有簽名和沒有數據的情況下使用,僅用於攜帶一些相關的證書(可能還有 CRL);這通常表示為“p7b”或“p7c”格式。這不適用於您的情況,但可能會與之混淆。
您可以通過解析來確定給定消息中存在哪些元素;如果特別是,如果您擁有或獲得 OpenSSL
openssl asn1parse
將預設解碼 PEM 文件(忽略 BEGIN、END 行中聲明的類型,甚至可以省略)或-inform der
二進制 DER 文件。