Статус: Новичок
Группы: Участники
Зарегистрирован: 10.07.2014(UTC) Сообщений: 3 
|
этот код нормально проверяет исходя из набора установленных корневых сертификатов УЦ: Код:
$filePath = '/tmp/' . $filename;
file_put_contents($filePath,$signedData);
exec('/opt/cprocsp/bin/amd64/cryptcp -verify ' . $filePath . ' -f ' . $filePath,$output,$result);
$resultStr = trim(array_pop($output));
if ($result === 0) {
if ($resultStr == '[ReturnCode: 0]') {
return true;
}
}
$resultStr = $this->buildErrorResultString($resultStr,$output);
Этот код возвращает Invalid Signature. (0x80090006): Код:
$filePath = '/tmp/' . $filename;
file_put_contents($filePath,$signedData);
$sd = new \CPSignedData();
$check = $sd->Verify(trim(file_get_contents($filePath)),1, VERIFY_SIGNATURE_AND_CERTIFICATE);
Отредактировано пользователем 24 июля 2018 г. 17:29:45(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Давайте все таки по порядку разбираться. 1. echo "..." > file вам добавить перевод строки в файл. При подписи на странице перевода строки нет. Если хочется записать строку в файл без перевода строки то нужен флаг -n. 2. У функции Verify второй и третий параметры это вид подписи "присоединенная или отделенная" третий параметр это флаги проверки. Вы же пытаетесь передать $check = $sd->Verify($sgn, CADES_BES,1); CADES_BES это тип подписи который описан в стандарте на CMS Advanced Electronic Signature. Подписи такого типа могут быть как "присоединенные" так и "отделенные"(detached) В третий параметр задаете 1 - что вы хотите этим передать?
Как только вы систематически исправите эти ошибки у вас и совпадут подписи. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2018(UTC) Сообщений: 27  Сказал(а) «Спасибо»: 1 раз
|
я изменил php код, см сообщение выше. Код:->| echo -n 'Hello World' > test.txt
->| /opt/cprocsp/bin/amd64/cryptcp -nochain -vsignf -mroot test.txt
CryptCP 4.0 (c) "Crypto-Pro", 2002-2017.
Command prompt Utility for file signature and encryption.
Certificates found: 2
Folder './':
test.txt... Signature verifying...
Signer: RU, tests, etst, test, test, Максим, m****om
Skipping the signature due to signer certificate is not in certificate criterion.
Error: Signature.
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/DSign.cpp:851: 0x200001F9
[ErrorCode: 0x200001f9]
->| /opt/cprocsp/bin/amd64/cryptcp -nochain -vsignf -mroot test.txt -f test.txt.sgn
CryptCP 4.0 (c) "Crypto-Pro", 2002-2017.
Command prompt Utility for file signature and encryption.
Certificates found: 4
Folder './':
test.txt... Signature verifying...
Signer: RU, tests, etst, test, test, Максим, m****m
Error: ������������ �������./dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/DSign.cpp:743: 0x80090006
Error: Signature.
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/DSign.cpp:851: 0x200001F9
[ErrorCode: 0x200001f9]
Далее. Для чистоты эксперимента я сделал новый файл. Закодировал его консольной утилитой и браузером. Подписи получились разные... Консольная валидируется. Браузерная нет. Вот этот  test.doc (9kb) загружен 3 раз(а).В консоли у меня получилось: Код:$ /opt/cprocsp/bin/amd64/cryptcp -signf -cadesbes -dn mbarulin test.doc
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2017.
Утилита командной строки для подписи и шифрования файлов.
Будет использован следующий сертификат:
Субъект:RU, tests, etst, test, test, Максим, mba***om
Действителен с 02.07.2018 12:03:07 по 02.10.2018 12:13:07
Цепочки сертификатов проверены.
Папка './':
test.doc... Подпись данных...
Подписанное сообщение успешно создано.
[ErrorCode: 0x00000000]
$ cat test.doc.sgn
MIAGCSqGSIb3DQEHAqCAMIACAQExDjAMBggqhQMHAQECAwUAMIAGCSqGSIb3DQEH
AQAAMYIC1jCCAtICAQEwgZYwfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlw
dG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoT
DkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy
IDICExIAKlqpr4vojNbqU+EAAAAqWqkwDAYIKoUDBwEBAgMFAKCCAZMwGAYJKoZI
hvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTgwNzI0MDkxMTU1
WjBPBgkqhkiG9w0BCQQxQgRAS5IjxrM256pB9O4Ii4O1oVu1TqYx/IMJ1Gmi7X02
xnDTZCSy6aqHxlerPSztzwT3MlBOyrIKXr7UDAz/wXqRXDCCAQYGCyqGSIb3DQEJ
EAIvMYH2MIHzMIHwMIHtMAoGCCqFAwcBAQIDBEA9F+E1p8IpH7R+9GO5W77HO+Rq
c34LMR3weULnzP3kz8/asAuwCTUv/eBMLeAIdMN809g7BYVXGYU7pL1cE1cBMIGc
MIGEpIGBMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRvcHJvLnJ1MQsw
CQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5DUllQVE8tUFJP
IExMQzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAyAhMSACpaqa+L
6IzW6lPhAAAAKlqpMAwGCCqFAwcBAQECBQAEgYBPgWJ0vwdtzpJk5G72Y6A0ydH0
Ze5qcRFrECGib3g2BkJQxTZy2FzZEa5K+iIO8HVMV0ZZRwLImin6PQ+TfX9KuiGN
QPOofEsv0ty2r7RjoXhPptZbofJmgXsx40uv+77UPIrhBLUVNkl0TOiQy7EQu/vH
czAkf9k7ML9Kk39mSQAAAAAAAA==
Из браузера ( функция) Код:MIIG1AYJKoZIhvcNAQcCoIIGxTCCBsECAQExDjAMBggqhQMHAQECAwUAMAsGCSqGSIb3DQEHAaCC
A8MwggO/MIIDbqADAgECAhMSACpaqa+L6IzW6lPhAAAAKlqpMAgGBiqFAwICAzB/MSMwIQYJKoZI
hvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2Nv
dzEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdCBDZW50
ZXIgMjAeFw0xODA3MDIxMjAzMDdaFw0xODEwMDIxMjEzMDdaMIGEMSEwHwYJKoZIhvcNAQkBFhJt
YmFydWxpbkBnbWFpbC5jb20xFTATBgNVBAMMDNCc0LDQutGB0LjQvDENMAsGA1UECwwEdGVzdDEN
MAsGA1UECgwEdGVzdDENMAsGA1UEBwwEZXRzdDEOMAwGA1UECAwFdGVzdHMxCzAJBgNVBAYTAlJV
MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYIKoUDBwEBAgMDgYQABIGAUoaCGDeXEjRGy8Y/
nIMB4C6gHA838lcNAwrAxwMTZ3aKvomnP303158hIRkzHZm2XaMDVWLyvCEG154wCYFd69BmmGOx
vF52ZajTMZR8JAg0+I60J2dQT3G4iP2W4GBy94G/JqP4BrDj4AR+Xax/yAIxfzQdnE75z//n07PH
OiujggFxMIIBbTAPBgNVHQ8BAf8EBQMDB/AAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1UdDgQW
BBQFlEGCWyJA+50UozxbgMajAv4ITTAfBgNVHSMEGDAWgBQVMXywjRreZtcVnElSlxckuQF6gzBZ
BgNVHR8EUjBQME6gTKBKhkhodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL0NS
WVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMi5jcmwwgakGCCsGAQUFBwEBBIGcMIGZMGEGCCsG
AQUFBzAChlVodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3QtY2EtMjAx
NF9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIuY3J0MDQGCCsGAQUFBzABhihodHRwOi8v
dGVzdGNhLmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBABI3DQccvXtEbfcO
zhD3MMzvBKUvCsB0P92TFOTx0K9KAlvei/chybjRi2jrC0PHlGqqWsS4/SZ5yCw5wUpmLjkxggLW
MIIC0gIBATCBljB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkGA1UE
BhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMT
GENSWVBUTy1QUk8gVGVzdCBDZW50ZXIgMgITEgAqWqmvi+iM1upT4QAAACpaqTAMBggqhQMHAQEC
AwUAoIIBkzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODA3MjQw
OTI2MzNaME8GCSqGSIb3DQEJBDFCBED6cgwfGdpbxS84oybqK3cPl04B2SihubuahJxwfzHYHCq9
wcfIRedcjBKmxGNJFNDxrP3bQuqLNnAMSRh2FQmtMIIBBgYLKoZIhvcNAQkQAi8xgfYwgfMwgfAw
ge0wCgYIKoUDBwEBAgMEQD0X4TWnwikftH70Y7lbvsc75GpzfgsxHfB5QufM/eTPz9qwC7AJNS/9
4Ewt4Ah0w3zT2DsFhVcZhTukvVwTVwEwgZwwgYSkgYEwfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9y
dEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNS
WVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAKlqpr4vo
jNbqU+EAAAAqWqkwDAYIKoUDBwEBAQIFAASBgEbenAd+7P9xgl2RiGmk3LP9UbXGHWFnHJhLLaEb
wZHrJoCQbS00XQv87dGqjY+TB2ihOVpyDE1G752ufTpBic8XUDj0DejycsPRW4Xq7t4TpkyF+HoH
o/t6zu0JBkUtXvphgYFXIOI2C3/B9DI5ciJncjBDUFQ3iP91m0IVBZkf
PS Вся проблема в отсутствии нормальной документации с примерами. "Например, вам надо проверить эцп из браузера на сервере? Делаете так: в браузере такая-то функция, на сервере такой-то код проверки в консоли и на языке таком-то. В файлы на сервере для корректной проверки надо положить то-то и то-то в таком-то виде." А сейчас есть разрозненные обрывки кода в документации родом откуда-то из 90-х. Доки по консольной утилите я не нашёл вообще нигде. Есть ссылка на некий пдф вервии 3,6, но она не работает... Вы выдели документацию, например яндекса? Там примеров больше, чем описания кода. Все-таки вам платят нехилые деньги за ваши продукты! Была бы нормальная дока и не надо было бы писать тут километровые сообщения и ждать пока кто-то ответит. А может, и не ответит... Отредактировано пользователем 24 июля 2018 г. 12:53:47(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Slavenin, как то у вас файлик который вы приложили не совпадает с теми данными что подписывали. Качаем ваш файлик, и смотрим его хэш. Цитата: /opt/cprocsp/bin/amd64/cpverify -mk ~/Downloads/test.doc -inverted_halfbytes 0 B34EEF6BEA1898026586CFE09B6B2C624F1514C31F1C4D3377864AF43EBADFED
Берем обе ваши подписи и сохраняем в файл. Далее декодируем из base64 формата. Цитата: cat /tmp/cryptcp MIAGCSqGSIb3DQEHAqCAMIACAQExDjAMBggqhQMHAQECAwUAMIAGCSqGSIb3DQEH AQAAMYIC1jCCAtICAQEwgZYwfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlw dG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoT DkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy IDICExIAKlqpr4vojNbqU+EAAAAqWqkwDAYIKoUDBwEBAgMFAKCCAZMwGAYJKoZI hvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTgwNzI0MDkxMTU1 WjBPBgkqhkiG9w0BCQQxQgRAS5IjxrM256pB9O4Ii4O1oVu1TqYx/IMJ1Gmi7X02 xnDTZCSy6aqHxlerPSztzwT3MlBOyrIKXr7UDAz/wXqRXDCCAQYGCyqGSIb3DQEJ EAIvMYH2MIHzMIHwMIHtMAoGCCqFAwcBAQIDBEA9F+E1p8IpH7R+9GO5W77HO+Rq c34LMR3weULnzP3kz8/asAuwCTUv/eBMLeAIdMN809g7BYVXGYU7pL1cE1cBMIGc MIGEpIGBMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRvcHJvLnJ1MQsw CQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5DUllQVE8tUFJP IExMQzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAyAhMSACpaqa+L 6IzW6lPhAAAAKlqpMAwGCCqFAwcBAQECBQAEgYBPgWJ0vwdtzpJk5G72Y6A0ydH0 Ze5qcRFrECGib3g2BkJQxTZy2FzZEa5K+iIO8HVMV0ZZRwLImin6PQ+TfX9KuiGN QPOofEsv0ty2r7RjoXhPptZbofJmgXsx40uv+77UPIrhBLUVNkl0TOiQy7EQu/vH czAkf9k7ML9Kk39mSQAAAAAAAA== cross@cross7:~$ cat /tmp/br MIIG1AYJKoZIhvcNAQcCoIIGxTCCBsECAQExDjAMBggqhQMHAQECAwUAMAsGCSqGSIb3DQEHAaCC A8MwggO/MIIDbqADAgECAhMSACpaqa+L6IzW6lPhAAAAKlqpMAgGBiqFAwICAzB/MSMwIQYJKoZI hvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2Nv dzEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdCBDZW50 ZXIgMjAeFw0xODA3MDIxMjAzMDdaFw0xODEwMDIxMjEzMDdaMIGEMSEwHwYJKoZIhvcNAQkBFhJt YmFydWxpbkBnbWFpbC5jb20xFTATBgNVBAMMDNCc0LDQutGB0LjQvDENMAsGA1UECwwEdGVzdDEN MAsGA1UECgwEdGVzdDENMAsGA1UEBwwEZXRzdDEOMAwGA1UECAwFdGVzdHMxCzAJBgNVBAYTAlJV MIGqMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYIKoUDBwEBAgMDgYQABIGAUoaCGDeXEjRGy8Y/ nIMB4C6gHA838lcNAwrAxwMTZ3aKvomnP303158hIRkzHZm2XaMDVWLyvCEG154wCYFd69BmmGOx vF52ZajTMZR8JAg0+I60J2dQT3G4iP2W4GBy94G/JqP4BrDj4AR+Xax/yAIxfzQdnE75z//n07PH OiujggFxMIIBbTAPBgNVHQ8BAf8EBQMDB/AAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1UdDgQW BBQFlEGCWyJA+50UozxbgMajAv4ITTAfBgNVHSMEGDAWgBQVMXywjRreZtcVnElSlxckuQF6gzBZ BgNVHR8EUjBQME6gTKBKhkhodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL0NS WVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMi5jcmwwgakGCCsGAQUFBwEBBIGcMIGZMGEGCCsG AQUFBzAChlVodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3QtY2EtMjAx NF9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIuY3J0MDQGCCsGAQUFBzABhihodHRwOi8v dGVzdGNhLmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBABI3DQccvXtEbfcO zhD3MMzvBKUvCsB0P92TFOTx0K9KAlvei/chybjRi2jrC0PHlGqqWsS4/SZ5yCw5wUpmLjkxggLW MIIC0gIBATCBljB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkGA1UE BhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMT GENSWVBUTy1QUk8gVGVzdCBDZW50ZXIgMgITEgAqWqmvi+iM1upT4QAAACpaqTAMBggqhQMHAQEC AwUAoIIBkzAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODA3MjQw OTI2MzNaME8GCSqGSIb3DQEJBDFCBED6cgwfGdpbxS84oybqK3cPl04B2SihubuahJxwfzHYHCq9 wcfIRedcjBKmxGNJFNDxrP3bQuqLNnAMSRh2FQmtMIIBBgYLKoZIhvcNAQkQAi8xgfYwgfMwgfAw ge0wCgYIKoUDBwEBAgMEQD0X4TWnwikftH70Y7lbvsc75GpzfgsxHfB5QufM/eTPz9qwC7AJNS/9 4Ewt4Ah0w3zT2DsFhVcZhTukvVwTVwEwgZwwgYSkgYEwfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9y dEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNS WVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAKlqpr4vo jNbqU+EAAAAqWqkwDAYIKoUDBwEBAQIFAASBgEbenAd+7P9xgl2RiGmk3LP9UbXGHWFnHJhLLaEb wZHrJoCQbS00XQv87dGqjY+TB2ihOVpyDE1G752ufTpBic8XUDj0DejycsPRW4Xq7t4TpkyF+HoH o/t6zu0JBkUtXvphgYFXIOI2C3/B9DI5ciJncjBDUFQ3iP91m0IVBZkf
cross@cross7:~$ /opt/cprocsp/bin/amd64/certmgr -decode -src /tmp/cryptcp -dest /tmp/b Certmgr 1.1 (debug version) (c) "CryptoPro", 2007-2018. program for managing certificates, CRLs and stores [ErrorCode: 0x00000000] cross@cross7:~$ /opt/cprocsp/bin/amd64/certmgr -decode -src /tmp/cryptcp -dest /tmp/b^C cross@cross7:~$ /opt/cprocsp/bin/amd64/certmgr -decode -src /tmp/br -dest /tmp/b1 Certmgr 1.1 (debug version) (c) "CryptoPro", 2007-2018. program for managing certificates, CRLs and stores [ErrorCode: 0x00000000]
Далее используя dumpasn1 смотрим поле MessageDigest в котором указан хеш данных на которые полученна подпись. У вас в случае cryptcp - 4B 92 .. 91 5C В случае браузера - FA 72 .. 09 AD Что ни как не совпадает с хешом от файла. ( B34EEF6BEA1898026586CFE09B6B2C624F1514C31F1C4D3377864AF43EBADFED ) Создал подпись как и вы с приложенного файла. Цитата: cross@cross7:~$ /opt/cprocsp/bin/amd64/cryptcp -signf -cadesbes -dn "Test Certificate" ~/Downloads/test.doc CryptCP 5.0 (Debug version) (c) "Crypto-Pro", 2002-2017. Command prompt Utility for file signature and encryption. Parameters: -signf -cadesbes -dn Test Certificate /home/cross/Downloads/test.doc
The following certificate will be used: RDN:Test Certificate Valid from 02.03.2018 13:11:02 to 02.06.2018 13:21:02
Certificate chain is not checked for this certificate: RDN:Test Certificate Valid from 02.03.2018 13:11:02 to 02.06.2018 13:21:02
This certificate or one of the certificates in the certificate chain is not time valid. Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?Y
Certificate chains are checked. Folder '/home/cross/Downloads/': /home/cross/Downloads/test.doc... Signing the data... Signed message is created. [ErrorCode: 0x00000000] cross@cross7:~$ cat test.doc.sgn MIAGCSqGSIb3DQEHAqCAMIACAQExDDAKBgYqhQMCAgkFADCABgkqhkiG9w0BBwEA ADGCAk4wggJKAgEBMIGWMH8xIzAhBgkqhkiG9w0BCQEWFHN1cHBvcnRAY3J5cHRv cHJvLnJ1MQswCQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MRcwFQYDVQQKEw5D UllQVE8tUFJPIExMQzEhMB8GA1UEAxMYQ1JZUFRPLVBSTyBUZXN0IENlbnRlciAy AhMSACZPw7z5zN7TDE/gAAAAJk/DMAoGBiqFAwICCQUAoIIBUDAYBgkqhkiG9w0B CQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODA3MjQxNTAxNTBaMC8G CSqGSIb3DQEJBDEiBCCzTu9r6hiYAmWGz+CbayxiTxUUwx8cTTN3hkr0Prrf7TCB 5AYLKoZIhvcNAQkQAi8xgdQwgdEwgc4wgcswCAYGKoUDAgIJBCAekFJbA0KAYGk0 XDdLsSu0rzSRT/1bW/tyxhJKNNwLzDCBnDCBhKSBgTB/MSMwIQYJKoZIhvcNAQkB FhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1v c2NvdzEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1Q Uk8gVGVzdCBDZW50ZXIgMgITEgAmT8O8+cze0wxP4AAAACZPwzAKBgYqhQMCAhMF AARA6XIkkjjenofqV2RgptaN9fpYLOwJeUj6xSZ/7/wMU3HNlCGb4Xv7+YmUZfkL 0Ez41vPuesKnUwTHc9b4ckKE2AAAAAAAAA==
Перекодировав из base64 в бинарный формат и посмотрев поле messageDigest у меня совпадает с файлом. Цитата: 287 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4) : (PKCS #9) <31 22> 298 34: SET { <04 20> 300 32: OCTET STRING : B3 4E EF 6B EA 18 98 02 .N.k.... : 65 86 CF E0 9B 6B 2C 62 e....k,b : 4F 15 14 C3 1F 1C 4D 33 O.....M3 : 77 86 4A F4 3E BA DF ED : } : }
Что то с данными которые вы прикладываете и подписываете творится в промежутке между этими двумя действиями. Отредактировано пользователем 24 июля 2018 г. 18:08:22(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Зашел на страницу - https://www.cryptopro.ru...ge/cades_bes_sample.htmlи подписал Hello World Далее скопировал подпись в файл /tmp/test_page.sgn Цитата: cross@cross7:/tmp$ cat /tmp/test_page.sgn MIIGoQYJKoZIhvcNAQcCoIIGkjCCBo4CAQExDDAKBgYqhQMCAgkFADAaBgkqhkiG9w0BBwGgDQQL SGVsbG8gV29ybGSgggRgMIIB7TCCAZygAwIBAgIQJFj7calSYdEtXH8idAalKjAIBgYqhQMCAgMw VzELMAkGA1UEBhMCUlUxFzAVBgNVBAoTDk9PTyBDcnlwdG8tUHJvMRYwFAYDVQQLEw1DYWRlcyBU ZXN0aW5nMRcwFQYDVQQDEw5DYWRlc1Rlc3QgUm9vdDAeFw0wNTAxMDEwMDAwMDBaFw00NDExMDQw MDAwMDBaMFcxCzAJBgNVBAYTAlJVMRcwFQYDVQQKEw5PT08gQ3J5cHRvLVBybzEWMBQGA1UECxMN Q2FkZXMgVGVzdGluZzEXMBUGA1UEAxMOQ2FkZXNUZXN0IFJvb3QwYzAcBgYqhQMCAhMwEgYHKoUD AgIjAQYHKoUDAgIeAQNDAARA3oRizuHpsT9YVIaNmLiEkjchgwObRUT+VhRP5VnkqXum/EXQBxN2 2xPPHTnzM5DZ9xspl7Z908BJ91WpPrreWaNCMEAwDgYDVR0PAQH/BAQDAgHmMA8GA1UdEwEB/wQF MAMBAf8wHQYDVR0OBBYEFAdOPtl2NFkQ3mp8Cc3JECsj1RGRMAgGBiqFAwICAwNBABdcnXkcXd5x JKi22C842RqAWuvqRrmheWPCWXw1C9UbZLVujJICKkRbW9v2CtOMCURpbM6TtaoeDLpDiGgkDBAw ggJrMIICGqADAgECAgMPQkIwCAYGKoUDAgIDMFcxCzAJBgNVBAYTAlJVMRcwFQYDVQQKEw5PT08g Q3J5cHRvLVBybzEWMBQGA1UECxMNQ2FkZXMgVGVzdGluZzEXMBUGA1UEAxMOQ2FkZXNUZXN0IFJv b3QwHhcNMDUwMTAxMDAwMDAyWhcNMjQwMTAxMDAwMDAxWjBcMQswCQYDVQQGEwJSVTEXMBUGA1UE CgwOT09PIENyeXB0by1Qcm8xFjAUBgNVBAsMDUNhZGVzIFRlc3RpbmcxHDAaBgNVBAMME0NhZGVz VGVzdCBHb3N0IFVzZXIwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYHKoUDAgIeAQNDAARA+j4ru0pm WrTWFjiz+OWq8Flp3dB1btBnJe64jj6Eo8nuj9I+Y9wMyYRZMfIhWwnFIp5DPkclQdwaq7qtFSbg UaOBxzCBxDAOBgNVHQ8BAf8EBAMCBeAwPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRw Oi8vc3ViY2EtMS9vY3NwX3Jvb3Qvb2NzcC5zcmYwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL3N1 YmNhLTEvQ2VydEVucm9sbC9yb290LmNybDAfBgNVHSMEGDAWgBQHTj7ZdjRZEN5qfAnNyRArI9UR kTAdBgNVHQ4EFgQUSbB2QPED8AgdFfInM6X7Aaf+TEkwCAYGKoUDAgIDA0EAoDRKnvGhRzcn2oYp zjK9U/o13wwAEH6igLxxThoPIyyapCzgE3MxxvEm8A3dF3T362r60Qvb2Fcpl9zX1bg13DGCAfkw ggH1AgEBMF4wVzELMAkGA1UEBhMCUlUxFzAVBgNVBAoTDk9PTyBDcnlwdG8tUHJvMRYwFAYDVQQL Ew1DYWRlcyBUZXN0aW5nMRcwFQYDVQQDEw5DYWRlc1Rlc3QgUm9vdAIDD0JCMAoGBiqFAwICCQUA oIIBNDAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xODA3MjQxNTA1 MzVaMB0GCisGAQQBgjdYAgExDwQNRG9jdW1lbnQgTmFtZTAvBgkqhkiG9w0BCQQxIgQgde0V2E34 QpHGf+B78jSsaekqnCo3juYvNCr3Oegp66kwgakGCyqGSIb3DQEJEAIvMYGZMIGWMIGTMIGQMAgG BiqFAwICCQQg/P2uq3rWYJgM+Bjvk/IbdWtjiX4cMpDlX2AtBc0RdL4wYjBbpFkwVzELMAkGA1UE BhMCUlUxFzAVBgNVBAoTDk9PTyBDcnlwdG8tUHJvMRYwFAYDVQQLEw1DYWRlcyBUZXN0aW5nMRcw FQYDVQQDEw5DYWRlc1Rlc3QgUm9vdAIDD0JCMAoGBiqFAwICEwUABEBqCuVrXdGbux4Cc2fx666p rsYKR9xTzroFmVDxivuTanMvMrd+CWMZ3qw2xm945P/5LD3sbQJ0nFSjX2tmuovU (failed reverse-i-search)`exho': scp firefox_cryptopro_^Ctension_latest.xpi admin@astra:~/ cross@cross7:/tmp$ echo -n "Hello World" > /tmp/test_page cross@cross7:/tmp$ /opt/cprocsp/bin/amd64/cryptcp -vsignf -f /tmp/test_page.sgn /tmp/test_page CryptCP 5.0 (Debug version) (c) "Crypto-Pro", 2002-2017. Command prompt Utility for file signature and encryption. Parameters: -vsignf -f /tmp/test_page.sgn /tmp/test_page
Certificates found: 2 Certificate chains are checked. Folder '/tmp/': /tmp/test_page... Signature verifying... Signer: CadesTest Gost User, Cades Testing, OOO Crypto-Pro, RU Signature's verified. [ErrorCode: 0x00000000] cross@cross7:/tmp$
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2018(UTC) Сообщений: 27  Сказал(а) «Спасибо»: 1 раз
|
Ох уж этот жабаскрипт.... блин.... Исключил обработку бинарных данных и base64 на стороне клиента (не знаю кто косячит, но подозреваю, что либа для base64, так как хэши на сервере и клиенте одинаковых данных разительно отличаются, жаль нативное кодирование только с 10 осла работает...), отдаю с сервера сразу готовый base64 хэш. И, о чудо, шарманка завелась. Не на 100% но всё-таки. В итоге php код выглядит так: Код: public function verify($sgn, $data)
{
$data = base64_encode($data);
try
{
$sd = new \CPSignedData();
$sd->set_ContentEncoding(BASE64_TO_BINARY);
$sd->set_Content($data);
$sd->VerifyCades($sgn, CADES_BES, 1);
return true;
}
catch(\Exception $e)
{
;
}
return false;
}
Хотя функция Verify по-прежнему ругается на Exception: Internal error. (0x80070490) не знаю, что ей надо... В любом случае огромная благодарность @cross за помощь. Хотя, документацию вы бы все-таки подпилили бы ;)
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Если есть желание могу и с Verify() помочь :). Документацию постараемся улучшить! |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.06.2018(UTC) Сообщений: 27  Сказал(а) «Спасибо»: 1 раз
|
Автор: cross  Если есть желание могу и с Verify() помочь :). Документацию постараемся улучшить! Конечно есть, прежде всего не понятна разница между этими двумя методами. Ну и, конечно, что именно ему отдавать для проверки. Есть файл, подпись и открытый ключ. PS и ещё вопрос не совсем по теме: попытался добыть атрибуты сертификата и подписанта: Код:public function getAttributes()
{
$sd = $this->data;
dump($sd->get_Certificates()->Count());
$cert = $sd->get_Certificates()->Item(1);
dump(iconv('windows-1251', 'utf-8', $cert->GetInfo(CERT_INFO_SUBJECT_SIMPLE_NAME)));
dump(iconv('windows-1251', 'utf-8', $cert->GetInfo(CERT_INFO_ISSUER_SIMPLE_NAME)));
//пишет не реализовано
// dump($cert->GetInfo(CERT_INFO_SUBJECT_EMAIL_NAME));
// dump($cert->GetInfo(CERT_INFO_ISSUER_EMAIL_NAME));
// dump($cert->GetInfo(CERT_INFO_SUBJECT_UPN));
// dump($cert->GetInfo(CERT_INFO_ISSUER_UPN));
// dump($cert->GetInfo(CERT_INFO_SUBJECT_DNS_NAME));
// dump($cert->GetInfo(CERT_INFO_ISSUER_DNS_NAME));
$signer = $sd->get_Signers()->get_Item(1);
$attrrsCnt = $signer->get_AuthenticatedAttributes()->get_Count();
for ($i = 1; $i <= $attrrsCnt; $i++)
{
$attr = $signer->get_AuthenticatedAttributes()->get_Item($i);
switch ($attr->get_Name())
{
case AUTHENTICATED_ATTRIBUTE_SIGNING_TIME:
$name = 'time';
break;
case AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME:
$name = 'document name';
break;
case AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION:
$name = 'document descr';
break;
default:
$name = 'unknow';
}
//выдаёт кучу кракозябр в непонятной кодировке
//ни один атрибут из 4 кроме времени не привязался к константе
dump([$name, $attr->get_Value()]);
}
}
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
1. Метод Verify достался нам т.к. мы должны были соблюсти интерфейс CAPICOM.SignedData от MS. При прочих равных лучше всего использовать метод VerifyCades(). При вызове Verify данные подаются так же в свойство Content, а сам метод вот так вызывается Verify(<подпись>, true (detached), константа CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE)
2. По поводу подписанных атрибутов. Value - это asn1 закодироване значение атрибута. В зависимости от типа атрибута это могут быть сильно разные данные. |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
case AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME: case AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION: Вот такие атрибуты появятся в подписи только если вы их сами явно добавили. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close