27

Android / iOSアプリとインターネットでアクセス可能なバックエンドサービスの間で安全な通信を行いたいので、HTTPS/SSLを調査しています。

自己署名証明書を作成し、クライアント証明書をアプリに配置して、バックエンドサービスにそのクライアント証明書を要求させる場合、これは本当に安全ですか?

これが私が尋ねている理由です。.apkに問い合わせることで、クライアント証明書が「ハッキング」される可能性があるようです。クライアント証明書は単なる文字列定数ですよね?つまり、誰でもクライアント証明書を使用して私のバックエンドにアクセスできます。.apk(およびiOSと同等のもの)は、クライアント証明書が検出されないように十分に不透明ですか?

4

5 に答える 5

15

SSLを介した証明書を使用してクライアント側の認証を行っていますか?この質問にとってそれが本当に重要であるというわけではありません。アプリに保存した秘密鍵は、攻撃者がアクセスできます。大量の侵害を防ぐために、各クライアントには独自の証明書とキーのペアが必要です。サーバーは保護も実施し、侵害されたクライアントが何も要求できないようにする必要があります。

これは、すべての認証スキームに当てはまります。パスワード、APIキー、復号化キーなどを埋め込む場合。デバイス上のすべてのものがアクセス可能であると想定する必要があります。

証明書から追加されたセキュリティは、ブルートフォースに何もないことから部分的にもたらされます。各クライアントのユーザー名/パスワードルートを使用した場合、パスワードを推測できます。APIキーと同じです(長くて難しいですが)。証明書の場合、これはまったく異なるクラスの攻撃であり、かなり難しい問題です。

ただし、最も重要なことは、バックエンドサービスでは、アプリが通常は実行できないことを実行できないようにする必要があります。

さて、証明書を扱うと、他にもたくさんの問題が発生します。自己署名CA証明書を使用して各クライアント証明書に署名することをお勧めします。そのCA証明書の管理は、ユースケースによっては問題になる可能性があります。これらのクライアント証明書をオンザフライで生成しますか、それとも手動で生成しますか?つまり、これは100万人がダウンロードできるアプリであり、それらを生成するための自動システムが必要ですか?それとも、これはあなたが個人的に証明書の生成を処理するプライベート/内部アプリですか?

于 2012-03-19T05:09:11.050 に答える
13

証明書は無害です。保護が必要なのは秘密鍵であり、デバイス自体と同じくらい安全であり、安全ではありません。アプリケーションで証明書と秘密鍵を配布するということは、アプリケーションを持っている人なら誰でも鍵を持っているということです。したがって、セキュリティはまったく提供されません。インストール後の登録手順が必要だと思います。

于 2012-03-19T05:40:14.973 に答える
12

通常、クライアントSSL証明書はキーストア(Androidの場合はBKS形式)に保存され、キーストアはAPK内のリソースとして含まれます。キーストアは暗号化され、パスワードで保護されています。そのため、そのクライアント証明書は暗号化された形式で保存されているため、APKから簡単に抽出することはできません。

さて...あなたはパスワードについてどうしますか?これが問題の核心であり、2つの選択肢があります。

ユーザーの操作なしでアプリケーションがサーバーと通信できるようにする(つまり、証明書にアクセスできるようにする)場合は、パスワードをアプリケーションに埋め込む必要があります。そうすると、攻撃者がコードをリバースエンジニアリングする可能性があります。それを見つけるには、キーストアを取得し、それを復号化して証明書を回復します。コードを難読化するなどの手法を適用して、攻撃者がそれを実行しにくくすることができますが、これは誰かの速度を低下させ、阻止することはできません。

別の方法は、アプリケーションがサーバーと通信するたびにユーザーにパスワードの入力を求め、それを使用してキーストアを復号化することです(または、アプリがいつ起動し、証明書を一定時間キャッシュするかを尋ねます)。ここでの利点は、誰かがAPKをリバースエンジニアリングした場合、暗号化されたキーストアが見つかり、パスワードがないため、証明書が安全であるということです。欠点は、ユーザーにパスワードを提供させることです。

どのアプローチが最適ですか?それはあなたが関係しているデータの機密性とあなたが受け入れることをいとわないリスクのレベルに完全に依存します。あなただけがその質問に答えることができます。

于 2012-03-19T12:44:56.767 に答える
4

ダニエルギラモット、私がやってきたいくつかのトリック:

誰か他のアイデアがあればもっと聞きたいです。

于 2012-03-29T16:44:20.010 に答える
1

APKにアクセスしてコピーできるので、APKに何かを入れても役に立ちません。インストール後にアクティベーションを行い、証明書をデバイスにバインドする必要があります。バインドは、たとえば、デバイスのIMEIを証明書拡張機能の1つに配置し、アプリケーションによって証明書と一緒にIMEIを渡すことによって実行できます(または、認証とセキュリティで保護されたチャネルの確立後にIMEIを渡すことをお勧めします)。

于 2012-03-19T06:28:08.070 に答える