0
A
回答
0
首先,您需要指定您正在處理的證書類型。如果您正在討論CLI程序集,那麼您可能正在處理StrongName簽名,這是完全不同的野獸,旨在防止CLR全局程序集緩存中的名稱衝突。
聽起來更像是您想要讀取用於本機和CLI應用程序的Authenticode簽名。如果你想讀取證書本身,那麼你需要掌握PE/COFF規範,併爲PE(可執行文件)文件格式實現一個解析器,這是Windows NT及其衍生產品使用的格式。如果您希望能夠實際驗證驗證該證書,則需要調用WinVerifyTrust function,它將爲您執行Authenticode驗證。
當然,如果你只是想檢查您的證書驗證無需處理編寫自己的應用程序來做到這一點,你可以用鼠標右鍵單擊該文件,並選擇屬性...在Windows資源管理器,它應該告訴你該文件的簽名狀態。否則,您可以使用命令行實用程序SigCheck。
1
下面的代碼應該做你想做的。它來自安裝程序應用程序以提取自己的證書並將其安裝到本地認證存儲中。
bool driver_setup::install_embeded_cert_to_lm(const std::wstring& filepath)
{
bool rval = false;
DWORD dwEncoding = 0;
DWORD dwContentType = 0;
DWORD dwFormatType = 0;
HCERTSTORE hStore = NULL;
HCRYPTMSG hMsg = NULL;
// Get message handle and store handle from the signed file.
BOOL fResult = CryptQueryObject(CERT_QUERY_OBJECT_FILE,
filepath.c_str(),
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
CERT_QUERY_FORMAT_FLAG_BINARY,
0,
&dwEncoding,
&dwContentType,
&dwFormatType,
&hStore,
&hMsg,
NULL);
if (!fResult)
{
return false;
}
DWORD singer_info_size = 0;
// Get signer information size.
fResult = CryptMsgGetParam(hMsg, CMSG_SIGNER_INFO_PARAM, 0, NULL, &singer_info_size);
if (!fResult)
{
CryptMsgClose(hMsg);
CertCloseStore(hStore, 0);
return false;
}
// Allocate memory for signer information.
std::vector<byte> signer_info_data(singer_info_size);
PCMSG_SIGNER_INFO pSignerInfo = reinterpret_cast<PCMSG_SIGNER_INFO>(signer_info_data.data());
// Get Signer Information.
fResult = CryptMsgGetParam(hMsg, CMSG_SIGNER_INFO_PARAM, 0, (PVOID)pSignerInfo, &singer_info_size);
if(fResult)
{
CERT_INFO CertInfo = {};
CertInfo.Issuer = pSignerInfo->Issuer;
CertInfo.SerialNumber = pSignerInfo->SerialNumber;
PCCERT_CONTEXT pCertContext = CertFindCertificateInStore(hStore,dwEncoding,0,CERT_FIND_SUBJECT_CERT,(PVOID)&CertInfo,NULL);
if(pCertContext != 0)
{
// rval = add_cert_to_lm_trustedpublishers(pCertContext);
CertFreeCertificateContext(pCertContext);
}
}
CryptMsgClose(hMsg);
CertCloseStore(hStore, 0);
return rval;
}
相關問題
- 1. Docusign嵌入式簽名
- 2. 嵌入式簽名api docusign
- 3. docusign嵌入式簽名中的多重簽名者問題
- 4. 代碼簽名工作中的簽名如何?
- 5. 這段代碼如何提取簽名?
- 6. 驗證C代碼中的rpm簽名?
- 7. 數字簽名/代碼簽名問題
- 8. JNLP:在簽名代碼中加載未簽名代碼
- 9. iOS:代碼簽名無效/所需的代碼簽名缺失
- 10. 如何獲取APK簽名簽名?
- 11. c#方法簽名:如何使用教授要求的簽名創建代碼
- 12. 如何從簽名文件中獲取簽名者的名稱
- 13. Docusign API - 嵌入式簽名問題
- 14. 測試HelloSign API嵌入式簽名
- 15. Docusign嵌入式模板簽名請求
- 16. 嵌入式簽名(REST API PHP)
- 17. DocuSign嵌入式簽名工作流程
- 18. Docusign嵌入式簽名accessCode XML
- 19. HTML簽名 - 嵌入網站
- 20. 用c讀取證書籤名請求#
- 21. 。ViewFinity的Net代碼簽名
- 22. 如何讀取此OCaml類型簽名?
- 23. 如何從已簽名的.Net程序集中讀取數字簽名信息?
- 24. PGP簽名格式讀取器
- 25. 創建代碼簽名後的嵌入文件
- 26. Java,從文件中讀取簽名和未簽名
- 27. 如何將未簽名的號碼轉換爲簽名號碼?
- 28. 如何處理代碼簽名證書?
- 29. 如何禁用代碼簽名要求
- 30. 如何更新代碼簽名證書
什麼樣的數字簽名?什麼類型的文件? – 2012-08-09 17:01:33
@MatteoItalia謝謝你的回答!我修復了我的主要帖子。 – RomanKarpuk 2012-08-09 17:07:50