Tomcat关于DH算法问题解决方案

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Tomcat关于DH算法问题解决方案的详述

Tomcat 老版本存在的问题

Tomcat6的版本中是支持SSLv3和Diffie-Hellman算法的。研究人员指出,LogJam出现在常用的密钥交换加密演算法中(Diffie-Hellman key exchange),这个演算法让HTTPS、SSH、IPSec及SMTPS等网络协定产生共享的加密密钥,并建立安全连线。LogJam漏洞使黑客得以发动中间人攻击,让有漏洞的TLS连线降级为512-bit出口等级的密码交换安全性,再读取或修改经由TLS加密连线传输的资料。该漏洞情况与三月爆发的FREAK颇为类似,差别在于它是基于TLS协定的漏洞,而非实际的瑕疵,而且攻击目的为Diffie-Hellman,不是RSA的密钥交换。

Firefox 39版本后浏览器要求服务器必须关闭服务端 SSLv3存在漏洞的加密套件,否则禁止访问服务器页面,并出现 在服务器密钥交换握手信息中 SSL 收到了一个弱临时 Diffie-Hellman 密钥。(错误码: ssl_error_weak_server_ephemeral_dh_key)错误。

为彻底解决 Tomcat上默认开启SSLv3和使用弱口令算法导致的Firefox无法访问的问题,建议使用以下两个方案:

方案一: 升级 Tomcat版本到7及其以上版本。
由于升级涉及到业务系统调试和改造,推荐您视您的业务系统的正常使用而定,升级后您需要在SSL配置中配置

<Connector port="443"
protocol="org.apache.coyote.http11.Http11Protocol"
SSLEnabled="true"
maxThreads="150" 
scheme="https" 
secure="true"
keystoreFile="conf\keystore.jks"
keystorePass="password"
clientAuth="false"
sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"
ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"/>

方案二: 采用 Apache/Nginx 与 Tomcat 整合的方式,将证书迁移到 Apache/Nginx 的 Web 前端上进行配置。
Apache 与 Tomcat 整合的方式,需要在您原有服务器上安装配置 Apache。该方案风险性极小,您 Tomcat上部署的应用不需要做任何变更,只需要将原有 Tomcat 上的证书进行格式转换,并将证书部署到前端 Apache上即可。

Apache + Tomcat 的整合配置:

我们需要使用Apache的ProxyPass来转发URL后端,需要下面两个模块

mod_proxy.so
mod_proxy_http.so

我们还需要实现客户端浏览器访问http自动转成https协议,需要下面的模块

mod_rewrite.so

编辑/etc/httpd/conf/httpd.conf中

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#具备以上2行是说明apache具备将URL转发给Tomcat的能力
#测试页面add by sxr
ProxyPass /examples http://192.168.1.10:8080/examples/
ProxyPassReverse /examples http://192.168.1.10:8080/examples/

测试,访问192.168.1.10/examples后,自动跳转到了后端Tomcat的192.168.1.10:8080/examples页面。

配置Apache在https协议中实现ProxyPass转发URL到Tomcat
实现原理:客户浏览器访问Apache的htts协议,在Aapache的ssl.conf配置文件中配置ProxyPass转发,将请求转发给后端的Tomcat服务器,这样就实现了在https协议的基础上Apache将URL转发给Tomcat。

注意:此时,客户端浏览器必须使用https://192.168.1.10/docs访问才能实现URL转发。

1、 编辑/etc/httpd/conf/httpd.conf

