簡體   English   中英

Java數字簽名

[英]Digital signature in java

我正在嘗試簽名xml,但是有一些問題。

數字簽名始終出現在文件末尾,我需要將其添加到節點父親:

X509Certificate cert= (X509Certificate)keyEntry.getCertificate();        
KeyInfoFactory kif = fac.getKeyInfoFactory();
List x509Content = new ArrayList();
x509Content.add(cert.getSubjectX500Principal().getName());
x509Content.add(cert);
X509Data xd = kif.newX509Data(x509Content);
KeyInfo Ki = kif.newKeyInfo(Collections.singletonList(xd));

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);            
Document doc;
doc = dbf.newDocumentBuilder().parse(new FileInputStream("E:\\HFACHO\\JAVA\\Netbean\\filejavaws.xml"));
DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(),doc.getDocumentElement());
// ad namespace
dsc.setDefaultNamespacePrefix("ds");          
XMLSignature signature = fac.newXMLSignature(si, Ki);        
signature.sign(dsc);                         


//create output file
OutputStream os = new FileOutputStream("E:\\HFACHO\\JAVA\\Netbean\\filejavaws_Firmado.xml");
TransformerFactory tf=  TransformerFactory.newInstance();
javax.xml.transform.Transformer trans = tf.newTransformer();
trans.transform(new DOMSource(doc), new StreamResult(os)); 

好吧,我的方法可能不是很常規,但是應該從結果中獲取簽名節點,並使用頂部的簽名節點構建一個新的xml。

根據您的評論進行更新:

那么,您必須決定是將簽名保留在生成和預期的位置,還是要保留在文檔的開頭。

如果您還負責驗證海關流程簽名的代碼,則后一種方法可能會起作用

http://www.w3.org/TR/xmldsig-core/#sec-o-Simple

解決方案很簡單:

dsc.setParent();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM