Как вставить мою подпись сертификата X509 в XML - PullRequest
1 голос
/ 27 июня 2019

У меня есть xml с данными внутри, но для отправки на сервер мне нужен сертификат x509 (который я установил на своей машине). Вопрос в том, что мне нужно вставить его в том же формате, что и в приведенном ниже примере, но я новичок в этом и, глядя на детали своего сертификата, я действительно не понимал, что делать.

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
        <ds:Reference URI="#assinar">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
                <ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
                    <ds:XPath>not(ancestor-or-self::ds:Signature)</ds:XPath>
                </ds:Transform>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue></ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>
    </ds:SignatureValue>
    <ds:KeyInfo>
        <ds:X509Data>
            <ds:X509Certificate>
            </ds:X509Certificate>
        </ds:X509Data>
        <ds:KeyValue>
            <ds:RSAKeyValue>
                <ds:Modulus>
                </ds:Modulus>
                <ds:Exponent>AQAB</ds:Exponent>
            </ds:RSAKeyValue>
        </ds:KeyValue>
    </ds:KeyInfo>
</ds:Signature>

в моем примере поля <ds:Modulus>, <ds:X509Certificate>, <ds:SignatureValue>, <ds:DigestValue> имеют формат ASCII (я полагаю), а мои - в шестнадцатеричном.

Нужно ли конвертировать? отправить на какой-нибудь URL и получить ответ?

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

https://www.w3.org/TR/xmldsig-core1/#sec-X509Data определяет ds: X509Certificate как кодировку base64 сертификата X.509.

Аналогично, https://www.w3.org/TR/xmldsig-core1/#sec-RSAKeyValue описывает модуль и экспоненту типа CryptoBinary.

https://www.w3.org/TR/xmldsig-core1/#sec-CryptoBinary говорит, что правильное кодирование заключается в преобразовании значения в байтовый массив, удалении любых начальных байтов нулевого значения, а затем в base64 его кодирование.По опыту могу сказать, что не все платформы удаляют ведущие нули, и не все платформы поддерживают чтение значения, если удаляются ведущие нули.Таким образом, вы можете определить, насколько спецификации вы хотите быть здесь.

В отсутствие какого-либо языкового тега или кода лучший ответ здесь заключается в том, что все ваши ответы определены в спецификации XML-подписи: https://www.w3.org/TR/xmldsig-core1/.

0 голосов
/ 27 июня 2019

Вы можете попробовать base64-кодирование двоичных данных, вот как это будет сделано с вложением электронной почты. Ваш провайдер API не показывает образцы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...