繁体   English   中英

Netty 中的两种 SSL 身份验证

[英]Two way SSL authentication in Netty

我正在开发基于服务器和客户端的应用程序,它需要两种方式的 SSL 身份验证。 (客户端验证服务器和服务器验证客户端都使用 SSL 证书。)

我对 Netty 很陌生,对此几乎没有怀疑。

  1. 是否可以使用 Netty 进行双向身份验证?
  2. 通过向服务器和客户端的管道工厂添加另一个 SslHandler 是否可以简单地实现?
  3. 如果上述情况属实,我如何在 ChannelConnected() 方法中获取所需的 SslHandler 来执行 SslHandshake? 是否可以通过再次调用管道来调用 ChannelConected() 方法中的第二次握手?
  4. 有没有我可以参考的例子?

我非常感谢有关此问题的任何帮助、答案或朝着正确方向推动。

是否可以使用 Netty 进行双向身份验证?

是的

通过向服务器和客户端的管道工厂添加另一个 SslHandler 是否可以简单地实现?

是的

如果上述情况属实,我如何在 ChannelConnected() 方法中获取所需的 SslHandler 来执行 SslHandshake?

创建SSLContext时,您需要正确设置密钥库和信任库。

是否可以通过再次调用管道来调用 ChannelConected() 方法中的第二次握手?

从内存中,客户端和服务器身份验证在第一次握手中完成。

在客户端上,将客户端的私钥安装在密钥库中,将服务器的公钥安装在信任库中。

在服务器上,将服务器的私钥安装在密钥库中,将客户端的公钥安装在信任库中。

有没有我可以参考的例子?

  • 这是我为 websockets 做的一个例子 它仅向您展示如何设置服务器密钥库。 您必须添加一个信任库作为serverContext.init(kmf.getKeyManagers(), null, null);的第二个参数serverContext.init(kmf.getKeyManagers(), null, null);

  • 这是在 Scala 中使用信任存储设置的类似示例

  • 这是一个关于如何设置 SSLContext 的优秀Java 指南

希望这可以帮助。

双向身份验证要求服务器和客户端都拥有对方信任的证书。 客户端需要生成一个私钥,将其存储在他的密钥库中,并由服务器信任库信任的某个人对其进行签名。

这不仅仅是你编写什么代码的问题。

SSL 是表示层协议,SSL 握手发生在套接字连接建立之后和应用层获得可用套接字连接之前。 无论您使用什么应用程序,如果您有 SSL 协议层,那么您就可以在 SSL 上工作。

双向身份验证只是上面@EJP 提到的配置问题。 如果双方都可以建立并验证彼此的信任链,则握手成功。 请参阅 netty 配置手册以配置 SSL 信任库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM