使用 SSLContext 创建 SocketChannel
Posted
技术标签:
【中文标题】使用 SSLContext 创建 SocketChannel【英文标题】:Using an SSLContext to create a SocketChannel 【发布时间】:2015-06-17 15:50:41 【问题描述】:我希望为 SSL 套接字实现 NIO。但是,我发现的每个示例都使用 SocketChannel.open() 来获取套接字通道。
如何从 SSLContext 中获取 SocketChannel?
【问题讨论】:
让它与 Netty 一起工作。 【参考方案1】:不幸的是,这并不容易。您不能直接创建自动使用来自SSLContext
的 SSL 的 SocketChannel
。
从SSLContext
,您可以创建一个SSLEngine
,并且您必须适当地调用它来处理SSL 握手。这不是几行代码的问题。
我在 GitHub 上有一个 sslclient example 类 SSLSocketChannel
,它显示了如何执行此操作。
【讨论】:
我决定使用 Netty :) 也可以使用客户端身份验证 :) 感谢您的帮助。【参考方案2】:你不能。这个问题没有意义。 SocketChannels
是明文。 SSLContexts
用于 SSL。
【讨论】:
【参考方案3】:遗憾的是,标准 Java 库无法做到这一点。
SSL/TLS 是在 Java 中使用 SSLEngine 实现的,但该类很难正确使用。
但是有一些选择。 TLS Channel 是一个简单的库,它正是这样做的:包装一个 SSLContext(或 SSLEngine)并公开一个 ByteChannel 接口,在内部完成繁重的工作。
(免责声明:我是图书馆的主要作者)。
【讨论】:
以上是关于使用 SSLContext 创建 SocketChannel的主要内容,如果未能解决你的问题,请参考以下文章
是否可以构建使用SSL / TLS JAVA_OPTS作为其SSLContext的Java 11 HttpClient?
Python中的Mongodb聚合:无法腌制'SSLContext'对象