【问题标题】:Netty SSL hostname verification supportNetty SSL 主机名验证支持
【发布时间】:2012-10-30 05:14:45
【问题描述】:

据我所知,没有“标志”或配置设置可用于在 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
            ...

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

【问题讨论】:

    标签: ssl netty hostname


    【解决方案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 构造函数,如this example 中所述。

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

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

    【讨论】:

    • 非常感谢您的快速回答。完全有道理。而且,总的来说,感谢您在这里和其他地方的所有精彩帖子。关于 SSL,您的名字随处可见……我一直非常依赖您的知识和帮助。谢谢!!
    • @bruno 你可以去聊天吗?chat.stackoverflow.com/rooms/19372/…
    • 到目前为止,我无法让它工作。当我启用 HTTPS 端点识别算法时,请求就会超时(对等证书是否具有正确的主机名)。当我知道更多时,我会在这里添加更多。
    • 一个重要提示:创建SSLEngine时,需要传入目标服务器的主机和端口:createSSLEngine(targetHost, targetPort)。否则你会遇到这里记录的问题:stackoverflow.com/questions/13390964/…
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 2021-10-02
    • 2023-04-01
    • 1970-01-01
    • 2020-10-08
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多