Здравствуйте! Кто знает? Пожалуйста, подскажите.
Написал программу на JCP по взаимодействию с ФСС (вроде как ФСС работает с JCP). Теперь проделываю то же самое, ну почти :), на CSP. Не получается.
1. Получил тестовый ключ и сертификат. Ключ ГОСТ 2012-256
2. Загрузил ключ в CSP хранилище, получил имя te-457df0ca-7703-4d47-9ae3-e9f050111928.
3. В CSP привязал сертификат.
4. Выгрузил это дело из CSP хранилища в JCP хранилище.
Сторона JCP:
Прогнал через работающую программу JCP взаимодействия с ФСС. Получил ответ от ФСС, getPrivateLN, работает!
Сторона CSP:
Использовал переписав немного движок JCP
1. Входные данные привел к каноникализации как в JCP и при помощи
Код:cryptcp.x64.exe -hashAlg 1.2.643.7.1.1.2.2 -hash -dir d:\csp_hashes d:\digest.xml
получил хеш в бинарном виде и перевел в base64.
Он совпал с тем что в JCP Код:<DigestValue>2DVbn5QbieuxPkHrnTJzD6KRzJBEjqEffdfsLnZDrJ8=</DigestValue>
2. Входные данные
Код:<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/><ds:Reference URI="#REGNO_7729015074"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>2DVbn5QbieuxPkHrnTJzD6KRzJBEjqEffdfsLnZDrJ8=</DigestValue></ds:Reference></ds:SignedInfo>
привел к каноникализации как в JCP и при помощи
Код:csptest.exe -keyset -sign GOST12_256 -provtype 80 -export d:\public.key -in d:\sign.xml -out d:\sign.xml.hsh -container te-457df0ca-7703-4d47-9ae3-e9f050111928 -password 1234 -keytype exchange
получил подпись в бинарном виде и перевел в base64.
3. Все подставил, соединил, скомпоновал и послал запрос в ФСС и получил оплеуху :)
Код:ORA-20001: Некорректная подпись головной организации: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.
Запросы получились идентичные (госты в тегах, сами данные и пр.), не считая signValue и это понятно.
1. Свалидировал в CSP то что получил через CSP.
Код:csptest.exe -keyset -verify GOST12_256 -in d:\sign.xml -signature d:\sign.xml.hsh -password 1234 -container te-457df0ca-7703-4d47-9ae3-e9f050111928 -import d:\public.key -keytype exchange
-
выдало что подпись валидная!2. Свалидировал в JCP, прочитав бинарный файл того что получил через CSP (d:\sign.xml.hsh) -
проверка не прошла!3. Свалидировал в CSP то что получил через JCP
Код:csptest.exe -keyset -verify GOST12_256 -in d:\sign.xml -signature d:\jcp_sign.hsh -password 1234 -container te-457df0ca-7703-4d47-9ae3-e9f050111928 -import d:\public.key -keytype exchange
-
проверка не прошла!Как так получается, что подписи полученные в CSP И JCP отличаются так что не проходят друг у друга проверку?