iOSアプリでSSLピン留めを実行する方法
公開: 2020-02-24人々が家を出た瞬間、彼らはオープンなWi-Fiネットワークを探し始めます。 彼らが空港で待っているかカフェに座っているかにかかわらず、主要な議題はオープンなWi-Fi接続を見つけることです。
恐ろしいことに、ハッカーも同じ探求をしています。 また、ユーザーがオープンネットワークで接続要求を開始するのを待ってから、フィッシングの頭脳を動かし、機密データやさらに悪いことに銀行口座のお金を奪います。
HTTPSはある程度効果的ですが、SSLプロトコルであり、解読不能で大部分が安全であることにより、ユーザーを安全にすることが知られています。 しかし、Man-In-The-Middle(MITM)攻撃は、これを破る方法も見つけました。
ここで、SSLピン留め技術がモバイルアプリのセキュリティのベストプラクティスの1つとして登場します。 特にプラットフォームについて話すと、それは問題を解決する素晴らしい仕事をする理想的なiphoneアプリのセキュリティソリューションです。
この記事では、これらの中間者攻撃を防ぐためにiOSアプリにSSLピン留めを組み込むタイプとプロセスについて説明します。 OWASPモバイルセキュリティテストの実践のアクティブな部分であるプロセス。
SSL証明書のピン留め方法の種類
以下で説明するように、SSLピン留めテストには主に2つの方法があります。
- 証明書を固定する–サーバーの証明書をダウンロードして、アプリにバンドルできます。 実行時に、アプリはサーバー証明書を埋め込み済みの証明書と比較します。
- 公開鍵を固定する–コード内の証明書の公開鍵を文字列として取得できます。 実行時に、アプリケーションは証明書の公開鍵をコードにハードコーディングされているものと比較します。
iOSの2つのSSL固定方法から選択するかどうかは、サーバーの構成と個々のニーズによって異なります。 最初のオプションを選択すると、サーバーが証明書を変更したときにアプリをアップロードする必要があります。そうしないと、アプリが機能しなくなります。 2番目のオプションを選択すると、公開鍵は変更されないため、鍵ローテーションポリシーに違反する可能性があります。
次に、iOSアプリにSSLピン留めを実装する手順を見てみましょう。
*注:以下の手順は、Swiftを使用したiOS証明書のピン留めのプロセスに従います。
iOSアプリにSSLピン留めを実装する方法
1. NSURLSession
NSURLSessionの場合、SSLピン留めを処理するための主要なメソッドはURLSession:didReceiveChallenge:completionHandler:delegateです。 開発者は、URLSessionDelegateに準拠するようにクラスを設定し、この関数をクラスに貼り付ける必要があります。
この関数は、「リモートサーバーからの認証要求に応答して、代理人に資格情報を要求します」 。 次に、 iPhoneアプリ開発者は、サーバーからの証明書をアプリバンドルに保存されている証明書と比較します。 2つの証明書が同一であることが判明した場合、認証によって証明書が通過し、クライアントはサーバーに接続できるようになります。
2.Alamofire証明書のピン留め
Alamofireは、Swift言語のHTTPネットワーキングで最も有名なライブラリの1つです。 iOS SwiftのSSLピン留め機能が組み込まれており、非常に使いやすいです。 Alamofire証明書ピンニングを使用して安全なiOSアプリを作成する方法は次のとおりです。
SSLピン留めの実装に関連する一般的な問題とその解決方法
評判の高いアプリ開発機関の品質保証エキスパートは、完全なネットワーク浸透を含むセキュリティの脆弱性についてモバイルアプリを定期的にテストしています。 しかし、同じ熱意を持ってこれらの分野に焦点を当てていない多くのアプリテスト機関があります。 この特定のiPhoneセキュリティソリューションをアプリに実装するとき、彼らは気が進まないようです。
これの背後にある一般的な理由のいくつかは次のとおりです–
- iOSアプリでのSSLピン留めの最大の欠点の1つは、その実装です。 プロセスは複雑であり、開発者はコードを何度も何度も記述しなければならず、アプリの構築プロセスが複雑になる可能性があります。
- 定期的に変更されるiOSSSL証明書を固定すると、開発者は証明書が変更されるたびにアプリのバイナリを更新する必要があります。
- iOS SSL検証をバイパスする方法を保護するには、複数の努力を払う必要があります。
ステージの不在がもたらす可能性のある影響に注目して、信頼できるiPhoneアプリ開発会社がいくつかの一般的な落とし穴を回避する方法を次に示します。
ピンのテスト
すべてが機能するかどうかをテストする通常のアプリテストとは異なり、SSLピン留めテストの方法は、何かが失敗するかどうかをチェックする必要があるということです。 アプリが潜在的に危険にさらされた接続をキャンセルすることをテストすることに集中する必要があります。 アプリが単一のエンドポイントとの通信を有効にしている場合、テストはGETリクエストを任意の状態にするのと同じくらい簡単です。 理想的には、この場合、アプリは接続をキャンセルする必要があり、リクエストは失敗するはずです。
証明書の変更の処理
ドメイン証明書を更新すると、公開鍵と秘密鍵のペアが保持されますが、常にそうであるとは限りません。 ただし、更新サイクルを正しく計画すれば、エンドユーザーのダウンタイムを回避できます。
iOS SSL証明書をWebサイトでアクティブにする前に、現在アクティブな証明書に加えて、アプリに固定してから更新をリリースする必要があります。 Appinventivでこの手順に従って安全なiOSアプリを作成する場合、新しい証明書を使用して一時的にクイックテストを実行し、両方の証明書を固定してアプリをテストします。
iOSアプリケーションでのSSLピン留めに関するFAQ
1. iOSアプリの機密データをどこに保存しますか?
アプリの機密データは、適切に暗号化した後、常にiOSのiCloudまたはキーチェーンに保存するか、データベースに保存する必要があります。
2. SSLはどのように機能しますか?
SSLピン留めは、最も一般的なiOSアプリのセキュリティのヒントの1つです。 しかし、それが何を意味するのかを理解するには、まずSSLがどのように機能するかを知る必要があります。
- ブラウザは、SSLで保護されているWebサイトに接続しようとします。 次に、ブラウザはWebサーバーに自身を識別するように要求します。
- 次に、WebサーバーはブラウザにSSL証明書のコピーを送信します。
- ブラウザは、SSL証明書が信頼できる必要があるかどうかを確認します。 可能であれば、メッセージがWebサーバーに送信されます。
- 次に、WebサーバーはSSL暗号化セッションを開始するための確認応答を送り返します。
- 暗号化されたデータは、最終的にブラウザとWebサーバー間で共有されます。
終わりの考え
SSLピン留めは安全であり、暗号化が必要な場合は常に広く使用されていると考えられていますが、リスクの高いアプリを構築する場合は、常に別の保護レイヤーを歓迎します。 SSLピニングを使用すると、SSL信頼のチェーン検証の最上位でサーバーのIDを検証できます。
SSL固定を使用すると、SSL証明書をローカルバンドルに保存した指定サーバーとの接続を除くすべての接続を拒否できます。 これの潜在的な欠点は、サーバーのSSLキーが変更されるたびにアプリを更新する必要があることです。
SSLピニングを使用してiOSアプリを起動することも計画している場合は、最高のiOSアプリ開発会社に相談することをお勧めします。