Netty SSL 主机名验证支持

2023-11-30

据我所知,没有可以用来在 Netty 中启用 SSL 主机名验证的“标志”或配置设置。我见过使用 SslHandler.handshake() 返回的 ChannelFuture 添加自定义实现的示例:

ChannelFuture handshakeFuture = sslHandler.handshake();
handshakeFuture.addListener(new ChannelFutureListener()
{
    public void operationComplete(ChannelFuture future) throws Exception
    {
        if (future.isSuccess())
        {
            // get peer certs, verify CN (or SAN extension, or..?) against requested domain
            ...

我只是想确保我走在正确的轨道上,并且我没有错过简单“启用”主机名验证的方法。


如果您使用的是 Java 7,则可以通过配置来完成此操作SSLSocket or SSLEngine通过默认信任管理器为您完成此操作。 (这是独立于 Netty 的。)

像这样的东西应该有效:

SSLContext sslContext = SSLContext.getDefault();
SSLEngine sslEngine = sslContext.createSSLEngine();

SSLParameters sslParams = new SSLParameters();
sslParams.setEndpointIdentificationAlgorithm("HTTPS");
sslEngine.setSSLParameters(sslParams);

The SSLEngine实例可以作为参数传递给SslHandler构造函数,如中所述这个例子.

端点识别算法可以是HTTPS或LDAP。对于其他协议,HTTPS 规则应该相当合理。

(当然,您可以通过使用错误的主机名连接到该主机来检查它是否有效,例如使用带有 IP 地址而不是主机名的 URL,假设证书不包含主题备用名称 IP 地址条目为了它。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Netty SSL 主机名验证支持 的相关文章

随机推荐