Есть ли способ подписать документ цифровой подписью на хостинге Medium Trust? - PullRequest
3 голосов
/ 13 декабря 2010

Хост-сервер просто не будет выполняться:

SignedXml.ComputeSignature();

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

При поиске в сети я нашел это: Использование шифрования с открытым ключом RSA в среде общего веб-хостинга

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

Ответы [ 3 ]

1 голос
/ 30 декабря 2011

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

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

1 голос
/ 07 марта 2013

Я знаю, что этот пост старый, но, возможно, кто-то найдет его полезным: Решение работает с 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;
            }
0 голосов
/ 13 декабря 2010

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

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

...