Как обеспечить безопасность вызовов API высокого уровня - iOS - PullRequest
0 голосов
/ 21 сентября 2018

Что касается обычных вызовов API, он сможет отслеживать использование прокси-сервера для отладки сети, такого как Charles.

Таким образом, данные вверх и вниз были зашифрованы, чтобы избежать одного и того же.

Но когда я проверяю некоторые приложения, он также скрывает URL-адрес api.Как добиться того же в iOS.

Пример:

enter image description here

Примечание. Также проверяется добавлением сертификата ssl в моем телефоне.Тем не менее это не показано.

1 Ответ

0 голосов
/ 01 октября 2018

Этот механизм называется SSL Закрепление .

Теория:

Что такое пиннинг? .

Закрепление - это необязательный механизм, который можно использовать для повышения безопасности службы или сайта, использующих сертификаты SSL.Пиннинг позволяет вам указать криптографическую идентификацию, которую должны принимать пользователи, посещающие ваш сайт.

Звучит сложно, но на самом деле все довольно просто.Давайте начнем с разбивки этого:

Криптографическая идентификация - это файл, который может подтвердить идентификацию сервера / хоста с помощью криптографии.Сертификат SSL, открытый ключ и CSR - все это примеры криптографической идентификации.Затем этот вывод сообщит клиенту, что он должен помнить это удостоверение (или идентификаторы) и принимать его только при установлении будущих безопасных соединений.

Итак, если вы хотите использовать закрепление, вы должны настроить свой сервер (в некоторых ситуациях -подумайте о внутренних системах - вы также можете настроить клиентов) и указать, что вы хотите закрепить.Браузеры и другие клиенты будут оценивать закрепленную идентификацию на каждом соединении.Если было представлено любое другое удостоверение, клиент прервал соединение (, что произошло в вашем случае с Charles Proxy ).

В целом: SSL-соединение сообщает клиенту зашифрованное соединение с любым идентификатором, соответствующим этому хосту.Прикрепление сообщает клиенту конкретную идентификационную информацию, которую он должен принять при создании безопасного соединения.

Так, например, если наш сайт - example.com, мы можем закрепить идентификационную информацию.Когда пользователь посещает наш сайт, он получает прикрепленную информацию.При будущем посещении их браузер предпримет действия, если мы попытаемся заставить клиента использовать другую личность.

Практика:

Основной ключSSL, закрепляющий этот сертификат сервера, будет сохранен в комплекте приложений.Затем, когда клиент получает сертификат от сервера, он сравнивает 2 сертификата, чтобы убедиться, что они совпадают, прежде чем устанавливать соединение.

Сетевая библиотека HTTP Alamofire имеет встроенную функциюдля закрепления SSL и очень прост в использовании:

let pathToCert = Bundle.main.path(forResource: "name-of-cert-file", ofType: "cer")
let localCertificate: NSData = NSData(contentsOfFile: pathToCert!)!

let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
    certificates: [SecCertificateCreateWithData(nil, localCertificate)!],
    validateCertificateChain: true,
    validateHost: true
)

let serverTrustPolicies = [
    "my-server.com": serverTrustPolicy
]

let sessionManager = SessionManager(
    serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)

Вы можете прочитать больше здесь и здесь о том, как добиться закрепления SSL в вашем быстром приложении.

...