2010-12-13 28 views
3

Le serveur d'hébergement juste execute habitude:Existe-t-il un moyen de signer numériquement un document sur un hébergement Medium Trust?

SignedXml.ComputeSignature(); 

Je pensais que les méthodes fromXML et toXml nécessaires confiance totale. Mais cela a été une surprise. Maintenant, il est impossible de signer numériquement un document.

sur la recherche sur le net, je trouve ceci: Using RSA Public Key Encryption in a Shared Web Hosting Environment

Toute personne a utilisé ce avant ou tout autre moyen de sortir?

+0

Je viens de vérifier EZRSA (votre lien vers CodeProject) et ça a bien marché pour ce que j'avais l'intention de faire. Cependant, j'ai dû ajouter le support pour SHA256, qui n'a pas été fourni. J'ai remis le code source modifié à Paul Sanders (merci à lui). –

Répondre

1

J'ai finalement pu développer le système d'activation en ligne en utilisant les API de sécurité Bounty Castle.

Il n'existe pas de méthode directe disponible, mais l'API de base peut être utilisée pour générer une signature numérique.

0

Les auteurs de l'article réinventent fondamentalement la roue en assemblant différentes pièces afin d'obtenir un code fonctionnel. Alors que leur approche devrait fonctionner et que vous pourriez inventer une approche similaire (prenez du code ici et là et essayez de le faire fonctionner), ils confirment (dans l'histoire) qu'il y avait des bugs corrigés et je suppose qu'il y a plus de bugs Là.

JFYI: nous offrons XML security components qui fonctionnent dans des environnements limités car nous avons tout le code écrit nous-mêmes et inclus dans nos assemblages.

+1

Merci, mais le prix ne me convient tout simplement pas. –

+0

@Assurez-vous que vous avez vérifié le prix du paquet XMLBlackbox individuellement - c'est assez raisonnable. –

1

Je sais que ce poste est vieux, mais peut-être quelqu'un trouvera utile: La solution fonctionne avec ASP .NET 3.5 en fiducie moyen:

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; 
      }