Код: Выделить всё
21
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-webflux
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.bouncycastle
bcprov-jdk18on
1.80
org.bouncycastle
bctls-jdk18on
1.80
org.conscrypt
conscrypt-openjdk-uber
2.5.2
org.apache.maven.plugins
maven-compiler-plugin
org.projectlombok
lombok
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
< /code>
@Component
@RequiredArgsConstructor
public class CustomTlsConfig {
@PostConstruct
public void init() {
// Register the Bouncy Castle JSSE provider
changeDefaultJSSEProvider();
}
private static void changeDefaultJSSEProvider() {
Security.insertProviderAt(new BouncyCastleProvider(), 1);
Security.insertProviderAt(new BouncyCastleJsseProvider(), 2);
SSLContext context = null;
try {
context = SSLContext.getDefault();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
System.out.println("SSLContext provider: " + context.getProvider().getName());
}
}
Код: Выделить всё
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=path-to-my-keystore
server.ssl.key-alias=some-alias
server.ssl.key-store-password=some-pwd
< /code>
Мое приложение Spring Boot запускается успешно.openssl s_client -connect localhost:8081 -groups X25519
Код: Выделить всё
openssl s_client -connect localhost:8081 -groups mlkem768
< /code>
Соединение не удается. Пожалуйста, см. Ниже журналы ошибок из моего приложения Springboot: < /p>
javax.net.ssl|ERROR|03|reactor-http-epoll-3|2025-05-26 10:30:49.541 SGT|TransportContext.java:375|Fatal (UNEXPECTED_MESSAGE): Unexpected key_share extension in HelloRetryRequest (
"throwable" : {
javax.net.ssl.SSLProtocolException: Unexpected key_share extension in HelloRetryRequest
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:370)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:326)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:317)
at java.base/sun.security.ssl.KeyShareExtension$HRRKeyShareProducer.produce(KeyShareExtension.java:796)
at java.base/sun.security.ssl.SSLExtension.produce(SSLExtension.java:599)
at java.base/sun.security.ssl.SSLExtensions.produce(SSLExtensions.java:265)
at java.base/sun.security.ssl.ServerHello$T13HelloRetryRequestProducer.produce(ServerHello.java:787)
at java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:437)
at java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.goHelloRetryRequest(ClientHello.java:1189)
at java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.consume(ClientHello.java:1177)
at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:837)
at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:798)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:393)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:476)
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1273)
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1260)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)
at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1205)
at io.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1695)
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1541)
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:266)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:537)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:1583)}
)
< /code>
На основе журналов я вижу, что используется библиотека Sun.security.ssl. Однако, когда я выполнил следующий код: < /p>
SSLContext context = null;
try {
context = SSLContext.getDefault();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
System.out.println("SSLContext provider: " + context.getProvider().getName());
Заранее спасибо за помощь.
Подробнее здесь: https://stackoverflow.com/questions/796 ... -boot-appl