Spring WebFlux Netty SSL 与自签名证书错误

Spring WebFlux Netty SSL with Self Signed Certificate error

我正在尝试通过本地主机中的 https 在 Netty 上访问我的 Spring 引导应用程序 运行,在服务器端使用自签名证书。

我的 application.properties 看起来像这样:

server.ssl.enabled=true
server.ssl.key-store-type=JKS
server.ssl.key-store=test.jks
server.ssl.key-store-password=password
server.ssl.key-alias=testkey

我通过以下方式生成了密钥库:

keytool -genkeypair -alias testkey -keyalg RSA -keysize 4096 -keystore test.jks -validity 36500

我收到以下错误:

io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:472) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:278) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)

我尝试将证书导入到 JDK 信任库,甚至导入到 OS,但还是一样。一位消息人士建议将密钥别名命名为 "testkey" 以使其工作,但这也没有工作。由于 Google 中没有提及此错误,希望您能提供帮助。

这个server.ssl.key-store=test.jks指定你的test.jks位于项目的根文件夹中,所以检查它是否真的存在。

如果您在 class 路径的其他地方有此文件,您可以使用 classpath 方案来指定文件的位置,即 server.ssl.key-store=classpath:<path-to-the-file>/test.jks

Check this for more info

我设法通过 https://github.com/FiloSottile/mkcert

生成本地有效证书来解决

扩展@Peter 的回答 -

https://github.com/FiloSottile/mkcert/releases 下载 mkcert 版本或直接从源代码构建。

在 Windows 上以 p12 格式生成 self-signed 证书 -

mkcert-v1.4.1-windows-amd64.exe -pkcs12 -p12-file self-signed-cert.p12 localhost 127.0.0.1 ::1

并将以下配置添加到 Spring 引导属性文件 -

server.ssl.key-store=classpath:self-signed-cert.p12
server.ssl.key-store-password=changeit
server.ssl.key-password=changeit

注意 - classpath 如果您要在 resources 文件夹中添加 self-signed-cert.p12。如果你想 运行 它来自特定位置 server.ssl.key-store=./self-signed-cert.p12