2010-12-13 3 views
3

Хостинг сервер просто привычка выполнять:Есть ли способ цифровой подписи документа на хосте Medieval?

SignedXml.ComputeSignature(); 

Я думал FromXml и ToXml методы требуется полное доверие. Но это стало неожиданностью. Теперь невозможно подписать документ в цифровом виде.

На поиск в сети я нашел это: Using RSA Public Key Encryption in a Shared Web Hosting Environment

Любой используемый это раньше или какой-либо другой выход?

+0

Я только что проверил EZRSA (ваша ссылка на CodeProject), и она отлично работала для того, что я намеревался сделать. Однако мне пришлось добавить поддержку SHA256, которая не была предоставлена. Я внесла измененный исходный код обратно в Paul Sanders (большое спасибо ему). –

ответ

1

В конечном итоге мне удалось разработать систему онлайн-активации с использованием API безопасности Bounty Castle.

Существует не прямой метод, но базовый API может использоваться для создания цифровой подписи.

0

Авторы статьи в основном изобретают колесо, получая разные части вместе, чтобы получить какой-то рабочий код. Хотя их подход должен работать, и вы можете сами придумать какой-то подобный подход (возьмите код здесь и там и попытайтесь заставить его работать), они подтверждают (в истории), что были исправлены ошибки, и я предполагаю, что может быть больше ошибок там.

JFYI: мы предлагаем XML security components, которые работают в ограниченных средах, потому что у нас есть весь код, написанный нами и включенный в наши сборки.

+1

Спасибо, но цена просто не подходит мне прямо сейчас. –

+0

@ Убедитесь, что вы проверили цену пакета XMLBlackbox отдельно - это вполне разумно. –

1

Я знаю, что этот пост старый, но, может быть, кто-то найдет его полезным: Решение работает с ASP .NET 3.5 в среде доверия:

private XmlDocument GetSignedDoc(XmlDocument doc) 
{ 
     X509Certificate2 certificate = null; 
        try 
        { 
         certificate = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + licenceFile, licenceFilePass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable); 

         if (certificate == null) 
          throw new Exception("The certificate i 

s null!!!"); 
       } 
       catch (Exception ex) 
       { 
        exception += "X509Certificate2 fail! Did not get certificate " + AppDomain.CurrentDomain.BaseDirectory + licenceFile; 
        exception += FormatException(ex); 
        goto SetError; 
       } 
      RSACryptoServiceProvider myRSASigner = null; 

      try 
      { 
       myRSASigner = (RSACryptoServiceProvider)certificate.PrivateKey; 

       if (myRSASigner == null) 
       { 
        throw new Exception("No valid cert was found"); 
       } 


        doc = SignXmlFile(doc, myRSASigner); 

      catch (Exception ex) 
       { 
        exception += "SignXmlFile failed"; 
        exception += FormatException(ex); 
        goto SetError; 
       } 

}

private static XmlDocument SignXmlFile(XmlDocument doc, RSACryptoServiceProvider myRSA) 
      { 
       byte[] sign_this = Encoding.UTF8.GetBytes(doc.InnerXml); 
       byte[] signature = myRSA.SignData(sign_this, new SHA1CryptoServiceProvider()); 
       string base64_string = Convert.ToBase64String(signature); 

       XmlElement Signature = doc.CreateElement("Signature"); 
       Signature.AppendChild(doc.CreateTextNode(base64_string)); 
       doc.DocumentElement.AppendChild(doc.ImportNode(Signature, true)); 

       return doc; 
      } 
Смежные вопросы