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

在使用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.<init>(SelfSignedCertificate.java:157)
	at io.netty.handler.ssl.util.SelfSignedCertificate.<init>(SelfSignedCertificate.java:110)
	at io.netty.handler.ssl.util.SelfSignedCertificate.<init>(SelfSignedCertificate.java:88)
	at io.netty.handler.ssl.util.SelfSignedCertificate.<init>(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.<init>(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的依赖

        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.68</version>
        </dependency>

        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
            <version>1.68</version>
        </dependency>

参考:

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

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

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

相关推荐

  1. windowsdocker使用

    2024-06-06 09:58:05       30 阅读
  2. linux进程通信

    2024-06-06 09:58:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 09:58:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 09:58:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 09:58:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 09:58:05       18 阅读

热门阅读

  1. 机器学习_决策树与随机森林

    2024-06-06 09:58:05       8 阅读
  2. web3之女巫(sybil)

    2024-06-06 09:58:05       8 阅读
  3. linux常用命令及用法

    2024-06-06 09:58:05       8 阅读
  4. 完整状态码面试背

    2024-06-06 09:58:05       6 阅读
  5. 服务器端口聚合

    2024-06-06 09:58:05       6 阅读
  6. Python 快速入门

    2024-06-06 09:58:05       6 阅读
  7. CSS Web前端框架:深入剖析与应用实践

    2024-06-06 09:58:05       9 阅读
  8. 一个简单的 C# 算术表达式 Eval 解析器 MathEvalor

    2024-06-06 09:58:05       9 阅读
  9. Anaconda3 使用sudo运行时找不到命令

    2024-06-06 09:58:05       7 阅读