求助:调用REST接口时Spring Boot应用出现Socket处理器错误(未引入BouncyCastle)
问题描述
我的Spring Boot应用调用某REST接口时突然报错,未在pom.xml中手动引入BouncyCastle依赖,当前使用JDK版本为1.8.0_302,求解决建议。
错误日志
20-10-2022 10:02:25.576 [ERROR] - [https-jsse-nio-27100-exec-1] o.apache.tomcat.util.net.NioEndpoint : Error running socket processor java.lang.NullPointerException: null at org.bouncycastle.crypto.signers.PSSSigner.generateSignature(Unknown Source) at org.bouncycastle.jcajce.provider.asymmetric.rsa.PSSSignatureSpi.engineSign(Unknown Source) at java.security.Signature$Delegate.engineSign(Signature.java:1382) at java.security.Signature.sign(Signature.java:698) at sun.security.ssl.DHServerKeyExchange$DHServerKeyExchangeMessage.<init>(DHServerKeyExchange.java:162) at sun.security.ssl.DHServerKeyExchange$DHServerKeyExchangeProducer.produce(DHServerKeyExchange.java:481) at sun.security.ssl.ClientHello$T12ClientHelloConsumer.consume(ClientHello.java:1020) at sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:727) at sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:693) at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:377) at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444) at sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:968) at sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:955) at java.security.AccessController.doPrivileged(Native Method) at sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:902) at org.apache.tomcat.util.net.SecureNioChannel.tasks(SecureNioChannel.java:443) at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:507) at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:238) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1616) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
解决建议
- 排查传递依赖:执行
mvn dependency:tree命令生成依赖树,找出间接引入BouncyCastle的依赖项,确认其版本是否与JDK 1.8兼容。 - 排除冲突依赖:如果发现传递引入的BouncyCastle版本存在兼容性问题,在pom.xml中对应依赖下添加排除配置,示例:
<dependency> <groupId>你的依赖groupId</groupId> <artifactId>你的依赖artifactId</artifactId> <version>你的依赖版本</version> <exclusions> <exclusion> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> </exclusion> <exclusion> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> </exclusion> </exclusions> </dependency> - 检查JDK安全配置:打开
JAVA_HOME/jre/lib/security/java.security文件,查看是否有security.provider条目包含BouncyCastle,如有则注释掉,让JDK使用默认安全提供者。 - 手动引入兼容版本:如果业务确实需要BouncyCastle,直接在pom.xml中引入兼容JDK 1.8的稳定版本(如1.68及以上),覆盖传递依赖的旧版本。
- 调整SSL加密套件:错误发生在SSL握手阶段,尝试禁用DH相关加密套件,改用RSA或ECDH类套件,避免因算法不兼容导致的签名NPE。
内容的提问来源于stack exchange,提问作者user2298581
相关产品推荐
相关产品推荐

