| ||||
| ||||
Имеется сообщение, подписанное под Windows средствами CAPICOM. Сертификат подписчика содержится в сообщении. При проверке этого сообщения под Linux выдается ошибка: /usr/CPROcsp/bin/cryptcp -verify out.p7b CryptCP 3.00 (c) "Crypto-Pro", 2002-2003. Command prompt Utility for data protection. -verify - Verifies signatures of a message. Can’t open certificate store: ’My’. Can’t open certificate store: ’Addressbook’. Error: No certificates found. (0x2000012D) Signer’s certificate not found. [ErrorCode: 0x200001f9] Сертификат подписчика на Linux машину не установлен. При проверке сообщения под Windows, и после установки сертификата на Linux, все работает. В чем может быть проблема? | ||||
Ответы: | ||||
| ||||
Не могли бы вы описать проблему по подробней. Из под какого пользователя запускпется проверка? Что за линукс(+ uname -a заодно)Что означает фраза " При проверке сообщения под Windows, и после установки сертификата на Linux, все работает" Тоесть вы проверили под виндой а потом под линуксом и все сработало? | ||||
| ||||
В догонку а CAPICOM использовались юникодные функции? | ||||
| ||||
Linux *** 2.4.20-13.9smp #1 SMP Mon May 12 10:48:05 EDT 2003 i686 i686 i386 GNU/Linux (Redhat 9.0 "из коробки"), проверка делается под обычным пользователем, не root. Сообщение подписывается примером из CAPICOM-а (CAPICOM\samples\html\SignedData.htm) на Windows-машине. Проверка подписи на Windows-машине (там же, где и подписывалось) проходит успешно (csptest2_0.exe -sfsign -verify -in out.p7b), на Linux - только после инсталляции сертификата подписчика в хранилище пользователя, под которым запускается проверка (/usr/CPROcsp/bin/cryptcp -verify out.p7b), причем утилитой csptestf из пакета cpcsp-capilite-3.0.4-9 подпись все равно не проверяется, даже после инсталляции сертификата: $ /usr/CPROcsp/bin/csptestf -cmssfsign -in out.p7b -verify CSP (Type:71) v3.0.3290 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED. CSP (Type:75) v3.0.3290 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED. An error occurred in running the program. ../../../../mybuild/CSP/samples/csptest/cmssf.c:410:No user cert specified. Cryptocontext will be opened automaticaly. Error number 0 (0). An error occurred in running the program. ../../../../mybuild/CSP/samples/csptest/cmssf.c:490:Signature was NOT verified. Error number 7777777 (125269879). Total: [ErrorCode: 0x07777777] $ /usr/CPROcsp/bin/csptestf -cmslowsign -in out.p7b -verify CSP (Type:71) v3.0.3290 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED. CSP (Type:75) v3.0.3290 KC1 Release OS:Linux CPU:IA32 FastCode:READY,ENABLED. An error occurred in running the program. ../../../../mybuild/CSP/samples/csptest/cmslow.c:447:No user cert specified. Cryptocontext will be opened automaticaly. Error number 0 (0). The message to decode is open. The encoded blob has been added to the message. The message parameter (CMSG_CONTENT_PARAM) has been acquired. Message size: 12 The message param (CMSG_CONTENT_PARAM) updated. Length is 12. Try to get user cert. OK. Length 338. The signer info has been returned. Segmentation fault | ||||
| ||||
По первому (про cryptcp) - при проверке подписи надо указать, где искать сертификат (по умолчанию - это хранилища My и AddressBook). Если сертификата там нет, подпись не проверится. Если не хотите ставить туда сертификат (когда он есть в сообщении) - нужно указать опцию -f имя_файла, т.е., в Вашем случае, когда сертификат в том же файле cryptcp -verify out.p7b -f out.p7b | ||||
| ||||
$ /usr/CPROcsp/bin/cryptcp -verify out.p7b -f out.p7b CryptCP 3.00 (c) "Crypto-Pro", 2002-2003. Command prompt Utility for data protection. -verify - Verifies signatures of a message. Can’t open certificate store: ’out.p7b’. Error: No certificates found. (0x2000012D) Signer’s certificate not found. [ErrorCode: 0x200001f9] | ||||
| ||||
Дополнение к предыдущему посту: как выяснилось, ключ -f почему-то использует лишь первый символ имени файла, это видно из strace: 21260 open("o", O_RDONLY) = -1 ENOENT (No such file or directory) 21260 time([1130229964]) = 1130229964 21260 getpid() = 21260 21260 rt_sigaction(SIGPIPE, {0x420db0d0, [], SA_RESTORER, 0x420276f8}, {SIG_DFL}, 8) = 0 21260 send(4, "<38>Oct 25 12:46:04 cpcsp[21260]"..., 92, 0) = 92 21260 rt_sigaction(SIGPIPE, {SIG_DFL}, NULL, 8) = 0 21260 write(1, "Can\’t open certificate store: \’o"..., 41) = 41 21260 write(1, "Error: No certificates found. (0"..., 43) = 43 (выполнялась команда /usr/CPROcsp/bin/cryptcp -verify out.p7b -f out.p7b) Т.е. если сделать линк out.p7b -> o и выполнить команду /usr/CPROcsp/bin/cryptcp -verify out.p7b -f o - результат будет следующим: CryptCP 3.00 (c) "Crypto-Pro", 2002-2003. Command prompt Utility for data protection. -verify - Verifies signatures of a message. Error: No certificates found. (0x2000012D) Signer’s certificate not found. [ErrorCode: 0x200001f9] Т.е. на невозможность открытия хранилища уже не ругается, но сертификат из сообщения все равно не читает. Если же в качестве "о" подсунуть сертификат подписчика в .der кодировке, то все проверяется. | ||||
| ||||
Говорят от в bash от этого спасают одинарные кавычки. | ||||
| ||||
"от этого" - это от чего? | ||||
| ||||
Аналогичная проблема: Был подписан документ с отсоединенной подписью при помощи CryptoPro CSP 2.0 для Windows. При проверке подписи на Linux выдает ошибку, что не может открыть файл сертификата. Как и было указано выше, открывает сертификат, если указать файл сертификата в der кодировке, однако, не может связать его с подписанным документом. | ||||
| ||||
использование кавычек (как одинарных, так и двойных) - не помогает | ||||