Подписать XML ключом и сертификатом
Я хочу подписать свои xml-файлы, чтобы лица, которым я их предоставляю, могли быть уверены, что они не были подделаны, и я гарантирую, что это XML-файлы от меня. Я использую xmlseclib (PHP, который, кажется, работает). У меня есть сом вопросы, я надеюсь, что вы могли бы ответить для меня:
В библиотеку я отправляю закрытый ключ RSA и сертификат. Как мне обращаться с сертификатом? Если я использую сертификат, купленный для https-сервера, он действителен только в течение 1 года? Я хочу, чтобы мои подписанные документы действовали вечно. Должен ли я создать свой собственный сертификат? Как мне это сделать в openssl?
Может кто-нибудь дать мне обзор того, что входит в ds:SignatureValue, ds:DigestValue и ds:X509Certificate и как они используются?
Мой автоматически добавленный тег:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml- exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference>
<ds:Transforms>
<ds:TransformAlgorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>WHAT_GOES_HERE</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>WHAT_GOES_HERE</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>WHAT_GOES_HERE</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
Спасибо
1 ответ
Сертификат должен быть включен в поле № 3. Это может помочь в создании надежной цепочки сертификатов, чтобы получатель мог определить, действительна ли подпись.
Если подпись остается в силе, зависит от лица, проводящего проверку. Обычно вы бы не использовали сертификат SSL для подписи данных. Установление еще одного доверительного отношения, по сути, является PKI и выходит за рамки Stackru.
Поле #1 просто содержит безопасный хеш в кодировке base64 для данных, которые подписаны. Может присутствовать несколько хешей.
Поле № 2 является подписью над SignedInfo
часть. Подпись состоит из другого безопасного хеша над SignedInfo
и асимметричная функция, такая как модульное возведение в степень для RSA. Он в двоичном формате, поэтому он будет также закодирован в формате base64.