iOS 9 ATS — отключить прямую секретность для всех доменов

С включенной функцией ATS в iOS 9 многие из моих клиентов не могут выполнить требование прямой секретности. Однако они могут соответствовать требованиям https и TLS 1.2. В связи с этим я хотел бы ослабить требования к прямой секретности, сохранив при этом https и TLS 1.2.

Мне было интересно, нашел ли кто-нибудь способ использовать NSExceptionRequiresForwardSecrecy или NSThirdPartyExceptionRequiresForwardSecrecy для отключения прямой секретности для всех доменов.

Я пытался использовать * для NSExceptionDomains или *.com, но когда я использовал это, ссылка на проблему не работала. Когда я использую его domain.com, загрузится проблемная ссылка. Я просматривал Apple Docs, но не нашел способа достичь своей цели.

Можно ли просто отключить секретность пересылки для всех доменов, как можно полностью отключить ATS, установив для NSAppTransportSecurity/NSAllowsArbitraryLoads значение true?

Спасибо!


person Polar Bear    schedule 03.02.2016    source источник
comment
Думаю это невозможно. Либо перечислите все домены ваших клиентов в исключения ATS, либо разрешите произвольную загрузку. Вы также можете сделать и то, и другое, поэтому ATS будет использовать TLS 1.2 (но без прямой секретности) для известных доменов и отключать для неизвестных.   -  person Alex Skalozub    schedule 04.02.2016
comment
Алекс, я пришел к такому же выводу, в итоге мы добавили поддержку исключений на основе домена.   -  person Polar Bear    schedule 11.02.2016


Ответы (2)


Да, это возможно. Вероятно, у вас есть хотя бы один домен, к которому вы обязательно подключитесь. Если это не так, просто попробуйте использовать любой надежный веб-сайт (google.com, facebook.com и т. д.). Вы должны добавить правило NSExceptionDomains для этого домена, указав конфигурацию NSAppTransportSecurity следующим образом:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>google.com</key>   
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>                
                <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

К вашему сведению, приложения facebook используют те же конфигурации, что и NSAppTransportSecurity.

person Alexander    schedule 11.02.2016
comment
Мне удалось подключиться к моему веб-серверу с помощью TLS 1.2 с настройками, указанными выше, однако во время моего процесса авторизации билет, сгенерированный из веб-сервера, намного короче, чем сервер билетов, сгенерированный для моего приложения Windows (этот билет Windows работает), поэтому, когда я отправляю еще один вызов на сервер с билетом, сервер не может распознать билет. Что я сделал не так? - person JIANG; 18.03.2017

Это возможно, попробуйте следующее.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Даже вы можете добавить конкретное исключение,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>

        ...

    </dict>
</dict>
person Nilesh Patel    schedule 11.02.2016