Есть ли способ в цифровом подписании документа на среднем доверительном хостинге?
-
09-10-2019 - |
Вопрос
Сервер хостинга просто не выполнит:
SignedXml.ComputeSignature();
Я думал, что Fromxml и Toxml методы требовали полного доверия. Но это пришло как удивление. Теперь невозможно цифровое подписать любой документ.
При поиске сети я нашел это:Использование шифрования открытого ключа RSA в общей среде веб-хостинга
Кто-нибудь использовал это до или любым другим выходом?
Решение
В конце концов, я был в конечном итоге разработать систему онлайн-активации, используя Замок на Bounty Безопасность API.
Не существует прямого метода, но базовый API можно использовать для создания цифровой подписи.
Другие советы
Я знаю, что этот пост старый, но, может быть, кто-то найдет его полезным: решение работает с 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;
}
Авторы статьи в основном изобретают колесо, получая разные части вместе, чтобы получить какой-то рабочий код. В то время как их подход должен работать, и вы можете изобретать какой-то похожий подход самостоятельно (взять код здесь и там и попытаться сделать его работать), они подтверждают (в истории), что были ошибки, которые были исправлены, и я предполагаю, что могут быть больше ошибок там.
JFYI: мы предлагаем Компоненты безопасности XML которые работают в ограниченных средах, потому что у нас все код написаны и включены в наши сборки.