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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline blackdoc  
#1 Оставлено : 10 июля 2025 г. 15:23:46(UTC)
blackdoc

Статус: Новичок

Группы: Участники
Зарегистрирован: 02.07.2025(UTC)
Сообщений: 3

Доброго времени суток!
Столкнулся с проблемой подписи части xml файла при интеграции с ФСС.

Нужно подписать вот этот xml фрагмент:

Код:
<hospitalBreach xmlns:ns11="http://www.fss.ru/integration/types/eln/v01" wsu:Id="${actorUri}">
<hospitalBreachCode xmlns="http://www.fss.ru/integration/types/eln/v01">${hospitalBreachCode}</hospitalBreachCode>
<hospitalBreachDt xmlns="http://www.fss.ru/integration/types/eln/v01">${hospitalBreachDt}</hospitalBreachDt>
</hospitalBreach>


После отправки, ФСС выдает ошибку подпись неверна. Полученный файл не проходит проверку валидации на сайте. https://dss.cryptopro.ru/verify/#/signature

Если убрать ссылку на ns11, и подписать

Код:
<hospitalBreach xmlns="http://www.fss.ru/integration/types/eln/v01" wsu:Id="${actorUri}">
<hospitalBreachCode xmlns="http://www.fss.ru/integration/types/eln/v01">${hospitalBreachCode}</hospitalBreachCode>
<hospitalBreachDt xmlns="http://www.fss.ru/integration/types/eln/v01">${hospitalBreachDt}</hospitalBreachDt>
</hospitalBreach>

валидацию проходит, все ОК. Но ФСС не принимает, ссылаясь на неправильные значение в hospitalBreach, ошибка XDS схемы.

Вопрос почему в первом случаи возникает ошибка подписи?

Спасибо за любую информацию.

Отредактировано пользователем 10 июля 2025 г. 16:36:11(UTC)  | Причина: неправильно предоставил xml данные

Offline Новожилова Елена  
#2 Оставлено : 10 июля 2025 г. 17:06:50(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 930
Женщина
Откуда: Крипто-Про

Поблагодарили: 105 раз в 98 постах
Здравствуйте! А каким способом создавали подпись?
Offline blackdoc  
#3 Оставлено : 10 июля 2025 г. 17:40:44(UTC)
blackdoc

Статус: Новичок

Группы: Участники
Зарегистрирован: 02.07.2025(UTC)
Сообщений: 3

Автор: Новожилова Елена Перейти к цитате
Здравствуйте! А каким способом создавали подпись?


Добрый день!

Вот функция для подписания части документа:

Код:
 // Инициализация плагина
        await window.cadesplugin_async;
        const cadesplugin = window.cadesplugin;

        const cert = await getCert(thumbprint, cadesplugin);

        let certPerson = await getCert(forSign.returnDateLpu.ecp[0], cadesplugin);
        let actorUri = `ELN_${eln}_${forSign.hospitalBreach.pc[0]}_doc`; // для председателя ВК _vk
        let signedPersonXML = await createSignedXmlTemplateAnotherPerson(actorUri, forSign.hospitalBreach.xml[0], certPerson, cadesplugin);
        let match = signedPersonXML.match(/<wsse:Security\b[^>]*>([\s\S]*?)<\/wsse:Security>/);



Код:

async function createSignedXmlTemplateAnotherPerson(actorUri, xmlContent, cert, cadesplugin) {

    let b64cert = await cert.Export(cadesplugin.CADESCOM_ENCODE_BASE64);
    b64cert = b64cert.replace(/[\r\n]/g, '');

    let xmlToSign = `<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="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"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" signAlgorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256">
    <soapenv:Header>
    <wsse:Security xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" S:actor="http://eln.fss.ru/actor/doc/${actorUri}">
        <wsse:BinarySecurityToken
            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="http://eln.fss.ru/actor/doc/${actorUri}">${b64cert}</wsse:BinarySecurityToken>
        <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/>
                <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
                <Reference URI="#${actorUri}">
                    <Transforms>
                        <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/>
                    </Transforms>
                    <DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
                    <DigestValue></DigestValue>
                </Reference>
            </SignedInfo>
            <SignatureValue></SignatureValue>
            <KeyInfo>
                <wsse:SecurityTokenReference>
                    <wsse:Reference URI="#http://eln.fss.ru/actor/doc/${actorUri}"
                        ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
                </wsse:SecurityTokenReference>
            </KeyInfo>
        </Signature>
    </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
${xmlContent}
    </soapenv:Body>
</soapenv:Envelope>`;

    console.log(xmlToSign);

    const signer = await cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
    await signer.propset_Certificate(cert);
    await signer.propset_CheckCertificate(true);

    const signedXML = await cadesplugin.CreateObjectAsync("CAdESCOM.SignedXML");
    await signedXML.propset_Content(xmlToSign);
    await signedXML.propset_SignatureType(cadesplugin.CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE);

    try {
        let signature = await signedXML.Sign(signer);

        updateStatus("XML подписан", 'pending');
        return signature;
    } catch (signError) {
        updateStatus("Ошибка при подписи: " + signError.message, 'error');
        if (cadesplugin.getLastError) {
            updateStatus("Детали ошибки: " + cadesplugin.getLastError(signError), 'error');
        }
        throw signError;
    }
}


Код:
Offline blackdoc  
#4 Оставлено : 10 июля 2025 г. 23:49:23(UTC)
blackdoc

Статус: Новичок

Группы: Участники
Зарегистрирован: 02.07.2025(UTC)
Сообщений: 3

примерно со 300ой попытки подобрал
может кому полезно будет, запрос на закрытие должен иметь вид

Код:
<hospitalBreach xmlns="http://www.fss.ru/integration/types/eln/mo/v01" xmlns:ns11="http://www.fss.ru/integration/types/eln/v01" wsu:Id="ELN_920000193850_1_doc">
    <hospitalBreachCode xmlns="http://www.fss.ru/integration/types/eln/v01">24</hospitalBreachCode>
    <hospitalBreachDt xmlns="http://www.fss.ru/integration/types/eln/v01">2025-07-10</hospitalBreachDt>
</hospitalBreach>


в инструкции запрос в виде:


Код:
<hospitalBreach xmlns:ns11="http://www.fss.ru/integration/types/eln/v01" wsu:Id="ELN_920000193850_1_doc">
    <hospitalBreachCode xmlns="http://www.fss.ru/integration/types/eln/v01">24</hospitalBreachCode>
    <hospitalBreachDt xmlns="http://www.fss.ru/integration/types/eln/v01">2025-07-10</hospitalBreachDt>
</hospitalBreach>

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