iOS-Charles httpsのパッケージをつかむ(双方向認証)

1804 ワード

最近、テストに合わせて会社が作ったappのバッグをつかむために、httpsをつかむ方法を検討し、出会った穴について話しました.
! Charlesバージョンv 4.0.1を強調
通常はバッグをつかんで、ネット上でとても多くて、勝手に次を検索して検索することができます
同様にipポートを構成してsslを有効にして花瓶を信頼する証明書を捕まえる.
に質問
しかし、自社のappは、ipやポートを配置してsslを有効にして証明書を信頼しても、どのように捕まえても文字化けしています.
  • ピット1:ネット上のほとんどのチュートリアルでは、自分のクライアントの秘密鍵をインポートさせていないが、双方向認証のため、クライアントの秘密鍵をCharlesにインポートする必要があることが分かった.Proxy -> SSLProxying Setting -> Cilent Certificates add ip choose p12 , ( , )
  • 坑点二:上記の配置設定が完了した後、喜んでバッグをつかむ準備に成功したが、結局バッグをつかむことができず、バッグを起動した後、すべてのインタフェースが呼び出されなかった.最初から信じてたよ!(簡単ですが、信頼の仕方はもちろん携帯電話でchls.pro/sslにアクセスして証明書を入れました).多くの研究によると、ネットワーク層がサービス側の証明書を非常に厳格に検証していることが分かった.Charlesの証明書は何を言っても認めていない.なぜなら、このコードの下部にはYou may need to configure your browser or application to trust the Charles Root Certificate
  • が使用されているからです.
    + (AFSecurityPolicy *)securityPolicy
    {
        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
        [securityPolicy setAllowInvalidCertificates:NO];
        [securityPolicy setValidatesDomainName:YES];
        return securityPolicy;
    }
    

    この列挙をよく見てみると
    typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
        AFSSLPinningModeNone,
        AFSSLPinningModePublicKey,
        AFSSLPinningModeCertificate,
    };
    

    AFSSLPinningModeNone:クライアントがサーバ側から返された証明書を無条件に信頼することを表します.AFSSLPinningModePublicKey:クライアントがサーバ側から返される証明書とローカルに保存されている証明書のうち、PublicKeyの部分を検証します.正しければ、続けます.AFSSLPinningModeCertificate:クライアントがサーバ側から返される証明書とローカルに保存されている証明書のすべての内容を表し、PublicKeyと証明書部分を含め、すべて検証されます.正しければ、続けます.AFNetWork SSLリファレンスサイト
    これで真相が明らかになり、彼を取り除くだけで終わりだ.(私の処理方法はdebugモードで、この文を有効にしない)このようにテストして正常にhttpsのパッケージを捕まえました!
    もし皆さんが他の穴に出会ったら、具体的な詳細は伝言を残して交流することができます.