Como configurar o sigilo de encaminhamento no nginx para que o aplicativo iOS9 (Xcode7) com configurações ATS padrão possa se conectar ao meu servidor?

Como configurar o sigilo de encaminhamento no nginx para que o aplicativo iOS9 (Xcode7) com configurações ATS padrão possa se conectar ao meu servidor?

O App Transport Security do iOS9 afirma que as conexões que não atenderem a determinados requisitos falharão. Abaixo estão os requisitos citados no documento da Apple (https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html)

  • O servidor deve suportar pelo menos o protocolo Transport Layer Security (TLS) versão 1.2.
  • As cifras de conexão são limitadas àquelas que fornecem sigilo de encaminhamento (veja a lista de cifras abaixo).
  • Os certificados devem ser assinados usando um algoritmo de hash de assinatura SHA256 ou superior, com uma chave RSA de 2.048 bits ou superior ou uma chave de curva elíptica (ECC) de 256 bits ou superior.

Verifiquei se meu servidor está realmente usando um certificado com chave RSA de 2048 bits e assinado usando o algoritmo de hash SHA256. De qualquer forma, meu aplicativo criado pelo Xcode7 não conseguiu se conectar ao meu servidor com a configuração ATS padrão. Depois que eu configurei NSExceptionRequiresForwardSecrecyno NOaplicativo Info.plist, no entanto, a conexão foi bem-sucedida. Parece que meu servidor não está configurado corretamente com cifras de sigilo de encaminhamento. Abaixo está minha configuração atual 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';

Meu certificado é emitido pela Comodo e a configuração que usei acima também é do documento de suporte da Comodo (https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/789/37/certificate-installation-nginx).

De acordo com o documento da Apple, com as configurações padrão do ATS, as cifras aceitas incluem:

  • 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

(Parece que a configuração ssl_ciphers do meu nginx possui essas cifras.)

E se NSExceptionRequiresForwardSecrecyestiver definido NOnas configurações do aplicativo, as seguintes cifras também serão aceitas:

  • 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

Com isso definido como NO, meu aplicativo se conecta com êxito ao meu servidor, embora o motivo permaneça desconhecido para mim.

Então, minha pergunta é: como devo configurar o nginx para encaminhar cifras de sigilo para que o aplicativo iOS9 (Xcode7) com configurações ATS padrão possa se conectar com êxito?


ATUALIZADA:

Reconfigurei meu servidor seguindo o guia dehttps://weakdh.org/sysadmin.html. Eu regenero um novo grupo DH com o seguinte comando:

openssl dhparam -out dhparams.pem 2048

e adicionei na minha configuração do nginx:

ssl_dhparam dhparams.pem;

Mas a conexão do meu aplicativo ainda falha. A nsurl --ats-diagnosticsferramenta ainda indica que o problema é causado pelo sigilo de encaminhamento.


Para fins de diagnóstico, segue abaixo oteste SSLcaptura de tela da página de resultados do meu servidor fornecida porsslabs:

insira a descrição da imagem aqui

informação relacionada