Статус: Новичок
Группы: Участники
Зарегистрирован: 15.03.2012(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз
|
Добрый вечер. Некоторое время бьюсь с взаимодействием со СМЭВ3. Начал с того, что через СМЭВ Адаптер сделал себе контрольный пример. Код:<?xml version="1.0" encoding="UTF-8"?>
<ns2:SendRequestRequest xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1" xmlns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/basic/1.1" xmlns:ns3="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/faults/1.1">
<ns2:SenderProvidedRequestData Id="SIGNED_BY_CALLER">
<ns2:MessageID>fd7c5dd3-049b-11eb-b21e-52540074bb92</ns2:MessageID>
<ns2:TransactionCode>016f42db-049c-11eb-9135-fa163e1007b9|00000000000000000000|S/9k4RvayUJ2ID/kSfqYI0tn/2C0AzIUCb9skAPi+ED2GAe40Sdu4BUE8t4V9RiiovcvLj6yosKMkP3ePDEEXoy31/mgbXYkTmibUwMpx3U9CgQjnCeN0mTMs/kgROW9U5mSOhSOh6ZLZjlYtmbT/WTAVL7ScWivdkMCA+SXQ47c+rWRCrLuobFzsG/smhFHZ660GoWlcSgz46u+QaoO5eaT1UFstLflN+BUAcO+Z+Dr5iTfkiMdtvM2VcUnjitR+flYQoq41hG5FV03lWhwmBc5NF/B1svK6MQWKd9KbuznZU/1AYxigqej3WzMmi+j5BdKaDN5RvUORPoX5KN6EQ==</ns2:TransactionCode>
<MessagePrimaryContent>
<req:Request xmlns:req="urn://x-artefacts-rosreestr-gov-ru/virtual-services/egrn-statement/1.1.2" xmlns="urn://x-artefacts-smev-gov-ru/services/service-adapter/types" xmlns:das="urn://x-artefacts-rosreestr-gov-ru/virtual-services/egrn-statement/dRegionsRF/1.0.0" xmlns:ns2="urn://x-artefacts-smev-gov-ru/services/service-adapter/types/faults" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<req:region>41</req:region>
<req:externalNumber>1111111111</req:externalNumber>
<req:senderType>Vedomstvo</req:senderType>
<req:actionCode>659111111111</req:actionCode>
<req:Attachment>
<req:IsMTOMAttachmentContent>true</req:IsMTOMAttachmentContent>
<req:RequestDescription>
<req:IsUnstructuredFormat>false</req:IsUnstructuredFormat>
<req:IsZippedPacket>true</req:IsZippedPacket>
<req:fileName>request.xml</req:fileName>
</req:RequestDescription>
<req:Statement>
<req:IsUnstructuredFormat>false</req:IsUnstructuredFormat>
<req:IsZippedPacket>true</req:IsZippedPacket>
<req:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml</req:fileName>
</req:Statement>
<req:File>
<req:IsUnstructuredFormat>true</req:IsUnstructuredFormat>
<req:IsZippedPacket>true</req:IsZippedPacket>
<req:fileName>a768d964-baf2-4298-8b74-86269d64efe6.xml.sig</req:fileName>
</req:File>
<req:File>
<req:IsUnstructuredFormat>true</req:IsUnstructuredFormat>
<req:IsZippedPacket>true</req:IsZippedPacket>
<req:fileName>request.xml.sig</req:fileName>
</req:File>
</req:Attachment>
</req:Request>
</MessagePrimaryContent>
<ns2:BusinessProcessMetadata/>
<ns2:TestMessage/>
</ns2:SenderProvidedRequestData>
<ns2:CallerInformationSystemSignature>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<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="#SIGNED_BY_CALLER">
<ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:Transform Algorithm="urn://smev-gov-ru/xmldsig/transform"/></ds:Transforms>
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<ds:DigestValue>H3MVRVT63GRLYzIiprtZYqp83hH7iVsaBG9oN+YPBPA=</ds:DigestValue></ds:Reference></ds:SignedInfo>
<ds:SignatureValue>zNr+FfFWFWnfFDSS2Zhflmc5As9BZmWDRTWv/8RbkLznp/I+7FRhcqi5WSsztM8wKp8exRg8xSXC4XleaEqk2w==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>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</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</ns2:CallerInformationSystemSignature>
</ns2:SendRequestRequest>
Проверку на Технологическом портале пример проходит. По образу и подобию формирую часть для подписи (сразу в канонической форме), считаю хэш - сходится. Потом встраиваю то, что подписал в собственно XML-посылку, добавляю часть CallerInformationSystemSignature, отправляю... И получаю ошибку. Причем, если в мою посылку вставить подпись из образцовой посылки, то проверка на портале проходит. Значит с каноникализацией и хэшем точно все в порядке. Порядок подписи следующий: Код:
CryptAcquireContextW( &hProv, CertContName.c_str(), NULL, PROV_GOST_2012_256, 0 );
CryptCreateHash(hProv, CALG_GR3411_2012_256, 0, 0, &hHash);
CryptHashData(hHash, (BYTE*)buf, blen, 0);
CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0);
sLastHash = base64(rgbHash, cbHash, &hblen);
CryptSignHashW(hHash, AT_KEYEXCHANGE, NULL, 0, NULL, &dwSigLen);
pbSignature = (BYTE *)malloc(dwSigLen);
pbSignRev = (BYTE *)malloc(dwSigLen);
CryptSignHashW(hHash, AT_KEYEXCHANGE, NULL, 0, pbSignature, &dwSigLen);
CryptImportKey(hProv, pbKeyBlob, dwBlobLen, 0, 0, &hPubKey);
CryptVerifySignatureW(hHash, pbSignature, dwSigLen, hPubKey, NULL, 0);
for (DWORD i=0;i<dwSigLen;i++){
pbSignRev[i] = pbSignature[dwSigLen-i-1];
};
sSign = base64(pbSignature, dwSigLen, &hblen);
sRevSign = base64(pbSignRev, dwSigLen, &hblen);
cout << "Signature " << sSign << endl;
cout << byte_to_upp_string(pbSignature, dwSigLen) << endl;
cout << "Reverse Sign " << sRevSign << endl;
cout << byte_to_upp_string(pbSignRev, dwSigLen) << endl;
Считал значения по-умолчанию для провайдера и ключа: PP_HASHOID 1.2.643.2.2.30.1 szOID_GostR3411_94_CryptoProParamSet Узел замены функции хэширования по умолчанию, вариант "Верба-О" PP_CIPHEROID 1.2.643.7.1.2.5.1.1 szOID_Gost28147_89_TC26_Z_ParamSet Узел замены алгоритма шифрования, вариант ТК26 Z PP_SIGNATUREOID 1.2.643.2.2.35.1 szOID_GostR3410_2001_CryptoPro_A_ParamSet Параметры a, b, p, q, (x,y) цифровой подписи и алгоритма Диффи-Хеллмана на базе алгоритма ГОСТ Р 34.10-2001, вариант криптопровайдера KP_HASHOID 1.2.643.7.1.1.2.2 szOID_CP_GOST_R3411_12_256 Функция хэширования ГОСТ Р 34.11-2012, длина выхода 256 бит KP_CIPHEROID 1.2.643.7.1.2.5.1.1 szOID_Gost28147_89_TC26_Z_ParamSet Узел замены алгоритма шифрования, вариант ТК26 Z Может их надо поменять на что-либо другое? Направьте или ткните носом, что я делаю не так? PS. Пример прямой и развернутой подписи в base64 и массивом Signature IkIxvJmHDVUe6WgQsJUg6wMx81EByTpfDf2kPEjlVNeDAjN6e3Xnd3sVgNzmXti2QgtTt7U25SKXsf60Sm4s5g== 224231BC99870D551EE96810B09520EB0331F35101C93A5F0DFDA43C48E554D78302337A7B75E7777B1580DCE65ED8B6420B53B7B536E52297B1FEB44A6E2CE6 Reverse Sign 5ixuSrT+sZci5Ta1t1MLQrbYXubcgBV7d+d1e3ozAoPXVOVIPKT9DV86yQFR8zED6yCVsBBo6R5VDYeZvDFCIg== E62C6E4AB4FEB19722E536B5B7530B42B6D85EE6DC80157B77E7757B7A330283D754E5483CA4FD0D5F3AC90151F33103EB2095B01068E91E550D8799BC314222 Отредактировано пользователем 5 октября 2020 г. 21:06:52(UTC)
| Причина: Не указана
|