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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline lnkz  
#1 Оставлено : 20 октября 2011 г. 14:58:16(UTC)
lnkz

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

Группы: Участники
Зарегистрирован: 20.10.2011(UTC)
Сообщений: 4
Откуда: Москва

Используем КриптоПро 3.6 и последнюю версию Sharpei. На другой стороне стоит версия криптоПро 3.0

Подписываем xml, на выходе имеем подпись:
Код:
- <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
- <SignedInfo> 
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" /> 
- <Reference URI=""> 
  - <Transforms> 
    <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> 
    <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> 
  </Transforms> 
  <DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" /> 
  <DigestValue>D+7qSgXk2q3/HD+Bc3GUXzXAK3ZHBANW4Y/Q4xaQEVQ=</DigestValue> 
</Reference> 
</SignedInfo> 
<SignatureValue> подпись =</SignatureValue> 
- <KeyInfo> 
- <X509Data> 
  <X509>сертификат</X509Certificate> 
</X509Data> 
</KeyInfo> 
</Signature> 
</Message> 


с другой стороны, тот кто получает запрос. утверждает что запрос имеет не верную структуру xml и предлагает мне прислать подпись в таком виде:
Код:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
   <ds:CanonicalizationMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                   <ds:SignatureMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" />
    <ds:Reference xmlns:ds="http://www.w3.org/2000/09/xmldsig#" URI="">
      <ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
       <ds:Transform xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
       <ds:Transform xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" />
     </ds:Transforms>
     <ds:DigestMethod xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" />
     <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">8X2MUhIVzq1DM3uoUq9E0ibtmr9VpbRAmrCEsW7P7Cc=</ds:DigestValue>
   </ds:Reference>
 </ds:SignedInfo>
 <ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">подпись</ds:SignatureValue>
  <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <X509Data xmlns="http://www.w3.org/2000/09/xmldsig#">
     <X509Certificate>сертификат</X509Certificate>" +
   </X509Data>
 </ds:KeyInfo>
</ds:Signature>
</Message>


визуально отличие только в префиксе ds и в названии алгоритма подписи.
Подпись формируется стандартным методом, так же как в примере:

Код:
SignedXml signedXml = new SignedXml(doc);
                signedXml.SigningKey = cert.PrivateKey;
                Reference reference = new Reference();
                reference.Uri = "";

                reference.DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
                XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
             
                reference.AddTransform(env);
                XmlDsigC14NTransform c14 = new XmlDsigC14NTransform();
                reference.AddTransform(c14);
                
                signedXml.AddReference(reference);
                KeyInfo keyInfo = new KeyInfo();
                keyInfo.AddClause(new KeyInfoX509Data(cert));
                signedXml.KeyInfo = keyInfo;
                signedXml.ComputeSignature();


Это проблема совместимости? И как мне заставить шарпей формировать подпись с префиксами и нужным алгоритмом?

Offline Павел Смирнов  
#2 Оставлено : 20 октября 2011 г. 16:11:35(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Попробуйте добавить в код создания подписи:
Код:
signedXml.SignedInfo.SignatureMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3410UrlObsolete;
Техническую поддержку оказываем тут.
Наша база знаний.
Offline lnkz  
#3 Оставлено : 20 октября 2011 г. 17:08:30(UTC)
lnkz

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

Группы: Участники
Зарегистрирован: 20.10.2011(UTC)
Сообщений: 4
Откуда: Москва

Смирнов написал:
Попробуйте добавить в код создания подписи:
Код:
signedXml.SignedInfo.SignatureMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3410UrlObsolete;


спасибо. алгоритм теперь вроде совпадает.

а как быть с префиксами???
Offline Павел Смирнов  
#4 Оставлено : 20 октября 2011 г. 17:22:15(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
lnkz написал:
а как быть с префиксами???

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