这是我生成xml签名的代码:
DOMSignContext dsc = new DOMSignContext (prk,xmldoc.getDocumentElement()); XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM"); DigestMethod digestMethod = fac.newDigestMethod("http://www.w3.org/2000/09/xmldsig#sha1",null); C14NMethodParameterSpec spec = null; CanonicalizationMethod cm = fac.newCanonicalizationMethod( "http://www.w3.org/2001/10/xml-exc-c14n#",spec); SignatureMethod sm = fac.newSignatureMethod( "http://www.w3.org/2000/09/xmldsig#rsa-sha1",null); ArrayList transformList = new ArrayList(); TransformParameterSpec transformSpec = null; Transform envTransform = fac.newTransform("http://www.w3.org/2000/09/xmldsig#enveloped-signature",transformSpec); Transform exc14nTransform = fac.newTransform( "http://www.w3.org/2001/10/xml-exc-c14n#",transformSpec); transformList.add(exc14nTransform); transformList.add(envTransform); Reference ref = fac.newReference("",digestMethod,transformList,null,null); ArrayList refList = new ArrayList(); refList.add(ref); SignedInfo si =fac.newSignedInfo(cm,sm,refList);
这会将引用验证视为错误,并将核心有效性视为错误.但是当我删除envTrasnform变量即fac.new Transform(“http://www.w3.org/2001/10/xml-exc-c14n#”,transformSpec)并使用以下代码执行时:
DOMSignContext dsc = new DOMSignContext (prk,null); ArrayList transformList = new ArrayList(); TransformParameterSpec transformSpec = null; Transform envTransform = fac.newTransform( "http://www.w3.org/2000/09/xmldsig#enveloped-signature",transformSpec); transformList.add(envTransform); Reference ref = fac.newReference("",refList);