문제 : iOS 9에서 ATS를 사용하므로 모바일 앱에서 더 이상 웹 서비스에 안전하게 연결할 수 없습니다.
배경 : iOS 9, 앱 전송 보안 소개
서버 설정 : Windows Server 2008 R2 SP1 (VM) IIS 7.5, digicert의 SSL 인증서. Windows 방화벽이 꺼져 있습니다.
키 RSA 2048 비트 (e 65537)
발급자 DigiCert SHA2 보안 서버 CA
RSA를 사용한 서명 알고리즘 SHA512
다음은 App Transport Security 요구 사항입니다.
서버는 최소한 TLS (Transport Layer Security) 프로토콜 버전 1.2를 지원해야합니다. 연결 암호는 순방향 보안을 제공하는 암호로 제한됩니다 (아래 암호 목록 참조). 인증서는 2048 비트 이상의 RSA 키 또는 256 비트 이상의 Elliptic-Curve와 함께 SHA256 이상의 서명 해시 알고리즘을 사용하여 서명해야합니다. (ECC) 키. 유효하지 않은 인증서는 하드 실패로 연결되지 않습니다. 허용되는 암호는 다음과 같습니다.
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
시도한 것 :
- 도메인이 작동하도록 모바일 앱에 예외를 추가했지만이 보안되지 않은 방법을 사용하고 싶지는 않지만 SSL을 수정하고 싶습니다.
- 사용 IIS 암호화를 '모범 사례'시도 'PCI'및 사용자 지정 설정을 사용할 수 있습니다. 심지어 위의 목록으로 암호화 제품군을 수정하고 순서를 바꾸려고했습니다. 각 시도 후에 서버가 재부팅되고 SSL Labs 가 실행되었습니다 (캐시를 지운 후). 나는 F 등급에서 A, 심지어 A-로 성공적으로 전환했지만 iOS 8 및 9에서만 보안 연결을 설정할 수 없었습니다. (NSURLErrorDomain 코드 = -1200 및 _kCFStreamErrorCodeKey = -9806)
- VM을 복원하고 powershell 스크립트를 사용해 보았습니다 SSL Perfect Forward Secrecy 및 TLS 1.2를위한 IIS 설정 저는 파워 스크립트에서 필요한 것의 최소 목록으로 암호를 편집하는 두 번째 시도를했습니다.
결과 : 항상 비슷한 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
처음 3 개의 패킷은 TCP 연결을 설정하는 클래식 SYN-SYN-ACK-ACK 3 방향 핸드 셰이크입니다. 네 번째 패킷은 iOS가 서버에 TLS Client Hello 메시지를 보내는 것으로, TCP 연결을 통한 TLS 연결 설정의 첫 번째 단계입니다. 나는이 메시지를 떼어 냈으며 충분히 합리적으로 보인다. 다섯 번째 패킷에서 서버는 단순히 RST를 전송하여 연결을 끊습니다.
IIS 7.5가 RST를 수행하는 이유를 아는 사람이 있습니까?