APP HTTPS相互認証パケットキャプチャ_android

 01ステートメント

    任意の直接的または間接的な影響と損失による伝播に、ユーザ自身によって、生じた記事によって提供される情報の使用は責任がある、品の測定や公共レイセオンの作者は一切の責任を負いません。

    レイセオン社は、すべての変更と、この記事の解釈を測定しました。この記事を転載または配布するには、すべての著作権ステートメントを含むこの記事の整合性を確保しなければなりません。公共の同意なしに測定されたレイセオン社は、厳密にどのような方法で商業目的のために使用してはならないこの記事の内容のいかなる修正や変更が禁止されています。

 

02テキスト

    一つの試験では何の効果をもたらすことなく、クライアントから送信されたすべてのデータと一致して制御されている(シオマネキキャプチャはクライアント証明書の入力を求め)、通常のキャプチャにシャトルを得ることができる双方向の認証httpsの電話アプリに出くわしました実際に従事することを決めたアイデアは、どのような問題は、より多くの方法を採用することよりも何もありません。ライン上で暗号化された双方向の認証クライアント証明書を取得するには、秘密鍵限り。

非常に残念なことに、電話アプリがパックされ、そして基本的にダイナミックなデバッグの方法にさよならを言います。 

 

次のように私は、資産ディレクトリに相互認証ライブラリファイルの証明書が見つかりました:

証明書ストアを使用するために、我々はまた、いくつかのソースコードは、次のコードにキーワードターゲティングを取得砲撃、パスワードの証明書ストアを見つける必要があります。

M8196aファンクションキーコード、特定のコードは次のよう:(関連する一切書かれた相互認証および鍵ストアの関連するコードが存在しないため、唯一の機能は、コメントを補足したJavaのAPIドキュメントで説明されるルックアップすることができます)

   String str = "X509";
       String str2 = "BKS";
       Application b = MyApplication.m5574b();
       SSLSocketFactory sSLSocketFactory = null;
       try {
           KeyStore instance = KeyStore.getInstance(str2);
           KeyStore instance2 = KeyStore.getInstance(str2);
           InputStream open = b.getAssets().open(f7624a); // 取了客户端证书的keystore
           InputStream open2 = b.getAssets().open(f7625b); // 取了服务端相关证书的keystore文件
           instance.load(open, f7626c.toCharArray()); // 通过密钥库密码打开客户端 keystore
           instance2.load(open2, f7627d.toCharArray());// 通过密钥库密码打开服务端keystore
           open.close();
           open2.close();
           SSLContext instance3 = SSLContext.getInstance("TLS");
           TrustManagerFactory instance4 = TrustManagerFactory.getInstance(str);
           KeyManagerFactory instance5 = KeyManagerFactory.getInstance(str);
           instance4.init(instance2);
           instance5.init(instance, f7626c.toCharArray());// 再次输入了密钥库的密码
           instance3.init(instance5.getKeyManagers(), C2639d.m8197a(instance4.getTrustManagers()), null);
           sSLSocketFactory = instance3.getSocketFactory();// 完成了sslsocketfactory
           return sSLSocketFactory;
       } catch (KeyStoreException e) {
             ………….省略

对于keystore认识的缺乏的我开始了绕圈之路。误以为已经搞定了双向认证,打开了burpsuite导入证书:

Pkcs12格式,暴露了我对证书相关格式的盲区,google告诉我用keytool可以进行证书格式的转换,如下:

Emmmm?还需要密钥口令,本着试试相同密码的尝试(代码访问了同一个密码两次)(毕竟代码里没有看到其他密码)——绕圈的开始 复制,粘贴——go

Emm 手动输入试试

Emmmm,what?

代码里没有看到相关密码,决定搜搜相关的调用,上级调用在函数m5660a 

没有任何关于密钥的代码。感觉事情并不寻常,可能掉到了什么诡异的坑里。

1. 代码不完整,可能密钥没脱出来
2. 证书库可能有什么问题

网上找了httpsURLConnection类的双向https的实现demo——几乎完全一致。那一定是证书库有什么玄学的问题,找到了关于证书文件格式的介绍(https://blog.csdn.net/zzhongcy/article/details/22755317)

几个相关的文件格式如下:

Emmmmm,开始了兜兜转转之旅,之后再次查看了代码中涉及的函数说明

第一次调用load使用的密码是keystore的解锁密码

第二次调用init使用的密码Keystore中的恢复密码——推测就是私钥证书的密码。福尔摩斯:“当你排除了所有的不可能,无论剩下的是什么,即使再不可能也一定是真相。”密码肯定没有问题,一定是keytool有点问题,网上找了款证书管理的工具portecle,两次输入相同密码,成功打开获取私钥证书:

生成了p12格式的客户端证书,心里真是的万马奔腾。

还是失败,推测可能是证书信任或者服务端证书缺少的问题 ,将另一个bks库中的ca证书和server证书导出,导入到windows证书库中,成功抓包:

 

 

 

おすすめ

転載: www.cnblogs.com/pt007/p/11883924.html