Include conf.d/*.conf
#加载其他的配置文件,主要是为了使用ssl.conf保存。

2、编辑/etc/httpd/conf.d/ssl.conf,支持https协议

LoadModule ssl_module modules/mod_ssl.so
Listen 443
##
## SSL Virtual Host Context
##
   
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLCertificateFile conf/ssl.crt/server.crt    将服务器证书配置到该路径下
SSLCertificateKeyFile conf/ssl.key/server.key  将服务器证书私钥配置到该路径下
#SSLCertificateChainFile conf/ssl.crt/ca.crt 删除行首的“#”号注释符,并将中级CA证书intermediatebundle.crt配置到该路径下


SSLOptions +StdEnvVars
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
#在https协议中实现ProxyPass转发URL,实际就是在ssl.conf中添加ProxyPass语句
ProxyPass /test http://192.168.1.10:8080/examples
ProxyPassReverse /test http://192.168.1.10:8080/examples
ProxyPass /docs http://192.168.1.10:8080/docs
#注意,末尾没有/符号,http://192.168.1.10:8080/docs/是错误的
ProxyPassReverse /docs http://192.168.1.10:8080/docs
#注意:转发到Tomcat的URL中末尾不能加/符号。

Apache 实现ProxyPass转发URL到Tomcat并实现http自动转https
写成ProxyPassReverse /docs http://192.168.1.10:8080/docs

3、 配置Apache,实现http自动转换成https协议
上面,我们已经完成了在https协议上实现将URL转发给Tomcat。接下来,我们只要配置Apache,实现http自动转成https协议,就能够让客户端浏览器输入普通地址自动跳转到加密的https的页面,并且页面还是后端Tomcat服务提供的功能。
编辑/etc/httpd/conf/httpd.conf配置文件,下面语句实现将整个Apache站点都自动转成https协议

# add by sxr
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 10
保存,重启Apache服务生效
# /etc/init.d/httpd restart
Stopping httpd:[OK]
Starting httpd:[OK]
目录
相关文章
|
6月前
|
存储 算法 物联网
R-Tree算法:空间索引的高效解决方案
【5月更文挑战第17天】R-Tree是用于多维空间索引的数据结构,常用于地理信息系统、数据库和计算机图形学。它通过分层矩形区域组织数据,支持快速查询。文章介绍了R-Tree的工作原理、应用场景,如地理信息存储和查询,以及Python的`rtree`库实现示例。此外,还讨论了R-Tree的优势(如空间效率和查询性能)与挑战(如实现复杂和内存消耗),以及优化和变种,如R* Tree和STR。R-Tree在机器学习、实时数据分析等领域有广泛应用,并与其他数据结构(如kd-trees和quad-trees)进行比较。未来趋势将聚焦于优化算法、动态适应性和分布式并行计算。
193 1
|
3月前
|
算法 安全 网络安全
Diffie-Hellman (DH) 算法的工作原理
【8月更文挑战第23天】
225 0
|
5月前
|
存储 算法 Java
分布式唯一ID解决方案-雪花算法
分布式唯一ID解决方案-雪花算法
48 0
|
6月前
|
算法 数据处理 C语言
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
|
存储 算法 定位技术
探索最短路径问题:寻找优化路线的算法解决方案
在现实生活中,我们常常面临需要找到最短路径的情况,如地图导航、网络路由等。最短路径问题是一个关键的优化问题,涉及在图中寻找两个顶点之间的最短路径,以便在有限时间或资源内找到最快的方式。本文将深入探讨最短路径问题的定义、经典算法以及实际应用,为您揭示一种重要的算法解决方案。
286 0
|
6月前
|
存储 算法 Java
数据结构与算法面试题:实现一个哈希表,并考虑哈希冲突的解决方案。
数据结构与算法面试题:实现一个哈希表,并考虑哈希冲突的解决方案。
49 0
|
存储 算法 NoSQL
常见分布式ID解决方案总结:数据库、算法、开源组件
分布式ID解决方案是用于在分布式系统中生成唯一标识符的方案。常见的分布式ID解决方案可总结为3点:数据库方案、算法方案、开源组件方案。
690 1
常见分布式ID解决方案总结:数据库、算法、开源组件
|
存储 监控 NoSQL
深入探究Redis:内存模型、哨兵选举算法与脑裂解决方案
深入探究Redis:内存模型、哨兵选举算法与脑裂解决方案
694 1
|
消息中间件 存储 编解码
带你读《云原生架构白皮书2022新版》——网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路
带你读《云原生架构白皮书2022新版》——网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路
505 3
|
算法 定位技术
探索最短路径问题:寻找优化路线的算法解决方案
探索最短路径问题:寻找优化路线的算法解决方案
189 0