错误:创建 SOAP 签名时“没有为签名提供加密属性文件”

问题描述 投票:0回答:0

我正在尝试在 Java 和 Spring 中创建签名的 SOAP 消息。

我在我的

@Bean
课上创建了一个
ClientConfig
,这是内容:

    @Bean
    public CryptoFactoryBean getCryptoFactoryBeanClient() throws IOException {
        CryptoFactoryBean cryptoFactoryBean = new CryptoFactoryBean();

        Properties cryptoProperties = new Properties();
        cryptoProperties.setProperty("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.file", new ClassPathResource("client.jks").getPath());
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jks");
        cryptoProperties.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "clientkeystore");
        cryptoFactoryBean.setConfiguration(cryptoProperties);
        return cryptoFactoryBean;
    }

之前我使用以下命令从终端创建了一个 jks 文件:

keytool -genkeypair -alias clientKeyPair -keyalg RSA -keysize 2048 \ -dname "CN=localNamespace" -validity 365 -storetype JKS \ -keystore client.jks -storepass clientkeystore

和另一个名为

server.jks
的 jks 密钥库,其中包含客户端公私密钥对的公钥。

当我尝试执行这段代码时,我总是得到这个错误,我无法修复:

23:06:10.342 [main] ERROR org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor -- Could not secure response: Error during Signature: 
org.springframework.ws.soap.security.wss4j2.Wss4jSecuritySecurementException: Error during Signature: 
        at org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor.secureMessage(Wss4jSecurityInterceptor.java:630)
        at org.springframework.ws.soap.security.AbstractWsSecurityInterceptor.handleRequest(AbstractWsSecurityInterceptor.java:206)
        at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:576)
        at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:539)
        at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:391)
        at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:385)
        at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:375)
        at com.soapproject.soapprojectwebservice.ExamsClient.getOneExam(ExamsClient.java:18)
        at com.soapproject.soapprojectwebservice.RunClient.main(RunClient.java:28)
Caused by: org.apache.wss4j.common.ext.WSSecurityException: Error during Signature: 
        at org.apache.wss4j.dom.action.SignatureAction.execute(SignatureAction.java:173)
        at org.apache.wss4j.dom.handler.WSHandler.doSenderAction(WSHandler.java:240)
        at org.springframework.ws.soap.security.wss4j2.Wss4jHandler.doSenderAction(Wss4jHandler.java:58)
        at org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor.secureMessage(Wss4jSecurityInterceptor.java:628)
        ... 8 common frames omitted
Caused by: org.apache.wss4j.common.ext.WSSecurityException: No crypto property file supplied for signature
        at org.apache.wss4j.dom.message.WSSecSignature.getSigningCerts(WSSecSignature.java:860)
        at org.apache.wss4j.dom.message.WSSecSignature.prepare(WSSecSignature.java:171)
        at org.apache.wss4j.dom.action.SignatureAction.execute(SignatureAction.java:110)
        ... 11 common frames omitted
23:06:10.343 [main] DEBUG org.springframework.ws.client.MessageTracing.received -- Received no response for request [SaajSoapMessage {localNamespace}getExamRequest]
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "localnamespace.GetExamResponse.getExamRegistration()" because "response" is null
        at com.soapproject.soapprojectwebservice.RunClient.main(RunClient.java:29)

我了解到客户端出现错误,代码似乎无法检索私钥以签署 SOAP 消息。

有什么想法吗?

非常感谢

java spring soap keystore spring-ws
© www.soinside.com 2019 - 2024. All rights reserved.