मैं लिफाफा हस्ताक्षर और javax.xml.crypto.dsig। * कक्षाओं का उपयोग कर एक एक्सएमएल फ़ाइल पर हस्ताक्षर करने की कोशिश कर रहा हूं। नतीजतन मुझे सही हस्ताक्षर सामग्री के साथ फ़ाइल मिलती है लेकिन बिना नामस्थान परिभाषित किया गया है। मैं xmlns कैसे जोड़ सकता हूं: डीएस = "http://www.w3.org/2000/09/xmldsig#" नेमस्पेस और संबंधित डीएस उपसर्ग? मुझे कोई भी जगह नहीं दिखाई दे रही है जहां मैं इसे परिभाषित कर सकता हूं।javax.xml.crypto.dsig का उपयोग कर XML फ़ाइल पर हस्ताक्षर करते समय नामस्थान कैसे जोड़ें। *?
उदाहरण कोड:
XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance("DOM");
(...)
XMLSignature signature = xmlSignatureFactory.newXMLSignature(signedInfo, keyInfo);
// Marshal, generate, and sign the enveloped signature.
signature.sign(domSignContext);
उदाहरण एक्सएमएल देता है:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://different.namespace.com">
<someBody/>
<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"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>base64_digest</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>some_base64</SignatureValue>
<KeyInfo>
<X509Data>
<X509SubjectName>subject_data</X509SubjectName>
<X509Certificate>some_more_base64</X509Certificate>
</X509Data>
<KeyValue>
<RSAKeyValue>
<Modulus>another_base64</Modulus>
<Exponent>base64_as_well</Exponent>
</RSAKeyValue>
</KeyValue>
</KeyInfo>
</Signature>
</test>
लेकिन मैं चाहता हूँ:
<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://different.namespace.com" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<someBody/>
<ds:Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>base64_digest</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>some_base64</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509SubjectName>subject_data</ds:X509SubjectName>
<ds:X509Certificate>some_more_base64</ds:X509Certificate>
</ds:X509Data>
<ds:KeyValue>
<ds:RSAKeyValue>
<ds:Modulus>another_base64</ds:Modulus>
<ds:Exponent>base64_as_well</ds:Exponent>
</ds:RSAKeyValue>
</ds:KeyValue>
</ds:KeyInfo>
</ds:Signature>
</test>
परिणामस्वरूप एक्सएमएल सही है। आप पर उपसर्ग क्यों चाहते हैं? हां, इसे "जाने-माने" उपसर्ग माना जाता है, लेकिन इससे परिणामी एक्सएमएल की शुद्धता प्रभावित नहीं होनी चाहिए। –
user568826