Как проверить, что мой orgainization подпись доверенного Windows бинарную?
это следующий вопрос к вопрос 1072540, ' WinVerifyTrust для проверки конкретной подписи?'.
Я хочу написать функцию C++, давайте назовем ее TrustedByUs
вида:
bool TrustedByUs(std::string pathToBinary, std::string pathToPublicKey)
идея заключается в том, что мы даем этой функции путь к бинарными .dll или .exe-файл, подписанный цифровой подписью. The pathToPublicKey
string-это путь к открытому ключу нашего конкретного сертификата подписи.
использование кода в http://support.microsoft.com/kb/323809 это довольно прямо вперед, чтобы проверить, что pathToBinary
файл на самом деле доверяет операционной системе.
теперь я на том же месте, что и автор вопроса 1072540, я знаю, что ОС доверяет подписавшему этот двоичный файл, но я хочу знать, является ли ключ RSA моей организации тем, который подписал двоичный файл.
KB323809 показывает, как извлечь строки из сертификата, встроенного в наш двоичный файл. Этот пример показывает, как извлечь строки из сертификата подписи в его
1 ответов
вы хотите CMSG_SIGNER_INFO_PARAM
вместо.
вы можете использовать это, чтобы получить сертификат на сертификат в хранилище сертификатов, возвращенных CryptQueryObject
:
CryptMsgGetParam(hMsg,
CMSG_SIGNER_INFO_PARAM,
0,
NULL,
&dwSignerInfo);
PCMSG_SIGNER_INFO pSignerInfo = (PCMSG_SIGNER_INFO) malloc(dwSignerInfo);
CryptMsgGetParam(hMsg,
CMSG_SIGNER_INFO_PARAM,
0,
pSignerInfo,
&dwSignerInfo);
PCCERT_CONTEXT pCertContext = CertFindCertificateInStore(hStore,
ENCODING,
0,
CERT_FIND_SUBJECT_CERT,
(PVOID)pSignerInfo,
NULL);
// Compare with your certificate:
// - check pCertContext->pbCertEncoded (length is pCertContext->cbCertEncoded)
// *OR*
// Compare with your public-key:
// - check pCertContext->pCertInfo->SubjectPublicKeyInfo.Algorithm and
// pCertContext->pCertInfo->SubjectPublicKeyInfo.PublicKey