Tag: xml signature

如何在C#中使用XmlDsigC14NTransform类

我试图通过使用c#.net Framework 2.0的System.Security.Cryptography.Xml.XMLDsigC14nTransform类来规范化xml节点。 该实例需要三种不同的输入类型:NodeList,Stream和XMLDocument。 我尝试使用所有这些输入类型的转换,但我得到不同的结果。 我真正想要做的是规范化单个节点,但正如您在输出文件中看到的那样,输出不包含任何内部xml。 任何有关规范化XML节点的正确方法的建议都非常受欢迎。 最好, string path = @”D:\Test\xml imza\sign.xml”; XmlDocument xDoc = new XmlDocument(); xDoc.PreserveWhitespace = true; using (FileStream fs = new FileStream(path, FileMode.Open)) { xDoc.Load(fs); } // canon node list XmlNodeList nodeList = xDoc.SelectNodes(“//Child1″); XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); transform.LoadInput(nodeList); MemoryStream ms = (MemoryStream)transform.GetOutput(typeof(Stream)); File.WriteAllBytes(@”D:\Test\xml imza\child1.xml”, ms.ToArray()); // canon XMLDocument […]

使用x509证书签署xml文档

每次我尝试发送签名的XML时,Web服务validation程序都会拒绝它。 为了签署文档,我刚刚调整了Microsoft提供的示例代码: http://msdn.microsoft.com/es-es/library/ms229745(v=vs.110).aspx 我的实施: public static XmlDocument FirmarXML(XmlDocument xmlDoc) { try { X509Certificate2 myCert = null; var store = new X509Store(StoreLocation.CurrentUser); //StoreLocation.LocalMachine fails too store.Open(OpenFlags.ReadOnly); var certificates = store.Certificates; foreach (var certificate in certificates) { if (certificate.Subject.Contains(“xxx”)) { myCert = certificate; break; } } if (myCert != null) { RSA rsaKey = ((RSA)myCert.PrivateKey); // Sign […]

SignedXml checksignature返回false

我在这里看了关于这个问题的其他post,但似乎没有一个能解决我的情况。 我一直在尝试validation上周的SAML断言,我有2个客户端已经发送给我SAML但我无法validation它。 主要过程是我们得到一个base64编码的断言,我解码它。 使用PreserveWhitespace = true将其加载到XmlDocment中。 validation方法是 public static bool Verify(X509Certificate2 cert, XmlElement xmlElement, SignedXml signedXml) { bool flag; try { KeyInfo keyInfo = new KeyInfo(); var clause = new KeyInfoX509Data(cert); keyInfo.AddClause(clause); XmlElement signatureElement = GetSignatureElement(xmlElement); if (signatureElement == null) { string message = “The XML does not contain a signature.”; throw new SAMLSignatureException(message); } […]

如何将存储在HSM中的私钥转换为C#中的SignedXml.SigningKey

我正在尝试使用存储在HSM中的证书来实现XML签名的一些演示。 我在这个链接中找到了一个有趣的例子: 使用X509Certificate2签署XML文档并使用PKCS11Interop包装器将其修改为使用HSM内部的证书和密钥。 但任何人都可以给我一个建议或示例, 将ObjectHandle privateKey从HSM转换为SignedXML.SigningKey private static void SignXmlWithCertificate(XmlDocument xmlDoc, X509Certificate2 cert, Session session, String alias) { SignedXml signedXml = new SignedXml(xmlDoc); List template = new List(); template.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY)); template.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_RSA)); template.Add(new ObjectAttribute(CKA.CKA_LABEL, alias)); List foundObjects = session.FindAllObjects(template); ObjectHandle privateKey = foundObjects[0]; signedXml.SigningKey = privateKey; //Here is where I stuck. 在上面的外部链接示例中。 他们使用组合私钥的证书。 […]

XmlElement的Xml签名无法validation

我提前为相当冗长的代码块道歉,但这是我可以生成的最小的可编译示例。 我已经省略了原始代码中的所有错误检查。 我正在使用Visual Studio 2012和.NET 4.5,虽然这对4.5来说并不新鲜,但它应该适用于任何版本。 我正在尝试签署XML文档的元素以防止它们被篡改。 我不想保护整个文档,但只保留某些元素。 也许甚至不同的元素与不同的键。 但是,当我签署三个示例元素并尝试validation它们时,第一个元素总是validation,另外两个元素失败。 更糟糕的是,如果我在签名后修改它,第一个甚至会成功。 我已经google了很多,阅读了很多教程,甚至在这里问了一个理论问题 ,但我不知道我做错了什么。 谁能发现我的错误? 注意:我很乐意为解决这个问题的人提供星期五问题的同样赏金。 证书是通过执行: “C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Bin \ makecert”-r -pe -n“CN = XMLDSIG_Test”-b 01/01/2013 -e 01/01/2014 -sky签约 – 我的 Test xml文件是: 签名和validation的代码: namespace SOExample { using System; using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.Xml; using System.Xml; public static […]

如何从证书存储中获取X509Certificate并生成xml签名数据?

如何从证书存储中获取X509Certificate,然后在.net C#中生成XML SignatureData?

“清单XML签名无效”

操作系统:安装了.NET 4.5的Visual Studio Pro 2012的Windows 7 64位。 我在Visual Studios中使用了Publish选项,并确保我单击了Sign the clickOnce清单并签署程序集。 它仍然无法在另一台计算机上运行,​​并且说我没有有效的XML签名。 我已粘贴下面的错误消息。 我还读过: 如何移动ClickOnce部署包 , 我是否必须签署ClickOnce清单? 。 VS2012 .NET 4.0 Clickonce VSTO CryptographicException:无法为提供的签名算法和其他几个算法创建SignatureDescription 。 我需要能够在.NET 4.0上部署我的程序,并且我无法访问另一个版本的Visual Studio。 提前致谢! 完成错误如下: PLATFORM VERSION INFO Windows:5.1.2600.196608(Win32NT)公共语言运行时:2.0.50727.3603 System.Deployment.dll:2.0.50727.3053(netfxsp.050727-3000)mscorwks.dll:2.0.50727.3603(GDR.050727-3600)dfdll。 dll:2.0.50727.3053(netfxsp.050727-3000)dfshim.dll:4.0.31106.0(Main.031106-0000) 来源部署url:file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application 错误摘要以下是错误摘要,这些错误的详细信息将在后面的日志中列出。 *激活C:\ Documents and Settings \ Administrator \ Desktop \ EatonWizard.application导致exception。 检测到以下失败消息:+文件中的exception读取清单:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application:清单可能无效或无法打开文件。 + Manifest XML签名无效。 无法为提供的签名算法创建+ […]

格式错误的参考元素

我试图将引用添加到我的安全标头,并遇到一个相当普遍的错误: 格式错误的参考元素 我尝试了以下类似的结果: 通过将元素的ID作为Reference对象的URI传入来引用文档中的元素。 通过LoadXml()方法将XmlElement对象传递给Reference 。 我正在使用此StackOverflowpost上找到的重载GetIdElement检索XmlElement引用。 当我传入一个空字符串作为URI , ComputeSignature()方法按预期工作。 但是,我需要添加最多3个对安全标头的引用。 更新#1 感谢这篇博文 ,我能够从中创建简化版本,我相信导致我的问题的是使用Namespace属性和前缀。 更新#2 看起来似乎元素的Id属性上的Namespace声明导致发生此错误。 更新#3 我想我有这个工作。 请参阅下面的回答post。 工作样本: 请注意,定义了命名空间的Id XAttribute不起作用; 而没有定义命名空间的Id XAttribute确实有效。 private void CreateSecurityAndTimestampXML(string fileName) { TimestampID = “TS-E” + GUID.NewGuid(); DateTime SecurityTimestampUTC = DateTime.UtcNow; XDocument xdoc = new XDocument( new XElement(wsse + “Security”, new XAttribute(XNamespace.Xmlns + “wsse”, wsse.NamespaceName), new XAttribute(XNamespace.Xmlns + […]

使用SignedXml类添加基于Id属性的引用时出现“格式错误的引用元素”

当有名称空间前缀时,无法通过Id属性签署元素: void Main() { var doc = new XmlDocument(); doc.LoadXml(“Zebra”); SignedXml signedXml = new SignedXml(doc); signedXml.SigningKey = new RSACryptoServiceProvider(); Reference reference = new Reference(“#_0”); signedXml.AddReference(reference); signedXml.ComputeSignature(); } ComputeSignature()将在这里失败’错误的参考元素’应如何做到这一点?