Подпись документов ФТС
Примечание
Подпись документов поддерживается начиная с версии КриптоПро DSS 2.0.4050.
Настройка Сервиса Подписи
XPath с поддержкой пространств имён:
Add-DssSignServerTransformPlugin -DisplayName SignServer -Assembly "C:\Program Files\Crypto Pro\DSS\SignServer\rest\bin\CryptoPro.DSS.Common.Cryptography.dll" -Classname CryptoPro.DSS.Common.Cryptography.Xml.XmlDsigXPathTransformWithNamespaces -Identifiers "http://www.w3.org/TR/1999/REC-xpath-19991116"
Преобразование ФТС:
Add-DssSignServerTransformPlugin -DisplayName SignServer -Assembly CryptoPro.DSS.Xml.Transforms.dll -Classname CryptoPro.DSS.Xml.Transforms.XmlFssTransform -Identifiers "urn:xml-dsig:transformation:v1.1"
Шаблон узла подписи
Подпись документов ФТС выполняется как XML-подпись по шаблону. Подписываемый документ должен быть предварительно подготовлен. В документ должен быть добавлен шаблон подписи - узел Signature.
В шаблоне узла подписи обязано присутствовать преобразование urn:xml-dsig:transformation:v1.1
.
Так же преобразование должно быть указано в качестве метода каноникализации.
Наличие других преобразований зависит от специфики размещения узла подписи в XML документе и иных факторов.
В примере ниже добавлено XPath-преобразование not(ancestor-or-self::dsig:Signature)
для исключения узла подписи
из расчёта хэш значения. Что было обусловлено невозможностью использовать стандартное преобразование
http://www.w3.org/2000/09/xmldsig#enveloped-signature
.
В шаблоне обязаны присутствовать узлы KeyInfo -> X509Data -> X509Certificate. Узел X509Certificate должен быть самозакрывающимся.
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo xmlns:n1="http://www.w3.org/2000/09/xmldsig#">
<dsig:CanonicalizationMethod Algorithm="urn:xml-dsig:transformation:v1.1"/>
<dsig:SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/>
<dsig:Reference URI="#KeyInfo">
<dsig:Transforms>
<dsig:Transform Algorithm="urn:xml-dsig:transformation:v1.1"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<dsig:DigestValue/>
</dsig:Reference>
<dsig:Reference URI="">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<dsig:XPath>not(ancestor-or-self::dsig:Signature)</dsig:XPath>
</dsig:Transform>
<dsig:Transform Algorithm="urn:xml-dsig:transformation:v1.1"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
<dsig:DigestValue/>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue/>
<dsig:KeyInfo Id="KeyInfo">
<dsig:X509Data>
<dsig:X509Certificate/>
</dsig:X509Data>
</dsig:KeyInfo>
</dsig:Signature>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="urn:xml-dsig:transformation:v1.1">
</CanonicalizationMethod>
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256">
</SignatureMethod>
<Reference URI="#KeyInfo">
<Transforms>
<Transform Algorithm="urn:xml-dsig:transformation:v1.1"></Transform>
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"></DigestMethod>
<DigestValue/>
</Reference>
<Reference URI="#Object">
<Transforms>
<Transform Algorithm="urn:xml-dsig:transformation:v1.1">
</Transform>
</Transforms>
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"></DigestMethod>
<DigestValue/>
</Reference>
</SignedInfo>
<SignatureValue/>
<KeyInfo Id="KeyInfo">
<X509Data>
<X509Certificate/>
</X509Data>
</KeyInfo>
<Object Id="Object">
<TransportHeader xmlns="urn:customs.ru:Envelope:TransportHeader:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ProcessingDateTime>2023-06-24T12:12:12+03:00</ProcessingDateTime>
<MessageChecked>true</MessageChecked>
<ContractConcluded>true</ContractConcluded>
<EnvelopeID>7824DDDC-9804-47E3-8E72-2885427C8104</EnvelopeID>
</TransportHeader>
</Object>
</Signature>
Параметры подписи
В запросе подписи ФТС документа /signature должны быть указаны следующие параметры:
FTSSignature
= trueXMLDSigType
= XMLTemplate
Пример запроса:
{
"BinaryData": [
{
"RefId": "{{doc_id}}"
}
],
"Signature": {
"CertificateId": "{{sign_cert_id}}",
"Type": "XMLDSig",
"Parameters": {
"XMLDSigType": "XMLTemplate",
"FTSSignature": "true"
}
}
}