CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST ) returns NULL

Пытаюсь добавить подпись в уже сформированное signed data CMS, используя функцию OpenSSL

CMS_add1_signer()

Функция возвращает ноль. Что не так у меня? Прикрепляю код и данные cms, которые пытаюсь подписать.

inBio = BIO_new_file("cms_signed.pem", "r");
CHECK("  BIO_new_file", inBio != NULL, free_certCA);

cms = PEM_read_bio_CMS(inBio, NULL, NULL, NULL);
CHECK("  PEM_read_bio_CMS", cms != NULL, free_certCA);


key = getHardwareKeyPair();
CHECK("  get_key_pair", key != NULL, unregister_engine);

BIO_free_all(inBio);


inBio = BIO_new_file("certificate.cer", "r");
CHECK("  BIO_new_file", inBio != NULL, free_cms);


cert = PEM_read_bio_X509(inBio, NULL, NULL, NULL);
CHECK("  PEM_read_bio_X509", cert != NULL, free_in_bio);


CMS_SignerInfo* res = CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST); //returns NULL

CMS:

-----BEGIN CMS-----
MIIEHAYJKoZIhvcNAQcCoIIEDTCCBAkCAQExDjAMBggqhQMHAQECAgUAMDIGCSqG
SIb3DQEHAaAlBCMxIDIgMyA0IDUgCk9ORSBUV08gVEhSRUUgRk9VUiBGSVZFCqCC
AmAwggJcMIIByKADAgECAgkAx8bflzOws5gwCgYIKoUDBwEBAwMwejEPMA0GA1UE
CAwGTW9zY293MQ8wDQYDVQQHDAZNb3Njb3cxFjAUBgNVBAoMDUFPIEFrdGl2LVNv
ZnQxEDAOBgNVBAsMB1J1dG9rZW4xLDAqBgNVBAMMI1J1dG9rZW4gVEVTVCBDQSAo
UCkgR09TVCBSIDIwMTItNTEyMB4XDTE5MTEwODA4MTMyM1oXDTIwMTEwODA4MTMy
M1owOjEUMBIGA1UEAwwLU3VwZXJLZXkyNTYxCzAJBgNVBAYTAlJVMRUwEwYDVQQI
DAzQnNC+0YHQutCy0LAwZjAfBggqhQMHAQEBATATBgcqhQMCAiMBBggqhQMHAQEC
AgNDAARALqfEeFXve4ovRzfK4Ua48XGmHb1nqQBZgkMEMRhl8/CvtZQYKyq4z2yM
xU19787HAlrMDvIsmhgz5tcVwDgI4qNqMGgwCwYDVR0PBAQDAgbAMBMGA1UdJQQM
MAoGCCsGAQUFBwMEMBMGA1UdIAQMMAowCAYGKoUDZHEBMC8GBSqFA2RvBCYMJNCh
0JrQl9CYICLQoNGD0YLQvtC60LXQvSDQrdCm0J8gMi4wIjAKBggqhQMHAQEDAwOB
gQDjy58Yw32abSpva3wE1na98YILcFDIY5Uk/R67nfCvj2YWuwtgtnj3/vbbAyrn
Vfl28RyeLKsf1Za2/AifuvAJEuxNQQ2laHppOdiBw1WBF5QsqwAduDwLRxQqGz9r
aQFOoOLb7kfeBGV8BUHNtZKV2Zad1kjnLTtriTud7SCNGzGCAVowggFWAgEBMIGH
MHoxDzANBgNVBAgMBk1vc2NvdzEPMA0GA1UEBwwGTW9zY293MRYwFAYDVQQKDA1B
TyBBa3Rpdi1Tb2Z0MRAwDgYDVQQLDAdSdXRva2VuMSwwKgYDVQQDDCNSdXRva2Vu
IFRFU1QgQ0EgKFApIEdPU1QgUiAyMDEyLTUxMgIJAMfG35czsLOYMAwGCCqFAwcB
AQICBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP
Fw0xOTEyMjAwODIxNTdaMC8GCSqGSIb3DQEJBDEiBCCk3GxetSDHPyAXu+rR6sEj
UZAmQ0CXl7VyBLTC2Tr50DAMBggqhQMHAQEBAQUABEBlmH9spECFTkMHCBbIeYww
6ww7IMrrqhTtB3DM8OZv2r6n58WbafYkYGr/83PMJCJjqa2hFw8E50W98JZ+tnwT
-----END CMS-----

Re: CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST ) returns NULL

Приветствую!

Заданный вами вопрос требует консультации с нашими разработчиками.
В связи с высокой загруженностью наших специалистов, оперативно ответить сейчас не получится.
Благодарим за понимание.

Re: CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST ) returns NULL

По вопросам, связанным с использованием openssl, в качестве альтернативы нашему форуму, советуем обращаться в сообщество разработчиков https://mta.openssl.org/mailman/listinfo/openssl-users

Re: CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST ) returns NULL

Binger, добрый день!

Приведенный вами код работает корректно. Возможно, сертификат и ключ, используемые для подписи не соответствуют друг другу. Убедиться в том, что сертификат и ключ соответствуют друг другу можно посредством вызова X509_check_private_key(cert, key).

Если вы планируете продолжать разработку с использованием openssl, настоятельно советую собрать отладочную версию openssl -- это наилучшим образом позволит вам определить, почему какая-то функция openssl работает не так, как ожидается. О том, как собирать openssl, можно узнать по следующим ссылкам:
https://wiki.openssl.org/index.php/Comp … stallation
https://github.com/openssl/openssl/blob/master/INSTALL
https://github.com/openssl/openssl/blob … /NOTES.WIN

Кроме того, не затруднит вас описать, для решения каких задач вы используете или собираетесь использовать токены? Возможно, консультация с нашей стороны позволит вам выбрать более высокоуровневые интерфейсы, в большей степени подходящие для ваших задач, нежели openssl и pkcs#11. В отдельных случаях в высокоуровневые интерфейсы могут быть добавлены функции, облегчающие внедрение со стороны заказчика.
Пожалуйста, пришлите ваш ответ по адресу hotline@rutoken.ru, если предпочитаете не распространяться о проекте публично.

Re: CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST ) returns NULL

Евгений Мироненко, здравствуйте. X509_check_private_key возвращает 1 - ключ соответствует, однако CMS_add1_signer(cms, cert, key, NULL, CMS_REUSE_DIGEST) всё равно возвращает null. Сейчас тогда соберу отладочную версию, как вы посоветовали.
Евгений, к сожалению, я не могу разглашать детали моей работы, но я не нуждаюсь в высокоуровневых интерфейсах, наоборот, мне нужен низкий уровень. Спасибо вам за помощь.