기본 ATS 설정이 있는 iOS9(Xcode7) 앱이 내 서버에 연결할 수 있도록 nginx에서 순방향 보안을 설정하는 방법은 무엇입니까?

기본 ATS 설정이 있는 iOS9(Xcode7) 앱이 내 서버에 연결할 수 있도록 nginx에서 순방향 보안을 설정하는 방법은 무엇입니까?

iOS9의 앱 전송 보안에는 특정 요구 사항을 충족하지 않는 연결은 실패한다고 명시되어 있습니다. 다음은 Apple 문서(https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html)

  • 서버는 최소한 TLS(Transport Layer Security) 프로토콜 버전 1.2를 지원해야 합니다.
  • 연결 암호는 순방향 비밀성을 제공하는 암호로 제한됩니다(아래 암호 목록 참조).
  • 인증서는 2048비트 이상의 RSA 키 또는 256비트 이상의 ECC(타원 곡선) 키와 함께 SHA256 이상의 서명 해시 알고리즘을 사용하여 서명되어야 합니다.

내 서버가 실제로 2048비트 RSA 키가 있는 인증서를 사용하고 SHA256 해시 알고리즘을 사용하여 서명했는지 확인했습니다. 어쨌든 내 Xcode7 기반 앱이 기본 ATS 설정으로 내 서버에 연결하지 못했습니다. 그러나 앱에서 으로 NSExceptionRequiresForwardSecrecy설정 한 후에는 연결이 성공했습니다. 따라서 내 서버가 순방향 보안 암호로 올바르게 구성되지 않은 것 같습니다. 다음은 nginx.conf의 현재 설정입니다.NOInfo.plist

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

이를 로 설정하면 NO내 앱이 내 서버에 성공적으로 연결되지만 이유는 아직 알 수 없습니다.

그래서 내 질문은 기본 ATS 설정이 있는 iOS9(Xcode7) 앱이 성공적으로 연결할 수 있도록 순방향 비밀 암호화를 위해 nginx를 어떻게 설정해야 합니까?


업데이트됨:

가이드에 따라 서버를 재구성했습니다.https://weakdh.org/sysadmin.html. 다음 명령을 사용하여 새 DH 그룹을 재생성합니다.

openssl dhparam -out dhparams.pem 2048

내 nginx 구성에 추가했습니다.

ssl_dhparam dhparams.pem;

하지만 내 앱의 연결이 여전히 실패합니다. 도구 nsurl --ats-diagnostics는 여전히 순방향 보안으로 인해 문제가 발생했음을 나타냅니다.


진단 목적으로는 아래와 같습니다.SSL테스트에서 제공한 내 서버의 결과 페이지 스크린샷슬랩:

여기에 이미지 설명을 입력하세요

관련 정보