如何使用OpenSSL從SMIME消息(pkcs7簽名)中提取公共證書?使用OpenSSL從SMIME消息(pkcs7簽名)中提取公共證書
18
A
回答
24
用命令行工具,假設S/MIME消息本身是在文件message
:
openssl smime -verify -in message -noverify -signer cert.pem -out textdata
此寫入簽名人證書(如嵌入在簽名BLOB)成cert.pem
,並且消息文本數據在textdata
文件中。
或者,您可以將簽名blob另存爲一個獨立的文件(它只是一種附件,所以任何郵件程序或庫應該都可以這樣做)然後,假設該blob位於一個名爲smime.p7s
,使用方法:
openssl pkcs7 -in smime.p7s -inform DER -print_certs
這將打印出被嵌入的PKCS#所有證書7簽名注意,可以有幾個:簽名者的自身證書,以及任何額外的證書籤名者找到適合包括(例如,可以幫助驗證其證書的中間CA證書)。
10
O [R剛:
cat message.eml | openssl smime -pk7out | openssl pkcs7 -print_certs > senders-cert.pem
+1
我正在尋找一種獲取證書信息而不創建文件(只是管道和過濾器)的方式,就是這樣。由於我對證書本身不感興趣,因此我使用最後一個命令`openssl pkcs7 -print_certs -noout` – Liam 2013-11-15 18:49:12
1
如果你正在編寫C/C++,這個代碼片段將有助於
//...assuming you have valid pkcs7, st1, m_store etc......
verifyResult = PKCS7_verify(pkcs7, st1, m_store, content, out, flags);
if(verifyResult != 1) {
goto exit_free;
}
//Obtain the signers of this message. Certificates from st1 as well as any found included
//in the message will be returned.
signers = PKCS7_get0_signers(pkcs7, st1, flags);
if (!save_certs(env, signerFilePath, signers)) {
//Error log
}
//This method will write the signer certificates into a file provided
int save_certs(JNIEnv *env, jstring signerFilePath, STACK_OF(X509) *signers)
{
int result = 0;
int i;
BIO *tmp;
int num_certificates = 0;
if (signerFilePath == NULL) {
return 0;
}
const char *signerfile = (const char *)env->GetStringUTFChars(signerFilePath, 0);
tmp = BIO_new_file(signerfile, "w");
if (!tmp) {
//error. return
}
num_certificates = sk_X509_num(signers);
for(i = 0; i < num_certificates; i++) {
PEM_write_bio_X509(tmp, sk_X509_value(signers, i));
}
result = 1;
exit_free:
BIO_free(tmp);
if (signerfile) {
env->ReleaseStringUTFChars(signerFilePath, signerfile);
signerfile = 0;
}
return result;
}
相關問題
- 1. openssl smime消息簽署
- 2. 使用Perl和OpenSSL驗證SMIME簽名
- 3. 從證書中提取公共證書
- 4. pkcs7-簽名消息
- 5. 可以使用sha256證書openssl smime -verify
- 6. OpenSSL smime驗證失敗,正確的證書和簽名
- 7. OpenSAML C++簽名驗證:從證書中讀取公共密鑰
- 8. 提取從PKCS7簽名數據結構簽名的證書與m2crypto
- 9. IdentityServer4簽名證書:使用公共可用的證書+密鑰?
- 10. 使用openssl從pkcs12證書中提取信息
- 11. 消息使用X509證書籤名
- 12. 在PHP中籤名公共x509證書
- 13. 如何找出哪個證書用於簽署PKCS7消息?
- 14. 如何從PKCS7.p7b證書文件中讀取證書文件usind openssl?
- 15. 從自簽名證書生成X.509 SubjectPublicKeyInfo/OpenSSL PEM公鑰
- 16. BouncyCastle或OpenSSL僅用公鑰生成證書籤名請求(CSR)
- 17. OpenSSL中自簽名證書的含義
- 18. 使用JavaScript/OpenSSL提取SSL證書的詳細信息
- 19. 以編程方式使用openssl提取pem證書信息
- 20. 如何在C++中使用openssl庫驗證自簽名證書?
- 21. Howto驗證SMIME多部分/簽名應用程序簽名/ x-pkcs7簽名郵件
- 22. 使用OpenSSL或PHP驗證簽名的SAP Content Server消息
- 23. 如何從pkcs7文件獲取證書
- 24. 未能使用OpenSSL解密AES加密的SMIME消息
- 25. 與M2Crypto驗證簽名消息的自簽名證書
- 26. 確定從代碼簽名證書共享公鑰?
- 27. 使用openssl從tls證書有效獲取常用名字
- 28. OpenSSL忽略自簽名證書錯誤
- 29. 使用openSSL驗證我的自簽名證書
- 30. 使用OpenSSL從PFX文件_without_提取證書
我如何驗證和提取數據從巨大的PKCS7燒焦信封?在openssl中有沒有任何選項,以便它可以處理塊而不是加載整個文件? – Ashish 2011-06-28 19:46:13