Netty中双向SSL认证(Two way SSL authentication in Netty)

2019-07-29 09:12发布

我工作的一个服务器和客户端基于应用程序,它需要双向SSL认证。 (客户端进行身份验证使用SSL证书的服务器和服务器进行身份验证客户端。)

我是很新的Netty和对本少的疑虑。

  1. 是双向认证可以利用的Netty?
  2. 它可以简单地实现通过添加另一个SslHandler到服务器和客户机的pipelinefactories?
  3. 如果以上是真的,我怎么能抢在ChannelConnected()方法做SslHandshake所需SslHandler? 而是否有可能再次调用管道调用在ChannelConected()方法的第二次握手?
  4. 有我可以指以任何的例子?

我真的很感激对此,答案或在正确的方向上推任何帮助。

提前致谢。

Answer 1:

是双向认证可以利用的Netty?

它可以简单地实现通过添加另一个SslHandler到服务器和客户机的pipelinefactories?

如果以上是真的,我怎么能抢在ChannelConnected()方法做SslHandshake所需SslHandler?

创建时,您需要安装密钥库和信任正确SSLContext

而是否有可能再次调用管道调用在ChannelConected()方法的第二次握手?

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

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

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

有我可以指以任何的例子?

  • 这里有一个例子我做的WebSockets。 那只能说明你如何设置服务器密钥库。 你将不得不增加一个信任作为第二个参数serverContext.init(kmf.getKeyManagers(), null, null);

  • 这里有一个类似的例子在Scala中与信任存储设置。

  • 这里有一个很好的Java指南对如何设置的SSLContext。

希望这可以帮助。



Answer 2:

双向身份验证需要服务器和客户端拥有证书,其他信托。 客户需要生成私钥,它存储在他的密钥库,并把它通过别人​​服务器的信任信托签署。

这不只是一个你写的代码问题。



Answer 3:

SSL是表示层协议和SSL握手发生在插座连接建立后右和应用层前得到一个可使用的套接字连接。 无论你使用的是何种应用程序,如果你有到位的SSL协议层,然后就可以通过SSL工作。

双向认证仅仅是配置的问题,通过@EJP如上所述。 如果双方当事人可以建立和验证彼此的信任链,则握手成功。 请参考网状配置手册配置SSL信任库。



文章来源: Two way SSL authentication in Netty
标签: java ssl netty