如何在Nginx中设置前向保密性,以便具有默认ATS设置的iOS9(Xcode7)应用程序可以连接到我的服务器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在Nginx中设置前向保密性,以便具有默认ATS设置的iOS9(Xcode7)应用程序可以连接到我的服务器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3542字,纯文字阅读大概需要6分钟。
内容图文
iOS9的应用程序传输安全性指出,不满足某些要求的连接将失败.以下是Apple文档(https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html)中引用的要求
>服务器必须至少支持传输层安全性(TLS)协议版本1.2.
>连接密码仅限于提供前向保密性的密码(请参阅下面的密码列表.)
>证书必须使用SHA256或更高版本的签名哈希算法进行签名,并使用2048位或更高版本的RSA密钥或256位或更高版本的椭圆曲线(ECC)密钥.
我检查过我的服务器是否确实在使用具有2048位RSA密钥的证书,并使用SHA256哈希算法进行了签名.无论如何,我的Xcode7构建的应用程序无法使用默认的ATS设置连接到服务器.但是,在应用程序的Info.plist中将NSExceptionRequiresForwardSecrecy设置为NO之后,连接成功.因此,看来我的服务器未正确配置前向保密密码.以下是我在nginx.conf中的当前设置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
我的证书是由Comodo颁发的,我上面使用的设置也来自Comodo的支持文档(https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/789/37/certificate-installation-nginx).
根据Apple的文档,使用默认的ATS设置,可接受的密码包括:
> TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
> TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
> TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
> TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
> TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
> TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
> TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
> TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
> TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
> TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
(似乎我的nginx的ssl_ciphers设置具有这些密码.)
并且如果在应用程序的设置中将NSExceptionRequiresForwardSecrecy设置为NO,则以下密码也将被接受:
> LS_RSA_WITH_AES_256_GCM_SHA384
> TLS_RSA_WITH_AES_128_GCM_SHA256
> TLS_RSA_WITH_AES_256_CBC_SHA256
> TLS_RSA_WITH_AES_256_CBC_SHA
> TLS_RSA_WITH_AES_128_CBC_SHA256
> TLS_RSA_WITH_AES_128_CBC_SHA
将此设置为“否”后,尽管原因仍然未知,但我的应用程序已成功连接到服务器.
所以我的问题是,我应该如何为正向保密密码设置nginx,以便具有默认ATS设置的iOS9(Xcode7)应用程序可以成功连接?
更新:
根据@keno的建议,我按照https://weakdh.org/sysadmin.html的指南重新配置了服务器.我使用以下命令重新生成了新的DH组:
openssl dhparam -out dhparams.pem 2048
并将其添加到我的nginx配置中:
ssl_dhparam dhparams.pem;
但是从我的应用程序连接仍然失败. nsurl –ats-diagnostics工具仍指示该问题是由向前保密引起的.
出于诊断目的,以下是ssllabs给出的我服务器的ssltest结果页面屏幕截图:
解决方法:
您要在2015年10月运行nginx / 1.0.15(基于您的Qualys屏幕截图),以进行新的部署,该版本已于2012年4月发布,作为1.0系列的最终维护版本?
尽管https://www.digicert.com/ssl-support/ssl-enabling-perfect-forward-secrecy.htm#nginx_forward_secrecy和https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy声称nginx 1.0.6是正向保密所需的最低nginx版本,但也可能是您的SSL版本也不太幸运成为OpenSSL 1.0.1c.
内容总结
以上是互联网集市为您收集整理的如何在Nginx中设置前向保密性,以便具有默认ATS设置的iOS9(Xcode7)应用程序可以连接到我的服务器?全部内容,希望文章能够帮你解决如何在Nginx中设置前向保密性,以便具有默认ATS设置的iOS9(Xcode7)应用程序可以连接到我的服务器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。