我们的应用已经部署到AWS基础设施很长一段时间了。
我们使用ClaudFlare进行缓存和CDN。我们有两个应用程序-Java(Tomcat8)和WordPress(PHP Nginx + FastCGI)。
对于Java应用程序,我们使用带有OpenJDK 8的EC2实例。另外,我们在另一个EC2实例上使用WordPress。
Java应用程序通过https协议上的直接调用与WordPress通信。
我们使用Puppet进行我们的AWS基础设施配置。
一切工作正常,但是几天前我们的Java应用程序无法通过https连接到WordPress,出现以下异常:
Received fatal alert: handshake_failure
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure此外,我们无法通过curl连接到相同的WordPress url,并显示以下错误:
curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).这很奇怪,因为我们这一方完全没有改变。
仅作为实验-我们已经禁用了ClaudFlare,并且我们的系统开始正常工作。在此之后,我们启用了ClaudFlare,系统再次失败。
只有从OpenJDK切换到OracleJDK才能完全解决这个问题。
CloudFlare告诉我们,他们的SSL没有任何变化。
所以我想知道这个问题的原因是什么?AWS端可能发生了一些变化(基础架构或某些软件包)
发布于 2016-07-22 20:22:41
您需要支持TLS加密套件;CloudFlare只支持CloudFlare协议,除此之外,它们只支持安全密码。如果OpenSSL不支持CloudFlare使用的任何密码,您可能需要在客户端上更新它的版本。
如果您使用的是免费的CloudFlare计划,则只支持ECC ciphers (ECDHE-*),即使用Elliptic Curve Cryptography的密码。如果您使用的是免费CloudFlare计划,则需要确保您的客户端及其操作系统支持椭圆曲线加密。
其Nginx SSL configuration如下所示:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;一个更不可能的问题可能是您的客户端不支持SNI浏览器。CloudFlare颁发的免费SSL证书需要SNI support (服务器名称指示);请确保您的Java版本支持它。如果您不想这样做,付费CloudFlare计划将支持非SNI客户端。
https://stackoverflow.com/questions/38460819
复制相似问题