Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Mishanki  
#1 Оставлено : 30 октября 2014 г. 18:12:19(UTC)
Mishanki

Статус: Участник

Группы: Участники
Зарегистрирован: 20.10.2014(UTC)
Сообщений: 16
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 3 раз
Здравствуйте!

Отправляю xml и получаю сообшение об ошибке ЭП.
Я даже не знаю где теперь искать ошибку. Возможно подскажите.

Пишу на php.

Хэш DigestValue:
Цитата:

/opt/cprocsp/bin/amd64/cryptcp -hash -dir /tmp/ -provtype 75 /tmp/some.txt
CryptCP 3.41 (c) "Crypto-Pro", 2002-2013.
Command prompt Utility for file signature and encryption.
Hash algorithm: GOST R 34.11-94
Folder '/tmp/':
/tmp/f.txt... OK.
[ReturnCode: 0]



Подпись SignatureValue:
Цитата:

/opt/cprocsp/bin/amd64/csptestf -keyset -sign GOST -in /tmp/f.txt -out /tmp/f2.txt.sig -container Interaktiv -keytype exchange
CSP (Type:75) v3.6.5365 KC1 Release Ver:3.6.7777 OS:Linux CPU:AMD64 FastCode:READY:SSSE3.
AcquireContext: OK. HCRYPTPROV: 28439587
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: "Interaktiv"
Exchange key is available. HCRYPTKEY: 0x1b4d663
Hash object created with alg: GOST 0x801E
The data buffer has been hashed.
Signature length 64 found.
Signature was done.
Output file (/tmp/f2.txt.sig) has been saved
Signature saved into file /tmp/f2.txt.sig

Keys in container:
exchange key
Total:
[ErrorCode: 0x00000000]



// Парсер xml
Код:
function parser ($xml) {

        $sign = new sign(); // класс вызова подписей
        $dom  = new DOMDocument('1.0', 'UTF-8');

        $dom->loadXML($xml);

        $Body = $dom->getElementsByTagName('Body')->item(0)->C14N();
        $dom->getElementsByTagName('DigestValue')->item(0)->nodeValue = $sign->fileHash($Body); // ХЭШ. Считываю из файла и сохраняю в b64

        $SignedInfo = $dom->getElementsByTagName('SignedInfo')->item(0)->C14N();
        $dom->getElementsByTagName('SignatureValue')->item(0)->nodeValue = $sign->fileSing($SignedInfo); // ПОДПИСАНИЕ. Считываю байткод из файла, переворачиваю строку и оборачиваю в b64

        return $dom->saveXML();

    }


Детали по SignatureValue: Сформированную подпись КриптоПРО CSP переворачиваем и заворачиваем в base64:
Код:
base64_encode(strrev($sign));


Body C14N для расчета хэша:
Код:
<S:Body xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-20"><ns5:getTaskTypes xmlns="http://smev.gosuslugi.ru/rev111111" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://baseTypes.border.webservices.kernel.sx.fms.ru" xmlns:ns4="http://www.w3.org/2004/08/xop/include" xmlns:ns5="http://v2_4_3.incomingRequests.webservices.kernel.sx.fms.ru"><Message><Sender><Code>FMS001001</Code><Name>ФМС России</Name></Sender><Recipient><Code>FMS001001</Code><Name>ФМС России</Name></Recipient><Originator><Code>FMS001001</Code><Name>ФМС России</Name></Originator><TypeCode>GSRV</TypeCode><Status>REQUEST</Status><Date>2013-08-26T16:29:53.304+04:00</Date><ExchangeType>3</ExchangeType><ServiceCode>10000000611</ServiceCode><CaseNumber>oWsI1lJE</CaseNumber><TestMsg>FMS control example</TestMsg></Message><MessageData><AppData><ns3:user><ns3:organization>10000001022</ns3:organization><ns3:person><ns3:id>4713967</ns3:id><ns3:firstName>Тест</ns3:firstName><ns3:secondName>Тестович</ns3:secondName><ns3:lastName>Тестов</ns3:lastName></ns3:person></ns3:user></AppData></MessageData></ns5:getTaskTypes></S:Body>


SignedInfo C14N для подписания:
Код:
<ds:SignedInfo xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></ds:SignatureMethod><ds:Reference URI="#id-20"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></ds:DigestMethod><ds:DigestValue>g7eF+/QXnT8eOEUQY1vLvtidJI2r/gnLJAjZOYo0UDY=</ds:DigestValue></ds:Reference></ds:SignedInfo>


Итого:
Код:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
                       S:actor="http://smev.gosuslugi.ru/actors/smev">
            <wsse:BinarySecurityToken
                xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
                ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
                wsu:Id="CertId-FCBC7CBD76712097E1137752019331328">
                             SomeX509
            </wsse:BinarySecurityToken>
            <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-19">
                <ds:SignedInfo>
                    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                    <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
                    <ds:Reference URI="#id-20">
                        <ds:Transforms>
                            <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                        </ds:Transforms>
                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
                        <ds:DigestValue>g7eF+/QXnT8eOEUQY1vLvtidJI2r/gnLJAjZOYo0UDY=</ds:DigestValue>
                    </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>
                    Ry8vRPCVdG5eeXH0TPJiHwd3uVL8bh4FJIC4bWhIvEfiunl4eioyiehjT8TVgrwuLbJAJGbBEVdUG3vnf2IX6A==
                </ds:SignatureValue>
                <ds:KeyInfo Id="KeyId-FCBC7CBD76712097E1137752019331329">
                    <wsse:SecurityTokenReference
                        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
                        wsu:Id="STRId-FCBC7CBD76712097E1137752019331330">
                        <wsse:Reference URI="#CertId-FCBC7CBD76712097E1137752019331328"
                                        ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
                    </wsse:SecurityTokenReference>
                </ds:KeyInfo>
            </ds:Signature>
        </wsse:Security>
    </S:Header>
    <S:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
            wsu:Id="id-20">
        <ns5:getTaskTypes xmlns="http://smev.gosuslugi.ru/rev111111" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#"
                          xmlns:ns3="http://baseTypes.border.webservices.kernel.sx.fms.ru"
                          xmlns:ns4="http://www.w3.org/2004/08/xop/include"
                          xmlns:ns5="http://v2_4_3.incomingRequests.webservices.kernel.sx.fms.ru">
            <Message>
                <Sender><Code>FMS001001</Code>
                    <Name>ФМС России</Name>
                </Sender>
                <Recipient><Code>FMS001001</Code>
                    <Name>ФМС России</Name>
                </Recipient>
                <Originator><Code>FMS001001</Code>
                    <Name>ФМС России</Name>
                </Originator>
                <TypeCode>GSRV</TypeCode>
                <Status>REQUEST</Status>
                <Date>2013-08-26T16:29:53.304+04:00</Date>
                <ExchangeType>3</ExchangeType>
                <ServiceCode>10000000611</ServiceCode>
                <CaseNumber>oWsI1lJE</CaseNumber>
                <TestMsg>FMS control example</TestMsg>
            </Message>
            <MessageData>
                <AppData>
                    <ns3:user>
                        <ns3:organization>10000001022</ns3:organization>
                        <ns3:person>
                            <ns3:id>4713967</ns3:id>
                            <ns3:firstName>Тест</ns3:firstName>
                            <ns3:secondName>Тестович</ns3:secondName>
                            <ns3:lastName>Тестов</ns3:lastName>
                        </ns3:person>
                    </ns3:user>
                </AppData>
            </MessageData>
        </ns5:getTaskTypes>
    </S:Body>
</S:Envelope>

Отредактировано пользователем 31 октября 2014 г. 11:05:42(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.