CMS_verify не может проверить сообщения, созданные с помощью CMS_sign

Я застрял на действительно странной проблеме, возникающей в CMS_verify () в OpenSSL. Я разрабатываю метод для подписи и проверки данных в C ++ с помощью OpenSSL, но проверка выдает очень странную ошибку, как видно из следующей заглушки кода:

  // Sign
BIO_puts(in, "My test string.");

cms = CMS_sign(serverCert, privateKey, recips, in, CMS_BINARY);
if (!cms) {
cout << ERR_error_string(ERR_get_error(), NULL) << endl;
} else {
cout << "Successfully signed!" << endl;
}

// Verify
if (!CMS_verify(cms, certs, st, NULL, out, 0)) {
cout << ERR_error_string(ERR_get_error(), NULL) << endl;
} else {
cout << "Successfully verified!" << endl;
}

size = BIO_get_mem_data(out, &outString);
cout << "Verified string: " << string(outString, size) << endl;

BIO_ctrl(out, BIO_CTRL_RESET, 0, NULL);

// Verify without certificate verification
if (!CMS_verify(cms, certs, st, NULL, out, CMS_NO_SIGNER_CERT_VERIFY)) {
cout << ERR_error_string(ERR_get_error(), NULL) << endl;
} else {
cout << "Successfully verified!" << endl;
}

signers = CMS_get0_signers(cms);
for (int i = 0; i < sk_X509_num(signers); i++) {
X509_STORE_CTX_init(storeCtx, st, sk_X509_value(signers, i), NULL);
if (!X509_verify_cert(storeCtx)) {
cout << X509_verify_cert_error_string(storeCtx->error) << endl;
} else {
cout << "Signer certificate has been verified." << endl;
}
}

size = BIO_get_mem_data(out, &outString);
cout << "Verified string: " << string(outString, size) << endl;

Соответствующий вывод:

Successfully signed!
error:2E099064:CMS routines:CMS_SIGNERINFO_VERIFY_CERT:certificate verify error
Verified string:
Successfully verified!
Signer certificate has been verified.
Verified string: My test string.

Таким образом, как можно видеть, сертификаты, которые я использую, являются действительными, но каким-то образом метод CMS_Verify () не может проверить конвертированные сертификаты в моей структуре CMS.

Кажется, мой обходной путь работает, но мне действительно интересно узнать, что я делаю неправильно.

Так может кто-нибудь, пожалуйста, помогите мне?

3

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]