问题:由于iOS 9现在使用ATS,我们的移动应用程序无法与我们的网络服务建立安全连接。
服务器设置: Windows 2008 R2 SP1 (VM) IIS7.5,来自digicert的SSL证书。窗户防火墙关闭。
密钥RSA 2048位(e 65537)
颁发者DigiCert SHA2安全服务器CA
签名算法SHA512withRSA
服务器必须至少支持传输层安全(TLS)协议版本1.2。连接密码只限于那些提供前向保密的密码(请参阅下面的密码列表)。证书必须使用SHA256或更好的签名哈希算法进行签名,使用2048位或更大的RSA密钥或256位或更大的椭圆曲线密钥。无效的证书会导致硬失败和没有连接。这些是公认的密码:
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_SHA256TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

结果:总是相似的,评级A或A-。iOS8和iOS9不能协商安全连接。握手模拟会导致Safari和iOS产品的“协议或密码套件不匹配”。


在使用了Apple支持之后,我们进行了一些数据包跟踪捕获:
$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0前三个包是建立TCP连接的经典的三路握手。第四个数据包是iOS向您的服务器发送TLS客户端Hello消息,这是在该TLS连接上设置TLS连接的第一步。我把这条消息拆开了,看上去很合理。在第五个数据包中,服务器简单地丢弃连接(通过发送一个RST)。
有人知道IIS7.5为什么要做RST吗?
发布于 2016-04-05 09:31:54
这个问题很老,但在搜索过程中会被发现。我花了一些时间想办法解决同样的问题。因此,我决定写答案,与其他人分享我的结果。
简单回答:您不应该使用IIS密码来指定密码套件的顺序。我建议您单击“默认”按钮以删除先前设置的顺序,然后使用组策略(“计算机配置”\“管理模板”\“网络”\ "SSL配置设置“)通过本地策略配置密码套件。
确切的黑名单在不同的系统上可能是不同的。你可以在网上找到一些黑名单。例如,RFC 7540 (超文本传输协议版本2 (HTTP/2))的附录A包含一个列表。密码套件是用于TLS1.2的TLS_RSA_WITH_AES_128_CBC_SHA (参见这里)和用于TLS1.3的TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256和TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (参见这里)。TLS_ECDHE_ECDSA_*是唯一重要的是你使用证书与椭圆曲线。其他非常好的密码套件TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256尚未由微软实现。此外,您还可以考虑添加至少TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA来支持来自旧系统的连接,而TLS_RSA_WITH_AES_128_CBC_SHA只在需要支持IE8/ XP的情况下才能支持非常老的系统(Android2.3.7、Java6u45、OpenSSL 0.9.8y)和TLS_RSA_WITH_3DES_EDE_CBC_SHA。因此,您可以在今天使用,例如
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA禁用TLS 1.0后,TLS 1.1将具有更好的安全性或
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256如果你需要有良好的安全性和最好的性能。
例如,您可以设置以下简短的密码套件来解决您的问题:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256下面我包括了一个在Windows 10上的配置示例,我将IIS10配置为使用RSA 2048密钥的Qualys实验室的A+评级,以及由“让我们加密”提供的免费SSL证书。

我在注册表中手动禁用了DES 56/56、RC2 128/128、RC2 40/128、RC2 56/128、RC4 128/128、RC4 40/128、RC4 /128、RC4 64/128、Triple DES 168/168、NULL、MD5、多协议统一哈罗、PCT1.0、SS2.0、SSL3.0和TLS 1.0/1.1 (见KB245030)。我禁用了TLS1.0和TLS1.1协议,因为TLS_FALLBACK_SCSV (降级攻击)到目前为止还无法在IIS中被阻止,这使得无法获得www.ssllabs.com的A+等级。我认为这是一个缺点,但目前支持TLS 1.2非常广泛。顺便说一下,您可以使用DisabledByDefault: 1,但是Enabled: 1用于TLS1.0和TLS1.1。如果要在计算机上运行Server 2008/2012,可能会有帮助。web服务器将不使用TLS 1.0和TLS 1.1,但SQL server使用。
最重要的一步,它得到了我的很多时间,也是你的主要问题是配置密码套件。我用gpedit.msc做的。我选择了“计算机配置”\“管理模板”\“网络”\ "SSL配置设置“,并将"SSL密码套件顺序”值配置为
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA上面的顺序可能不是最优的,我也不确定IIS7.5是否支持上述所有协议(我在Windows 10中使用了IIS10.0)。尽管如此,我确信您的问题与密码套件列表有关,因为我的问题与您在使用密码套件列表时所描述的问题完全相同。
无论如何,在配置了Group Polity中的上述设置并重新启动计算机(在我的测试中gpupdate /force /target:computer是不够的)之后,我获得了“握手模拟”部分的A+评级和以下测试结果列表:




可以看出,成功地支持以下客户端的iOS:
Safari 6 / iOS 6.0.1
Safari 7 / iOS 7.1
Safari 8 / iOS 8.4
Safari 9 / iOS 9对于我来说,不支持TLS1.2的客户端现在似乎不那么重要了,我认为上面的配置在支持遗留客户端和使用安全协议之间是一个很好的折衷。
发布于 2015-09-22 21:23:37
如果您的IIS Crypto映像是最近的,请保留它们的设置,但是启用SHA、Diffie-Hellman和PKCS。这将使您的A评级,但允许iOS 8和更低的连接。
发布于 2016-05-30 22:08:09
我为此挣扎了几天。特别是,我使用Xamarin从一个iOS应用程序连接到一个ASP.NET Web 2 rest服务,并使用OAuth2令牌身份验证。
最终对我有用的是使用IIS Crypto的最佳实践。然后编辑它为密码套件顺序设置的注册表项:
KEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002\Function我的成功有以下价值:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256TLS_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,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHATLS_RSA_WITH_RC4_128_SHA,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_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_RC4_128_MD5,TLS_RSA_WITH_DES_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
最后一种方法是使用查尔斯代理( Charles )自动协商TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。导致我注意到这一点的是,在Charles上(安装了模拟器证书)连接是成功的,但是失败了。把它在谈判中使用的套件加进去,就能奏效了。它看起来(?)代理正在与我的rest服务重新协商,使用的是我的服务器支持的内容,而不是iOS客户端。
注意,许多密码套件是从ssllab的各种iOS/OSX设备首选套件规范中获得的。上面的值应该与所有的东西握手,除了XP上的IE6,根据ssllabs,有一个A等级。
https://serverfault.com/questions/724077
复制相似问题