Java SOAP Цифровая подпись WSS4J - PullRequest
0 голосов
/ 12 мая 2018

Я работаю над заданием, в котором мне нужно использовать веб-сервис, подписав его цифровой подписью.Я сгенерировал клиент Web-сервиса, используя JAX-WS.Для подписания запроса мыла я реализовал обработчик SOAP, который подпишет конверт с помощью библиотеки APACHE wss4j перед отправкой его на сервер.У меня есть файл .pfx, который я загружаю в хранилище ключей и использую для подписи.

Все это работает нормально, когда я запускаю этот код из затмения и получаю правильный ответ от сервера.

Проблема в том, что я включил тот же код в свое веб-приложение и пытаюсь отправить оттуда запрос, но каким-то образом подпись не проверяется на стороне сервера и получает ответное мыло: Сервер 75275

Мой вопрос:wss4j работает для подписания запроса мыла на веб-сервере?Если нет, то каким еще способом я могу попытаться решить эту проблему.Любое направление к решению будет высоко оценено.

Код

Document doc = soapEnv.getOwnerDocument();

            WSSecSignature builder = new WSSecSignature();

            WSSecTimestamp timestamp = new WSSecTimestamp();

            WSSecUsernameToken usernametoken = new WSSecUsernameToken();
            usernametoken.setPasswordType(WSConstants.PASSWORD_TEXT);
            usernametoken.setUserInfo(SOAP_USER, SOAP_USER_PASS);
            usernametoken.addNonce();
            usernametoken.addCreated();

            WSSecHeader secHeader = new WSSecHeader();
            // secHeader.setMustUnderstand(true);
            secHeader.insertSecurityHeader(doc);

            usernametoken.build(doc, secHeader);
            timestamp.build(doc, secHeader);

            builder.setUserInfo(KEYSTORE_ALIAS, KEYSTORE_PWD);
            builder.setX509Certificate(cert);
            builder.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE);
            builder.setSignatureAlgorithm(WSConstants.RSA_SHA1);
            builder.setSigCanonicalization(WSConstants.C14N_EXCL_OMIT_COMMENTS);
            builder.setDigestAlgo(WSConstants.SHA1);
            builder.setUseSingleCertificate(true);
            builder.appendBSTElementToHeader(secHeader);

            // Set message parts to sign
            List<WSEncryptionPart> parts = new ArrayList<WSEncryptionPart>();
            WSEncryptionPart bodyPart1 = new WSEncryptionPart("Body", WSConstants.URI_SOAP11_ENV, "Content");
            bodyPart1.setElement(soapBody);
            parts.add(bodyPart1);
            builder.setParts(parts);

            // Set keystore and sign the document
            Properties properties = new Properties();
            properties.setProperty("org.apache.wss4j.crypto.provider",
                    "class org.apache.ws.security.components.crypto.Merlin");

            Merlin crypto = (Merlin) CryptoFactory.getInstance(properties);
            crypto.setKeyStore(store);

            doc = builder.build(doc, crypto, secHeader);

            soapMsg.saveChanges();

// код для получения сертификата и хранения

// code to get cert and keystore
private boolean getX509Certificate() {
    String keyAlias = "";
    try {
        Security.addProvider(new BouncyCastleProvider());
        FileInputStream stream = new FileInputStream(KEYSTORE_FILE); //.pfx file
        this.store = KeyStore.getInstance("PKCS12");
        store.load(stream, KEYSTORE_PWD.toCharArray());

        Enumeration<String> aliases = store.aliases();
        while (aliases.hasMoreElements()) {
            String alias = aliases.nextElement();
            if (store.getCertificate(alias).getType().equals("X.509")) {
                keyAlias = alias;
            }
        }
        this.cert = (X509Certificate) store.getCertificate(keyAlias);
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

// исключение

soap: Server.75275 Значение ответа: soap: Server.75275 2018-05-11 18: 56: 17,977 ОШИБКА [WebService] (WFA: 132301310 - 152335722 Ассоциированный: 349730687 IE = 349730685) Исключение javax.xml.ws.soap.SOAPFaultException: 2018-05-11 18: 56: 17,978 ОШИБКА [WebService] (WFA: 132301310 - 152335722 Ассоциированный: 349730687 IE = 349730685) [org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallertil.createSystemException (MethodMarshallerUtils.java:1363) org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse (MethodMarshallerUtils.java:1089) org.apache.axis2.jaxwlsethomalFaldDocLitWrappedMinimalMethodMarshaller.java:684) org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse (JAXWSProxyHandler.java:626) org.apache.axis2.jaxws.lient.proxy.JAXWSProxyHandler.createResponse (JAXWSProxyHandler.java:566) org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.java:213) com.sun.proxy. $ Proxy256.synchronousSendAndReceive (неизвестный источник)

Спасибо, Арун

...