web-dev-qa-db-ja.com

アプリケーションがAPIサーバーへの接続に使用する証明書を抽出することは可能ですか?

特定のSSL証明書を含む接続のみを許可するAPIサーバーがあります。 Androidこれらの証明書を持つアプリケーションについて話します。

SSL復号化なしのFiddlerをアプリとサーバー間のプロキシーとして使用すると、サーバーがリクエストを受け入れていることがわかります。次に、その証明書を抽出し、それを使用してAPIにリクエストを送信する方法を教えてください。 Fiddlerで可能ですか?またはWiresharkのような他のツールが必要ですか?

Wiresharkを試して証明書をエクスポートしましたが、Fiddlerでそれらを使用してもサーバーに接続できません。

また、これはサーバー側からのSSLピン留めと呼ばれますか?

2
Ali Padida

これと 昨日の質問 に基づいて、TLS証明書の機能、特にTLSクライアント認証証明書の仕組みについて読むことに少し時間をかけることは有益だと思います。

証明書と秘密鍵の違いを知っていれば、どちらの質問にも答えられると思います。どちらの場合も、BurpとFiddlerの両方に証明書と秘密鍵の両方が必要です。 TLSがネットワーク経由で秘密鍵を送信していた場合、それは非常に秘密ではないため、Wiresharkで秘密鍵をエクスポートすることはできません。


ここにあなたの学習に役立つかもしれないいくつかの記事があります:

2
Mike Ounsworth

TLS接続をスニッフィングするときにクライアントとサーバーの証明書を抽出できますが(少なくともTLS 1.2以下では)、一致する秘密鍵を抽出することはできません。ただし、ピアに対して認証するには、これらの秘密鍵が必要です。これらの秘密鍵はエンドポイント、つまり、使用したいクライアント証明書の場合はAndroid電話)にのみあります。

また、これはサーバー側からのSSLピン留めと呼ばれますか?

いいえ。クライアント証明書の要求と検証は、クライアント証明書による認証、相互認証などと呼ばれますが、ピン留めとは呼ばれません。

6
Steffen Ullrich

FiddlerおよびWiresharkで行っているのは、秘密鍵ではなく公開鍵を抽出することです。公開鍵は暗号化に使用されますが、復号化には使用されません。そのためのクライアント秘密鍵が必要になります。

証明書がアプリケーションにバンドルされている場合、アプリケーションを逆コンパイルして秘密鍵を抽出できます。一部のアプリケーションは秘密鍵ファイルに多くの保護(暗号化、難読化)を採用しているため、ファイルの抽出は簡単ではありません。しかし、行うことができます。

3
ThoriumBR