Назад | Перейти на главную страницу

Как настроить прямую секретность в nginx, чтобы приложение iOS9 (Xcode) с настройками ATS по умолчанию могло подключаться к моему серверу?

В iOS9 App Transport Security говорится, что соединения, не соответствующие определенным требованиям, не будут выполнены. Ниже приведены требования, приведенные в документе Apple (https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html)

Я проверил, что мой сервер действительно использует сертификат с 2048-битным ключом RSA и подписан с использованием хэш-алгоритма SHA256. Как бы то ни было, моему приложению, созданному на Xcode7, не удалось подключиться к моему серверу с настройкой ATS по умолчанию. После того, как я установил NSExceptionRequiresForwardSecrecy к NO в приложении Info.plistОднако соединение удалось. Похоже, что мой сервер неправильно настроен с использованием шифров прямой секретности. Ниже мои текущие настройки в 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';

Мой сертификат выпущен Comodo, и настройки, которые я использовал выше, также взяты из документа поддержки Comodo (https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/789/37/certificate-installation-nginx).

Согласно документу Apple, с настройками ATS по умолчанию, принятые шифры включают:

(Кажется, что в моей настройке ssl_ciphers моего nginx есть эти шифры.)

И если NSExceptionRequiresForwardSecrecy установлен на NO в настройках приложения также будут приняты следующие шифры:

С этим набором NO, мое приложение успешно подключается к моему серверу, но причина мне неизвестна.

Итак, мой вопрос: как мне настроить nginx для шифров прямой секретности, чтобы приложение iOS9 (Xcode7) с настройками ATS по умолчанию могло успешно подключиться?


ОБНОВЛЕНО:

Я перенастроил свой сервер, следуя руководству от https://weakdh.org/sysadmin.html. Я регенерирую новую группу DH с помощью следующей команды:

openssl dhparam -out dhparams.pem 2048

и добавил его в мою конфигурацию nginx:

ssl_dhparam dhparams.pem;

Но соединение из моего приложения по-прежнему не работает. В nsurl --ats-diagnostics инструмент по-прежнему указывает, что проблема вызвана прямой секретностью.


Для целей диагностики ниже ssltest скриншот страницы результатов моего сервера, предоставленный ssllabs: