标签: xml-signature

XML签名:如何计算摘要值?

我有这样的XML

<?xml version="1.0" encoding="utf-8"?>
<foo>
  <bar>
    <value>A</value>
  </bar>
  <bar>
    <value>B</value>
  </bar>
  <baz>
    <value>C</value>
  </baz><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>WqpRWHxXA0YgH+p3Sxy6hRo1XIk=</DigestValue></Reference></SignedInfo><SignatureValue>EoRk/GhR4UA4D+8AzGPPkeim1dZrlSy88eF73n/T9Lpeq9IxoGRHNUA8FEwuDNJuz3IugC0n2RHQQpQajiYvhlY3XG+z742pgsdMfFE4Pddk4gF1T8CVS1rsF7bjX+FKT/c8B2/C8FNgmfkxDlB/ochtbRvuAGPQGtgJ3h/wjSg=</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIB8zCCAVygAwIBAgIQgfzbrIjhLL9FobStI2ub3zANBgkqhkiG9w0BAQQFADATMREwDwYDVQQDEwhUZXN0ZUFjbjAeFw0wMDAxMDEwMDAwMDBaFw0zNjAxMDEwMDAwMDBaMBMxETAPBgNVBAMTCFRlc3RlQWNuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO+yAZ8/qJbhSVH/+2wMmzix3jM/CExb6sTgaiPwe6ylcHgF45zeQDq06OSJZCSns34em/ULINZddDf8z0b9uk/2sOGr1pYqsunLLBvw2FkvWJQDkhx2SzCm8v4xGX2kyXNbjiY/K56oPOMjpayKoAFnnvk7p2iFAxNZK/6lpZ7wIDAQABo0gwRjBEBgNVHQEEPTA7gBCOOHcajwnATYZ0t6w7LVU0oRUwEzERMA8GA1UEAxMIVGVzdGVBY26CEIH826yI4Sy/RaG0rSNrm98wDQYJKoZIhvcNAQEEBQADgYEABL9Qhi6f1Z+/t8oKXBQFx3UUsNF9N2o4k6q1c3CKZYqx2E/in+nARIYRdh5kbeLfomi6GIyVFeXExp8crob3MAzOQMvXf9+ByuezimMPIHDvv0u3kmmeITXfoZrHCDxLoWWlESN1owBfKPqe7JKAuu9ORDC0pUiUfCHWxCoqNos=</X509Certificate></X509Data></KeyInfo></Signature>
</foo>
Run Code Online (Sandbox Code Playgroud)

如何创建引用中的摘要值(WqpRWHxXA0YgH + p3Sxy6hRo1XIk =)?我的意思是如何手动计算这个值?

xml digest digital-signature xml-signature

23
推荐指数
3
解决办法
5万
查看次数

使用SignedXml类添加基于Id属性的引用时,"格式错误的引用元素"

当存在名称空间前缀时,无法通过Id属性对元素进行签名:

void Main()
{
    var doc = new XmlDocument();
    doc.LoadXml("<root xmlns:u=\"myuri\"><test u:Id=\"_0\">Zebra</test></root>");

    SignedXml signedXml = new SignedXml(doc);
    signedXml.SigningKey = new RSACryptoServiceProvider();

    Reference reference = new Reference("#_0");
    signedXml.AddReference(reference);

    signedXml.ComputeSignature();
}
Run Code Online (Sandbox Code Playgroud)

ComputeSignature() 这里会出现'格式错误的参考元素'应该怎么做?

c# xml soap cryptography xml-signature

19
推荐指数
1
解决办法
2万
查看次数

有没有更简单的方法在Java中签署XML文档?

我正在尝试使用Java 对XML文档进行数字签名.我有一个实现使用一些引用,我发现在javax.xml.crypto.dsig包中使用各种实现.

不过,我目前的实现是像很多例子我已经看了-这是相当繁琐,使用从不下23种不同的API类包括java.xml.crypto.dsig,javax.xml.transform,和java.security包,等等.感觉就像我进入了工厂工厂的土地,我花了好几个小时来弄清楚发生了什么.

我的问题是,有更简单的方法吗?如果我有公共/私人密钥文件,并且我想要添加<Signature/>到XML文档,那么是否有一个库让我调用类似的东西:

OutputStream signFile(InputStream xmlFile, File privateKey)
Run Code Online (Sandbox Code Playgroud)

...没有所有的XMLSignatureFactory/CanonicalizationMethod/DOMSignContext疯狂?

我不是非常精通密码术,而且像我这样的开发人员试图熟悉数字签名,Java提供的API似乎相当令人生畏.如果所有这些都是必要的,或者目前没有友好的API,那很好,我愿意接受这个作为答案.我只是想知道我是否在这里不必要地走上了艰难的道路.

java xml cryptography digital-signature xml-signature

18
推荐指数
3
解决办法
2万
查看次数

关于XML签名,我需要了解什么才能使SAML正常工作?

在工作中,我们有一个Web应用程序,我们需要使用SAML验证的单点登录与其他公司的Web应用程序进行交互.我们的网络应用程序是用PHP编写的,显然与其他公司使用的语言选择无关.尽管如此,我还需要编写一个简单的API,这个其他公司可以使用SAML请求发送SOAP请求,并生成SAML响应.我从头开始编写它有三个原因:1)用PHP编写的SAML交互似乎没有很多选项,即使我想要一个,2)它限制了添加另一个第三个所涉及的开销-party组件,以及3)从头开始创建东西通常会让我有更好的理解,并且如果需要的话,使我能够更好地适应未来的事情.

无论如何,我对SAML,SOAP和XML标准一般都是新手,所以我一直在教我自己.我已经为我们的目的提供了相当完整的API,但有一个例外,即另一家公司已经指定我们的响应将需要使用证书进行数字签名(我们收到的请求将同样进行数字签名).所以我一直在试图弄清楚如何处理/生成XML签名,但老实说,由于W3C规范并不完全轻松,所以有点令人困惑.

OASIS安全标记语言(SAML)V1.1文件的断言和协议的第5.4.8节(我已经关闭的文件,正如另一家公司所说他们将使用v1.1)包括一个例子包含已签名断言的签名响应,我将在此处引用以供参考:

<Response IssueInstant="2003-04-17T00:46:02Z" MajorVersion="1" MinorVersion="1"
 Recipient="www.opensaml.org" ResponseID="_c7055387-af61-4fce-8b98-e2927324b306"
 xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
 xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:SignedInfo>
   <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
   <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
   <ds:Reference URI="#_c7055387-af61-4fce-8b98-e2927324b306">
    <ds:Transforms>
     <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
      <InclusiveNamespaces PrefixList="#default saml samlp ds xsd xsi"
       xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     </ds:Transform>
    </ds:Transforms>
    <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
    <ds:DigestValue>TCDVSuG6grhyHbzhQFWFzGrxIPE=</ds:DigestValue>
   </ds:Reference>
  </ds:SignedInfo>
  <ds:SignatureValue>x/GyPbzmFEe85pGD3c1aXG4Vspb9V9jGCjwcRCKrtwPS6vdVNCcY5rHaFPYWkf+5EIYcPzx+pX1h43SmwviCqXRjRtMANWbHLhWAptaK1ywS7gFgsD01qjyen3CP+m3Dw6vKhaq1ed10BYyrIzb4KkHO4ahNyBVXbJwqv5pUaE4=</ds:SignatureValue>
  <ds:KeyInfo>
   <ds:X509Data>
    <ds:X509Certificate>MIICyjCCAjOgAwIBAgICAnUwDQYJKoZIhvcNAQEEBQAwgakxCzAJBgNVBAYTA1VT ... 8I3bsbmRAUg4UP9hH6ABVq4KQKMknxu1xQxLhpR1y1GPdiowMNTrEG8cCx3w/w==</ds:X509Certificate>
   </ds:X509Data>
  </ds:KeyInfo>
 </ds:Signature>
 <Status><StatusCode Value="samlp:Success"/></Status>
 <Assertion AssertionID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
  IssueInstant="2003-04-17T00:46:02Z" Issuer="www.opensaml.org"
  MajorVersion="1" MinorVersion="1" xmlns="urn:oasis:names:tc:SAML:1.0:assertion"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Conditions NotBefore="2003-04-17T00:46:02Z" NotOnOrAfter="2003-04-17T00:51:02Z">
   <AudienceRestrictionCondition>
    <Audience>http://www.opensaml.org</Audience>
   </AudienceRestrictionCondition>
  </Conditions>
  <AuthenticationStatement AuthenticationInstant="2003-04-17T00:46:00Z" …
Run Code Online (Sandbox Code Playgroud)

php xml saml digital-signature xml-signature

17
推荐指数
1
解决办法
2万
查看次数

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

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

.net c# xml x509certificate xml-signature

17
推荐指数
1
解决办法
5万
查看次数

用于管理Java中的XAdES签名的库

我正在寻找一个允许创建和验证XAdES签名的Java库(格式越多越好:XAdES-BES,XAdES-C,XAdES-XL等).

我发现最有趣的实现是:

  • Java XML数字签名API(JSR 105)(= Java SE 6中包含的API),它基于以下内容;
  • Apache Santuario(http://santuario.apache.org/),它仅为基本功能提供有用的支持;
  • XAdES4j(http://code.google.com/p/xades4j/,精彩的演示文稿:http://prezi.com/06vyxbgohncv/xades4j-en/ ),这似乎很有趣,因为它"可以生成,验证和扩展XAdES主要表单中的签名:XAdES-BES,XAdES-EPES,XAdES-T和XAdES-C.此外,通过丰富现有签名来支持扩展表单".然而,这是一个thesys的结果,它只有一个开发人员;
  • eID数字签名服务(http://code.google.com/p/eid-dss/),由比利时联邦ICT部门开发,支持XAdES-XL格式.

您建议使用哪个或建立哪个?

java xml archiving digital-signature xml-signature

13
推荐指数
1
解决办法
1万
查看次数

如何使用OpenSSL计算RSA-SHA1(sha1WithRSAEncryption)值

我对RSA-SHA1感到困惑,我认为它是RSA_private_encrypt(SHA1(消息)).但我无法获得正确的签名值.有什么不对的吗?

openssl cryptography rsa digital-signature xml-signature

13
推荐指数
1
解决办法
1万
查看次数

"清单XML签名无效"

操作系统:安装了.NET 4.5的Visual Studio Pro 2012的Windows 7 64位.

我在Visual Studios中使用了Publish选项并确保我单击了Sign the clickOnce清单并签署了Assembly.它仍然无法在另一台计算机上运行,​​并且说我没有有效的XML签名.我已粘贴下面的错误消息.

我还读过:如何移动ClickOnce部署包,我是否必须签署ClickOnce清单?.VS2012 .NET 4.0 Clickonce VSTO CryptographicException:无法为提供的签名算法和其他几个算法创建SignatureDescription.

我需要能够在.NET 4.0上部署我的程序至少,我无法访问另一个版本的Visual Studios.提前致谢!

完成错误如下:


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)

来源部署网址:file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application

错误摘要以下是错误的摘要,这些错误的详细信息将在后面的日志中列出.*激活C:\ Documents and Settings\Administrator\Desktop\EatonWizard.application导致异常.检测到以下失败消息:+来自file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application的异常读取清单:清单可能无效或无法打开文件.+ Manifest XML签名无效.无法为提供的签名算法创建+ SignatureDescription.

组件存储事务故障摘要未检测到事务错误.

警告此操作期间没有警告.

操作进度状态*[10/10/2012 2:05:02 PM]:已启动C:\ Documents and Settings\Administrator\Desktop\EatonWizard.application的激活.

错误详细信息在此操作期间检测到以下错误.*[10/10/2012 2:05:02 PM] System.Deployment.Application.InvalidDeploymentException(ManifestParse) - 来自file:/// C:/Documents%20and%20Settings/Administrator/Desktop/EatonWizard.application的异常读取清单:清单可能无效或无法打开文件. - 源:System.Deployment - 堆栈跟踪:在System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass的System.Deployment.Application.ManifestReader.FromDocument(String localPath,ManifestType manifestType,Uri sourceUri)中(SubscriptionStore子存储,Uri和sourceUri,TempFile和tempFile, System.Deployment.Application.ApplicationActivator上的System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore子存储,Uri&sourceUri,TempFile&tempFile,SubscriptionState和subState,IDownloadNotification通知,DownloadOptions选项)中的SubscriptionState&subState,IDownloadNotification通知,DownloadOptions选项,ServerInformation和serverInformation. System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker上的PerformDeploymentActivation(Uri activationUri,Boolean isShortcut,String textualSubId,String deploymentProviderUrlFromExtension,BrowserSettings browserSettings,String&errorPageUrl)bject state)---内部异常--- System.Deployment.Application.InvalidDeploymentException(SignatureValidation) - 清单XML签名无效. - 来源:System.Deployment …

c# deployment xml-signature visual-studio-2012

13
推荐指数
1
解决办法
1万
查看次数

Node.js中的XML到PEM

我坚持使用加密api,因为我对密码术知之甚少.我有这个

XML:
<RSAKeyValue>
    <Modulus>1znidPBIcMcO7K/53tkTSyKqxlG5Mcws8kVtijS4tyEU4W/FEVWYpOtv+Stnb4Vt</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

Signature:
rNbdUP-p4pEGfwQSwR6VPvAVZ-sZu-ptgw8SofYYmNTlfUB9iUbb593eCAuT5jsqDTC

Original data:
<xml>...some big xml...</xml>
Run Code Online (Sandbox Code Playgroud)

我想验证签名,我该怎么做?

(我正在使用节点v0.10.18)

cryptography rsa node.js xml-signature

13
推荐指数
1
解决办法
3883
查看次数

在将文档明确添加到文档(JAVA)时,XML签名无法验证?

我正在使用第三方提供的给定XSD的JAXB创建以下XML文档.第三方请求签署文档并向其添加一个包含签名的额外元素.使用JDK 1.7.

以下是编组的代码示例:

JAXBContext jaxbContext = JAXBContext.newInstance(DataPDU.class);
DataPDU myDataPDU = new DataPDU();
myDataPDU.setRevision("2.0.6");

// marshall the file
Marshaller marshaller = jaxbContext.createMarshaller();

DOMResult domResult = new DOMResult();
marshaller.marshal(myDataPDU, domResult);

// get the document list
Document document = (Document) domResult.getNode();
Run Code Online (Sandbox Code Playgroud)

然后我创建元素(LAU)如下,并使用HMAC-SHA256算法和JSR105 JAVA API 签署文档(我不会包括整个签名代码以减少冗长,我使用XMLSignature类的标准行为,然后转换使用XML转换器将文档记录到DOMSource的文件输出流中:

Element LAUElement = document.createElementNS("urn:swift:saa:xsd:saa.2.0", "Saa:LAU");
Element rootElement = document.getDocumentElement();
rootElement.appendChild(LAUElement);

// sign the document
XMLSignatureUtil.sign(document, secret, LAUElement, "ds");
// create the output file
TransformerUtil.transformDocumentToFile(document, "resultingFile.xml");
Run Code Online (Sandbox Code Playgroud)

XML正确签名但在验证时,计算的摘要值与摘要值不同.

我注意到在创建LAU元素时更改命名空间值时,摘要永远不会改变,就好像文档正在签名并忽略了LAU元素的命名空间,我想这就是它失败的原因.整个文档中的任何其他更改,或LAU元素前缀的更改都会直接影响计算的有效负载摘要.

如果我将签名直接附加到根元素而不是创建LAU元素,则验证可以正常工作.

LAU元素存在于XSD中,可以使用JAXB创建,但问题是我找不到一种方法来为与根元素分配相同名称空间的前缀(仅在文档中).

问题:

当使用createElementNS和将元素添加到文档时,是否实际上从有效负载摘要计算中省略了命名空间appendChild …

java xml document jaxb xml-signature

13
推荐指数
1
解决办法
828
查看次数