O App Transport Security do iOS9 afirma que as conexões que não atendem a determinados requisitos falharão. Abaixo estão os requisitos citados do documento da Apple ( link )
Eu verifiquei se meu servidor realmente está usando um certificado com chave RSA de 2048 bits e assinei usando o algoritmo hash SHA256. De qualquer forma, meu aplicativo construído em Xcode7 não conseguiu se conectar ao meu servidor com a configuração ATS padrão. Depois de definir NSExceptionRequiresForwardSecrecy
para NO
no Info.plist
do aplicativo, a conexão foi bem-sucedida. Então, parece que meu servidor não está configurado corretamente com criptografias de sigilo encaminhadas. 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 ( link ).
De acordo com o documento da Apple, com as configurações padrão do ATS, as cifras aceitas incluem:
(Parece que a configuração ssl_ciphers do meu nginx tem essas cifras.)
E se NSExceptionRequiresForwardSecrecy
estiver definido como NO
nas configurações do aplicativo, as seguintes cifras também serão aceitas:
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 criptografias de criptografia para que o aplicativo iOS9 (Xcode7) com configurações ATS padrão possa se conectar com êxito?
ATUALIZADO:
Eu reconfigurei meu servidor seguindo o guia do link . Eu regenho um novo grupo DH com o seguinte comando:
openssl dhparam -out dhparams.pem 2048
e adicionei na minha configuração nginx:
ssl_dhparam dhparams.pem;
Mas a conexão do meu aplicativo ainda falha. A ferramenta nsurl --ats-diagnostics
ainda indica que o problema é causado por sigilo de encaminhamento.
Para fins de diagnóstico, abaixo está a captura de tela da página de resultados ssltest do meu servidor, fornecida por ssllabs :