托管服务器只是不会执行:有没有办法在Medium Trust托管上对文档进行数字签名?
SignedXml.ComputeSignature();
我认为需要fromXML和方法toxml用于完全信任。但这令人惊讶。现在不可能对任何文档进行数字签名。
上搜索,我发现这个网: Using RSA Public Key Encryption in a Shared Web Hosting Environment
任何人使用此之前或任何其他方式?
托管服务器只是不会执行:有没有办法在Medium Trust托管上对文档进行数字签名?
SignedXml.ComputeSignature();
我认为需要fromXML和方法toxml用于完全信任。但这令人惊讶。现在不可能对任何文档进行数字签名。
上搜索,我发现这个网: Using RSA Public Key Encryption in a Shared Web Hosting Environment
任何人使用此之前或任何其他方式?
我最终能开发利用Bounty Castle安全API的在线激活系统。
没有可用的一个直接的方法,但基本的API可以被用于产生一个数字签名。
文章的作者是通过以获得一些工作的代码变得不同拼凑基本上重新发明轮子。虽然他们的方法应该工作,你可以自己发明一些类似的方法(在这里和那里采取一些代码,并试图使其工作),他们确认(在历史上),有已修复的错误,我以为可以有更多的bug那里。
JFYI:我们提供XML security components在有限的环境,因为我们都写的代码自己,包括在我们的组件,其工作。
谢谢,但价格现在不适合我。 – 2010-12-13 18:58:07
@Aseem确保您已经单独检查了XMLBlackbox包的价格 - 这是非常合理的。 – 2010-12-13 19:27:45
我知道这个职位是旧的,但也许有人会发现它有用:
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;
}
我刚刚检查: 解决方案与ASP .NET 3.5中的中等信任的工作原理出EZRSA(你的CodeProject的链接),它为我打算做的很好。但是,我不得不添加对SHA256的支持,而这是没有提供的。我将修改过的源代码贡献给Paul Sanders(非常感谢他)。 – 2011-03-14 21:34:48