【问题标题】:axis2 client Trying to write END_DOCUMENT when document has no root (ie. trying to output empty document) erroraxis2客户端尝试在文档没有根时写入END_DOCUMENT(即尝试输出空文档)错误
【发布时间】:2020-09-06 20:08:57
【问题描述】:

我有一个旧版 WebServiceProject,它使用 axis2 和壁垒连接到启用了 ws-security 的 Web 服务。

这是我的axis2.xml:

<parameter name="OutflowSecurity">
    <action>
        <items>Timestamp UsernameToken Encrypt Signature</items>
        <user>myUser</user>
        <passwordCallbackClass>tr.com.mypackage.PWCBHandler</passwordCallbackClass>
        <signaturePropFile>crypto.properties</signaturePropFile>  
        <signatureKeyIdentifier>IssuerSerial</signatureKeyIdentifier>
    </action>
</parameter>
<parameter name="InflowSecurity">
    <action>
        <items>Timestamp Encrypt Signature</items>
        <user>myUser</user>
        <passwordCallbackClass>tr.com.mypackage.PWCBHandler</passwordCallbackClass>
        <signaturePropFile>crypto.properties</signaturePropFile>  
        <signatureKeyIdentifier>IssuerSerial</signatureKeyIdentifier>
    </action>
</parameter>

我正在准备测试环境并正确设置了crypto.properties,并且没有更改任何代码,因为它在生产中运行良好,而且我不熟悉axis2。 这是我的错误信息:

[WARN] 没有传输接收器 找到 org.apache.axis2.transport.http.AxisServletListener。一个实例 对于 HTTP 将自动配置。请更新您的 axis2.xml 文件!

C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\WebServiceProject\WEB-INF

2020 年 5 月 20 日 15:19:01.862 严重 [https-jsse-nio-443-exec-1]

org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun 错误 运行套接字处理器 java.lang.NullPointerException 在 org.bouncycastle.crypto.signers.PSSSigner.generateSignature(未知 资源) 在 org.bouncycastle.jce.provider.JDKPSSSigner.engineSign(未知来源) 在 java.base/java.security.Signature$Delegate.engineSign(Signature.java:1403) 在 java.base/java.security.Signature.sign(Signature.java:712) 在 java.base/sun.security.ssl.CertificateVerify$T13CertificateVerifyMessage.(CertificateVerify.java:930) 在 java.base/sun.security.ssl.CertificateVerify$T13CertificateVerifyProducer.onProduceCertificateVerify(CertificateVerify.java:1110) 在 java.base/sun.security.ssl.CertificateVerify$T13CertificateVerifyProducer.produce(CertificateVerify.java:1103) 在 java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:440) 在 java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.goServerHello(ClientHello.java:1252) 在 java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.consume(ClientHello.java:1188) 在 java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:851) 在 java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:812) 在 java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396) 在 java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444) 在 java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1260) 在 java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1247) 在 java.base/java.security.AccessController.doPrivileged(AccessController.java:691) 在 java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1192) 在 org.apache.tomcat.util.net.SecureNioChannel.tasks(SecureNioChannel.java:443) 在 org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:507) 在 org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:238) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.base/java.lang.Thread.run(Thread.java:830)

还有底部的痕迹:

原因:javax.xml.stream.XMLStreamException:试图写入 END_DOCUMENT 当文档没有根时(即尝试输出空 文档)。 在 com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1473) 在 com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1502) 在 com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1663) 在 com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:288) 在 org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.close(XMLStreamWriterWrapper.java:46) 在 org.apache.axiom.om.impl.MTOMXMLStreamWriter.close(MTOMXMLStreamWriter.java:222) 在 org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:192) 在 org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:74) ... 54 更多

它似乎无法找到某种签名。但我很确定我所做的所有更改都是正确的。

我错过了什么?

【问题讨论】:

    标签: encryption axis2 ws-security


    【解决方案1】:

    当我尝试在 Tomcat 9.0.16 上设置 HTTPS 连接器(使用 TLS 1.3)并在 linux x64 上打开 JDK 11.0.8 时,我遇到了同样的异常。我在我的 WebApp Lib 中使用 BouncyCastle (BC) v1.63。

     java.lang.NullPointerException
        at org.bouncycastle.crypto.signers.PSSSigner.generateSignature(Unknown Source)
        at org.bouncycastle.jcajce.provider.asymmetric.rsa.PSSSignatureSpi.engineSign(Unknown Source)
        at java.base/java.security.Signature$Delegate.engineSign(Signature.java:1404)
        at java.base/java.security.Signature.sign(Signature.java:713)
    

    BC 社区已通知此错误。 关于这个 BC 的问题,很明显我需要升级我的 BC 库:

    我使用 BC 1.66 升级了 webapp 依赖项,现在它与 OpenJDK 11.0.8 完美配合。

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2023-03-11
      • 1970-01-01
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多