(八)netty的SSL renegotiation攻击漏洞

为了满足安全规范,从http改造成https(见(四)启用HTTPS),然而启用https后就可以高枕无忧了吗?绿盟告诉你:当然不,TLS Client-initiated 重协商攻击(CVE-2011-1473)了解一下。

1. 漏洞

报告是这样的:

详细描述    该漏洞存在于SSL renegotiation的过程中。对于使用SSL重协商功能的服务都会受其影响。特别的,renegotiation被用于浏览器到服务器之间的验证。虽然目前可以在不启用renegotiation进程的情况下使用HTTPS,但很多服务器的默认设置均启用了renegotiation功能。该漏洞只需要一台普通电脑和DSL连接即可轻易攻破SSL服务器。而对于大型服务器集群来说,则需要20台电脑和120Kbps的网络连接即可实现。SSL是银行、网上电子邮件服务和其他用于服务器和用户之间保护私人数据并安全通信必不可少的功能。所以本次拒绝服务漏洞影响范围非常广危害非常大。
解决办法    使用SSL开启重协商的服务都会受该漏洞影响.

Apache解决办法:
   升级到Apache 2.2.15以后版本

IIS解决办法:
    IIS 5.0启用SSL服务时,也会受影响。可以升级IIS 6.0到更高的版本。

Lighttpd解决办法:
    建议升级到lighttpd 1.4.30或者更高,并设置ssl.disable-client-renegotiation = "enable"。  
    http://download.lighttpd.net/lighttpd/releases-1.4.x/
 
Nginx解决办法:
    0.7.x升级到nginx 0.7.64 
    0.8.x升级到 0.8.23 以及更高版本。
    http://nginx.org/en/download.html

Tomcat解决办法:
 1、使用NIO connector代替BIO connector,因为NIO不支持重协商,参考如下配置:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol">
(可能会影响Tomcat性能);
 2、配置Nginx反向代理,在Nginx中修复OpenSSL相关问题。
    参考链接:
    https://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
    https://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html
    http://tomcat.apache.org/security-7.html#Not_a_vulnerability_in_Tomcat
    https://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Connector_Comparison

Squid解决办法:
    升级到3.5.24以及以后版本
    http://www.squid-cache.org/Versions/

其它服务解决方案请联系各应用厂商确认关闭重协商的方法。

然而我的http server用的是netty(netty既支持jdk ssl,也支持open ssl,open ssl的安全性和性能都比jdk ssl来的高,可以参考博文)。

解决方案中并无想要的信息,仅有一个用nginx增加反向代理,这种方式并无法让我感到满意,网上搜了一堆信息,但并没有找到想要的答案,因此只能从源码找起了。

2. 找http server

方式是直接从启动入口,通过find usages往上找。

@Override
    public void start() throws WebServerException {
        if (this.nettyContext == null) {
            try {
                this.nettyContext = startHttpServer();
            }
            catch (Exception ex) {
                if (findBindException(ex) != null) {
                    SocketAddress address = this.httpServer.options().getAddress();
                    if (address instanceof InetSocketAddress) {
                        throw new PortInUseException(
                                ((InetSocketAddress) address).getPort());
                    }
                }
                throw new WebServerException("Unable to start Netty", ex);
            }
            NettyWebServer.logger.info("Netty started on port(s): " + getPort());
            startDaemonAwaitThread(this.nettyContext);
        }
    }
NettyWebServer
@Override
    public WebServer getWebServer(HttpHandler httpHandler) {
        HttpServer httpServer = createHttpServer();
        ReactorHttpHandlerAdapter handlerAdapter = new ReactorHttpHandlerAdapter(
                httpHandler);
        return new NettyWebServer(httpServer, handlerAdapter, this.lifecycleTimeout);
    }
NettyReactiveWebServerFactory
private HttpServer createHttpServer() {
        return HttpServer.builder().options((options) -> {
            options.listenAddress(getListenAddress());
            if (getSsl() != null && getSsl().isEnabled()) {
                SslServerCustomizer sslServerCustomizer = new
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty是一款高性能的网络应用框架,支持SSL/TLS加密来保护网络通信的安全性。SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是网络通信中广泛使用的加密协议,用于在客户端和服务器之间建立安全的通信信道。 Netty提供了一些组件和类来实现SSL/TLS加密。首先,我们需要使用javax.net.ssl包中的类来创建SSLContext对象。SSLContext是SSL/TLS协议的入口点,它包含用于加密和解密数据的加密算法和密钥。我们需要为SSLContext对象配置密钥库和信任库,密钥库用于存储证书和私钥,而信任库用于存储可信的证书。 接下来,我们需要创建SslHandler对象,将其添加到Netty的ChannelPipeline中。SslHandler作为一个ChannelHandler,负责处理SSL/TLS握手过程和数据的加密解密。当建立连接时,SslHandler会自动执行握手过程,包括协商加密算法、验证证书以及生成会话密钥等。 一旦握手完成,SslHandler会将数据加密后发送到网络,并将接收到的密文解密成明文。这样可以确保在网络传输过程中的数据保密性和完整性。此外,SslHandler还提供了一些方法来获取会话信息,如远程主机的证书和协商的加密算法。 使用NettySSL/TLS加密功能能够有效地提高网络通信的安全性。通过配置SSLContext和添加SslHandler,我们可以方便地实现对网络通信的加密和解密。无论是在客户端还是服务器端,都可以使用NettySSL/TLS加密功能来保护数据的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值