Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
Исходный xml(не влезло в первое сообщение):
<?xml version="1.0"?> <metadate> <test>3432</test> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/> <Reference> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/> <DigestValue>rQRcvnfGVu2YI/ryIGYaeBmwFPtMTYYKudSvD8mzbEs=</DigestValue> </Reference> </SignedInfo> <SignatureValue>WWfSqQzHUl/mEGxxi7dT7A+GUZZn2aQpGAImtVKwvx9CMPhl5Cz4kr+kXQTuqEJS dXjhadNwgjUXVmp8V64pWQ==</SignatureValue> <KeyInfo> <X509Data> <X509Certificate>MIIJCDCCCLegAwIBAgIKMrkd5gAAAAABvDAIBgYqhQMCAgMwggEfMRgwFgYFKoUD ZAESDTEwMzc3MDAwODU0NDQxGjAYBggqhQMDgQMBARIMMDA3NzE3MTA3OTkxMTkw NwYDVQQJDDDRg9C7LiDQodGD0YnRkdCy0YHQutC40Lkg0LLQsNC7LCDQtC4xNiwg 0YHRgtGALjUxHzAdBgkqhkiG9w0BCQEWEHFjYUBjcnlwdG9wcm8ucnUxCzAJBgNV BAYTAlJVMRkwFwYDVQQIDBDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+ 0YHQutCy0LAxJTAjBgNVBAoMHNCe0J7QniAi0JrQoNCY0J/QotCeLdCf0KDQniIx JTAjBgNVBAMMHNCe0J7QniAi0JrQoNCY0J/QotCeLdCf0KDQniIwHhcNMTMwNDMw MTA0MjAwWhcNMTQwNDMwMTA1MjAwWjCCAjcxFjAUBgUqhQNkAxILMDMwMDc3MTYz MDQxGDAWBgUqhQNkARINMTAyNTkwMDc1NjY4MzEaMBgGCCqFAwOBAwEBEgwwMDU5 MDMwMzc2MzUxHzAdBgkqhkiG9w0BCQEWEHNhdmluQHByb2dub3oucnUxCzAJBgNV BAYTAlJVMSkwJwYDVQQIHiAANQA5ACAEHwQ1BEAEPARBBDoEOAQ5ACAEOgRABDAE OTETMBEGA1UEBx4KBB8ENQRABDwETDEjMCEGA1UECh4aBBcEEAQeACAAIgQfBCAE HgQTBB0EHgQXACIxbTBrBgNVBAseZAQdBDAEPwRABDAEMgQ7BDUEPQQ4BDUAIARA BDUESAQ1BD0EOAQ5ACAENAQ7BE8AIAQ/BEAEMAQyBD4EPgRFBEAEMAQ9BDgEQgQ1 BDsETAQ9BEsERQAgBD4EQAQzBDAEPQQ+BDIxOTA3BgNVBAMeMAQhBDAEMgQ4BD0A IAQYBDMEPgRABEwAIAQSBDAEOwQ1BD0EQgQ4BD0EPgQyBDgERzExMC8GA1UECR4o BCEENQRABDMENQRPACAEFAQwBD0ESQQ4BD0EMAAsACAENAAuADUALDEzMDEGA1UE DB4qBCAEQwQ6BD4EMgQ+BDQEOARCBDUEOwRMACAEPwRABD4ENQQ6BEIEPgQyMS0w KwYDVQQqHiQEGAQzBD4EQARMACAEEgQwBDsENQQ9BEIEOAQ9BD4EMgQ4BEcxEzAR BgNVBAQeCgQhBDAEMgQ4BD0wYzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUDAgIe AQNDAARAptIc8Uvt06FqU+n2xywKZfOxVT+rGgNqC1bFgyYVZvyrpagD+47l+ccH w2B3tMiEfJg7e9cxO3uA42Jc031HYKOCBLUwggSxMA4GA1UdDwEB/wQEAwIE8DAm BgNVHSUEHzAdBggrBgEFBQcDBAYHKoUDAgIiBgYIKwYBBQUHAwIwHQYDVR0OBBYE FGWDOImN/wbKqmKJoWmrRXRRQ+6uMIIBYAYDVR0jBIIBVzCCAVOAFFsekWCWn5rt V7Wqp2PxLUdw2FwYoYIBJ6SCASMwggEfMRgwFgYFKoUDZAESDTEwMzc3MDAwODU0 NDQxGjAYBggqhQMDgQMBARIMMDA3NzE3MTA3OTkxMTkwNwYDVQQJDDDRg9C7LiDQ odGD0YnRkdCy0YHQutC40Lkg0LLQsNC7LCDQtC4xNiwg0YHRgtGALjUxHzAdBgkq hkiG9w0BCQEWEHFjYUBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMRkwFwYDVQQI DBDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxJTAjBgNV BAoMHNCe0J7QniAi0JrQoNCY0J/QotCeLdCf0KDQniIxJTAjBgNVBAMMHNCe0J7Q niAi0JrQoNCY0J/QotCeLdCf0KDQniKCEALOtaYgvCieTja3fEdCH7UwggEBBgNV HR8EgfkwgfYwUaBPoE2GS2h0dHA6Ly9jZHAuY3J5cHRvcHJvLnJ1L3JhL2NkcC81 QjFFOTE2MDk2OUY5QUVENTdCNUFBQTc2M0YxMkQ0NzcwRDg1QzE4LmNybDBPoE2g S4ZJaHR0cDovL3EuY3J5cHRvcHJvLnJ1L3JhL2NkcC81QjFFOTE2MDk2OUY5QUVE NTdCNUFBQTc2M0YxMkQ0NzcwRDg1QzE4LmNybDBQoE6gTIZKaHR0cDovL3EyLmNy eXB0b3Byby5ydS9yYS9jZHAvNUIxRTkxNjA5NjlGOUFFRDU3QjVBQUE3NjNGMTJE NDc3MEQ4NUMxOC5jcmwwQAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzABhiRodHRw Oi8vcXMuY3J5cHRvcHJvLnJ1L29jc3Avb2NzcC5zcmYwKwYDVR0QBCQwIoAPMjAx MzA0MzAxMDQyMDBagQ8yMDE0MDQzMDEwNDIwMFowEwYDVR0gBAwwCjAIBgYqhQNk cQEwNAYFKoUDZG8EKwwp0JrRgNC40L/RgtC+0J/RgNC+IENTUCAo0LLQtdGA0YHQ uNGPIDMuNikwggEzBgUqhQNkcASCASgwggEkDCsi0JrRgNC40L/RgtC+0J/RgNC+ IENTUCIgKNCy0LXRgNGB0LjRjyAzLjYpDFMi0KPQtNC+0YHRgtC+0LLQtdGA0Y/R jtGJ0LjQuSDRhtC10L3RgtGAICLQmtGA0LjQv9GC0L7Qn9GA0L4g0KPQpiIg0LLQ tdGA0YHQuNC4IDEuNQxP0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQstC1 0YLRgdGC0LLQuNGPIOKEliDQodCkLzEyMS0xODU5INC+0YIgMTcuMDYuMjAxMgxP 0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPIOKE liDQodCkLzEyOC0xODIyINC+0YIgMDEuMDYuMjAxMjAIBgYqhQMCAgMDQQBPzeSP Y2fQmcyC1BjQ5w7Kpi+QrT1WJLATNkgpjyxqzrTWXyhBKIv2IQwZCk0W+A9f85XG hjh85TPAVZCGjnYI</X509Certificate> </X509Data> </KeyInfo> </Signature></metadate>
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
2) получаю хэш и подписываю(клиент javascript) Код:
function generateSignatureValue(base64Hash) {
var oStore = CreateObject("CAPICOM.Store");
oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
try {
var certificate = oStore.Certificates.Item(4);
//certificate.Export(0)
//получаю хэш от SignedInfo
var hashObject = CreateObject("CAdESCOM.HashedData");
hashObject.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
hashObject.DataEncoding = CADESCOM_BASE64_TO_BINARY;
hashObject.Hash(base64Hash);
//хэш получается 5F2DDD82A85B2E0FD7D98A8CF1E6C4799CBA476B4303088D32194E3E3F7E0FB9
//подписываю и переворачиваю
var rawSignature = CreateObject("CAdESCOM.RawSignature");
var signatureHex = rawSignature.SignHash(hashObject, certificate);
var reversedSignatureString = utils.reverse(utils.hexToString(signatureHex));
oStore.Close();
//кодирую в base64
return B64.encode(reversedSignatureString);
} catch (e) {
alert(e);
}
};
потом вставляю полученное значение в SignatureValue исходного xml и не могу верифицировать подпись. Алгоритм правильный или я что-то не учел? В чем может быть проблема, 2 день бьюсь уже, не получается верифицировать. ЗЫ почему-то не получилось написать все в одном сообщении
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
1) ключ тотже 2)CADESCOM_HASH_ALGORITHM_CP_GOST_3411 == 100
3) пробую переписать Javascript, как у вас
на строчке hashObject.SetHashValue(utils.stringToHex(utils.base64.decode(base64Hash))); пишет "Parameter incorrect" У вас в примере hashObject это CreateObject("CAdESCOM.HashedData") или какой-то свой объект?
также уточните , пожалуйста, что именно поступает в функцию в параметре base64Hash?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Как я понял в вашем случае вы в аргумент передаете не хеш в base64, а данные signedInfo в base64 от которых вы потом берете хеш (hashObject.Hash(base64Hash))
Так что делать hashObject.SetHashValue() не требуется и метод generateSignatureValue, который вы выложили на первый взгляд корректный, за исключением наименования аргумента (скорее что-то типа base64SignedInfo)
Исключите ошибки в сторонних библиотеках. Просто попробуйте вставить функции для работы с HEX и base64 из той темы (как заведомо корректные).
|
1 пользователь поблагодарил dmishin за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
применил ваши функции. Хэш стал совпадать по длине, но все равно не верефицируется. Подозреваю у меня ошибка либо при канокализации, либо при взятии хэша. dmishin,пожалуйста, не могли бы вы посчитать хэш(hashObject.Value) на своем алгоритме от следующего xml, чтобы я мог использовать его как эталон при отладке? Код:
<SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116"><XPath xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">not(ancestor-or-self::dsig:Signature)</XPath></Transform></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411" /><DigestValue>wMqeedhkBl4FMJ3bjYZjwLFdkwOsK/a0AaNjt+o+pxk=</DigestValue></Reference></SignedInfo>
Отредактировано пользователем 19 июля 2013 г. 11:43:35(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Я сразу попробовал взять хеш от данных в base64 что вы скидывали - он совпал. Сейчас посчитаю от этих данных - 1P5x3aDSrLM/Mxq1GHJYzjQPK/9XaN/5WPQzaPy8l+c= А после канонизации: hLssiRKfyz7LYrR6zGAVsllIt50KW3uEJB1c0HvsPkw= Отредактировано пользователем 19 июля 2013 г. 12:09:03(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 16.07.2013(UTC) Сообщений: 35 Откуда: Пермь Сказал(а) «Спасибо»: 9 раз
|
правильно понимаю, что hLssiRKfyz7LYrR6zGAVsllIt50KW3uEJB1c0HvsPkw= это у вас получилось значение, после канинизирования signedInfoXml, приведения ее в base64 и затем взятия хэша от полученного значения без дальнейших преобразований?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Попробуйте взять такой шаблон: Цитата:<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/> <DigestValue/> </Reference> </SignedInfo> <SignatureValue/> <KeyInfo> <X509Data/> </KeyInfo> </Signature>
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.08.2012(UTC) Сообщений: 123
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 6 раз в 6 постах
|
Автор: fomenko правильно понимаю, что hLssiRKfyz7LYrR6zGAVsllIt50KW3uEJB1c0HvsPkw= это у вас получилось значение, после канинизирования signedInfoXml, приведения ее в base64 и затем взятия хэша от полученного значения без дальнейших преобразований? Хэш берется не от base64 а по сырым данным. (В случае с хешом полученным в javascript там явным образом указывается что на входе base64) Это значение я получил канонизировав xml. Но нельзя производить канонизацию только этого значения. Надо канонизировать SignedInfo в контексте signature, т.к. там добавляются неймспейсы. Например канонизированный вид SignedInfo от шаблона, который я скинул выглядит так: Цитата:<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></SignatureMethod><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></Transform><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></DigestMethod><DigestValue></DigestValue></Reference></SignedInfo> Как видите <SignedInfo> преобразовался в <SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> Отредактировано пользователем 19 июля 2013 г. 12:26:58(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close