网状SSL主机名验证支持(Netty SSL hostname verification suppo

2019-08-02 13:17发布

从我可以告诉,没有“标志”或配置设置,我可以使用,使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
            ...

我只是想确保我在正确的轨道上,而我绝不错过一个办法简单地“使能”主机名验证。

Answer 1:

如果您使用的是Java 7,您可以通过配置做到这一点SSLSocketSSLEngine通过默认信任管理器来为你做它。 (这是独立的Netty的。)

像这样的东西应该工作:

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

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

所述SSLEngine实例可以作为一个参数传递给传递SslHandler构造,如在本实施例中 。

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

(当然你也可以检查它的工作原理是连接到主机使用了错误的主机名,例如使用的IP地址而不是主机名的URL,假设该证书不包含主题备用名称IP地址条目为了它。)



文章来源: Netty SSL hostname verification support