Статус: Новичок
Группы: Участники
Зарегистрирован: 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 данные
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 930  Откуда: Крипто-Про Поблагодарили: 105 раз в 98 постах
|
Здравствуйте! А каким способом создавали подпись?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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;
}
}
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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>
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close