X509Cerificate签名SOAP消息中的回车问题

时间:2018-06-04 06:39:33

标签: soap x509certificate

签署的肥皂消息增加了额外的"&#13"在证书正文中: MIICvDCCAaSgAwIBAgIIJ09ChnJDyAYwDQYJKoZIhvcNAQEFBQAwMzESMBAGA1UEAwwJUEdXUm9v
 dENBMRAwDgYDVQQKDAdTaWVtZW5zMQswCQYDVQQGEwJTSzAeFw0xMTA5MjMwNDQyNDNaFw0yMDA3

        Source source = hlrPart.getContent();
        Node root = null;
        root = (Node) ((DOMSource) source).getNode();
        dumpDocument(root);
        if(hlrBody != null) {
            hlrBody.addAttribute(new QName("Id"), "Body");
        }
        Document doc = hlrMsg.getSOAPPart().getEnvelope().getOwnerDocument();
        ((CoreDocumentImpl)doc).putIdentifier("Body", hlrBody);
        NodeList nodeList = doc.getElementsByTagNameNS("http://schemas.xmlsoap.org/soap/envelope/", "Header");
        Node headerNode = nodeList.item(0);




        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM",XML_DSIG_PROVIDER);
        List<Transform> transformList = new ArrayList<Transform>();
        transformList.add(fac.newTransform("http://www.w3.org/2000/09/xmldsig#enveloped-signature", (TransformParameterSpec)null));
        transformList.add(fac.newTransform("http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments", (TransformParameterSpec)null));

        Reference ref = fac.newReference("#Body", fac.newDigestMethod("http://www.w3.org/2000/09/xmldsig#sha1", null),transformList,
                    null, null);
        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod("http://www.w3.org/TR/2001/REC-xml-c14n-20010315", (C14NMethodParameterSpec)null),
                    fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
                    Collections.singletonList(ref));
            //Private Key
            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
            FileInputStream fileJKS = new FileInputStream(sJKSfile);
            ks.load(fileJKS, PASSWORD.toCharArray());
            PrivateKey hlrPrivateKey = (PrivateKey) ks.getKey(ALIAS, PRIVATE_KEY.toCharArray());
            X509Certificate cert = (X509Certificate) ks.getCertificate(ALIAS);
            // Create the KeyInfo containing the X509Data.
            KeyInfoFactory kif = fac.getKeyInfoFactory();
            List<X509Certificate> x509Content = new ArrayList<X509Certificate>();
            x509Content.add(cert);
            List<XMLStructure> keyinfofactory = new ArrayList<XMLStructure>();
            keyinfofactory.add(kif.newX509Data(x509Content));
            keyinfofactory.add(kif.newKeyValue(cert.getPublicKey()));
            KeyInfo kiss = kif.newKeyInfo(keyinfofactory);
            DOMSignContext sigContext = new DOMSignContext(hlrPrivateKey, headerNode);

            sigContext.putNamespacePrefix(XMLSignature.XMLNS, "ds");
            XMLSignature signaturer = fac.newXMLSignature(si, kiss);
            signaturer.sign(sigContext);
            OutputStream os = new FileOutputStream("out.xml");
            TransformerFactory tf = TransformerFactory.newInstance();
            javax.xml.transform.Transformer trans = tf.newTransformer();
            trans.transform(new DOMSource(root), new StreamResult(os));
            dumpDocument(root);

0 个答案:

没有答案