Windows下使用netty的SelfSignedCertificate进行SSL加密通信

作者 : admin 本文共1997个字,预计阅读时间需要5分钟 发布时间: 2024-06-10 共1人阅读

在使用netty的时候,经常需要对通信进行SSL加密,这就需要相关的证书和秘钥;

当我们在自己的开发环境中进行测试的时候,有一个非常简单的方法来创建证书和私钥文件,netty提供了SelfSignedCertificate类。

 SelfSignedCertificate ssc = new SelfSignedCertificate();

只需要这样一行代码,Netty就会帮我们自动生成自签名的证书和私钥。

生成的证书和私钥文件在Windows下的Temp目录:

C:\Users\xxx\AppData\Local\Temp

文件名前缀为:keyutil_example.com_

一般为:

C:\Users\xxx\AppData\Local\Temp\keyutil_example.com_13784598500529759262.crt
C:\Users\xxx\AppData\Local\Temp\keyutil_example.com_9168231614251199235.key

PS: 自动生成的证书和私钥会在程序结束后自动删除,当然也可以调用ssc.delete()进行手动删除。

下面记录下,使用SelfSignedCertificate的过程中的一些问题:

1. 代码执行过程中,报错:

Exception in thread "main" java.security.cert.CertificateException: No provider succeeded to generate a self-signed certificate. See debug log for the root cause.
	at io.netty.handler.ssl.util.SelfSignedCertificate.(SelfSignedCertificate.java:157)
	at io.netty.handler.ssl.util.SelfSignedCertificate.(SelfSignedCertificate.java:110)
	at io.netty.handler.ssl.util.SelfSignedCertificate.(SelfSignedCertificate.java:88)
	at io.netty.handler.ssl.util.SelfSignedCertificate.(SelfSignedCertificate.java:79)
	at com.freddy.netty.n12_securechat.SecureChatServer.main(SecureChatServer.java:25)
Caused by: java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider
	at io.netty.handler.ssl.util.SelfSignedCertificate.(SelfSignedCertificate.java:154)
	... 4 more
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 5 more

SelfSignedCertificate会自动将证书文件和私钥文件生成在系统的temp文件夹中,所以这个类在生产环境中是不推荐使用的。默认情况下该类会使用OpenJDK’s X.509来生成证书的私钥,如果不可以,则使用 Bouncy Castle作为替代。

解决:添加boucycastle的依赖

        
            org.bouncycastle
            bcprov-jdk15on
            1.68
        

        
            org.bouncycastle
            bcpkix-jdk15on
            1.68
        

参考:

RocketMQ 初次尝试受挫篇【ssl错误】_rocketmq failed to create sslcontext for server-CSDN博客

java.io.tmpdir_${java.io.tmpdir}-CSDN博客

【SM2证书】利用BC的X509v3CertificateBuilder组装X509国密证书-CSDN博客

本站无任何商业行为
个人在线分享 » Windows下使用netty的SelfSignedCertificate进行SSL加密通信
E-->