• APP测试之双向证书认证


    ios用到的工具:

    ssl kill switch

    Fiddler

    两个工具的安装办法:

    越狱的IOS上面安装ssl kill switch

      之前一直抓的是 ios的 https数据包,双向证书认证

      对于安卓的没使用过,今天看到了,收藏一下

    =====================================

    0x02 双向证书认证与解决方法

    在对soulApp进行抓包的时候,提示网络错误,请检查网络后重试~

    本来以为直接把这个okhttp的证书hook修改成系统默认的即可,就没有详细说明这一部分,结果有网友问双向证书认证这部分是如何处理的,就详细来说明一下如何处理。这里时由于采用了双向证书认证的缘故,所以抓包返回400错误,直接浏览器访问https://account.soulapp.cn/ ,也是不行的

    提示No required SSL certificate was sent.如果要访问成功,就要带上证书。

    关于双向证书认证:客户端有自己的密匙,并持有服务端的证书,服务端给客户端发送数据时,需要将服务端的证书发给客户端验证,验证通过才运行发送数据,同样,客户端请求服务器数据时,也需要将自己的证书发给服务端验证,通过才允许执行请求。详细的内容可以参考https://blog.csdn.net/enweitech/article/details/53813183。

    我们本地来测试一下,简单介绍一下如何搭建双向证书认证环境。

    1.双向证书认证服务器的搭建

    创建一个证书的步骤:

    (1)生成系统私钥

    (2)生成待签名证书

    (3)生成x509证书, 用CA私钥进行签名

    证书的生成过程略。

    以tomcat服务器为例。将生成的服务端证书server.p12和客户端信任证书truststore.jks放入conf目录下。修改tomcat下conf/server.xml文件,去掉https的注释。

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" />

    修改为

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    truststoreFile="conf/truststore.jks" truststorePass="123456" truststoreType="JKS"
    keystoreFile="conf/server.p12" keystorePass="123456" keystoreType="PKCS12"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" />

    此时clientAuth="false",未开启客户端校验。

    启动服务器并访问。

    虽然提示错误但是点继续前往即可访问。

    设置开启客户端校验,即clientAuth="true"

    然后重启后访问

    无法正常访问,想要正常访问,浏览器导入证书即可

    下一步然后输入密码

    刷新页面,提示选择证书。

    确定后即可访问。

    2.soulAPP双向认证解决方法

    同理这里soulApp也可以这样做。

    这里列举三种方法来完成客户端的验证。归根结底都是证书的利用。

    a)浏览器导入证书

    利用soulApp中的证书和密码生成浏览器证书。

    openssl pkcs12 -export -inkey client.key -in client.crt -out soulclient.pfx

    证书的位置位于资源文件assets中。

    标记的1处输入的是soul证书的密码,2和3为证书导入浏览器自己设置的密码,这里为123456

    然后导入浏览器,重新访问https://account.soulapp.cn/

    选择证书后确定。

    根据页面显示内容可以发现此时导入证书后可以正常访问。

    b)利用程序完成认证

    利用程序的话,参考cn.soulapp.android.api.e.a()方法,进行证书的操作。

    精简之后主要代码如下:

    然后利用httpclient进行http请求。

    当访问不加证书的效果:

    使用证书的结果:

    由于这是这是之前的数据包,所以已经过期,再次使用需要更换时间戳和签名,但结果成功的。

    c)利用抓包工具

    使用抓包工具,这里以burp为例。

    未导入证书抓包结果:

    提示400错误,我们在burp中导入证书

    选择证书并输入密码。

    证书导入成功。

    再次抓包

    已经可以正常抓取了。

    当然使用其他方法也是可行的,这里就不再列举了。

    0x03 总结

    本文主要是为了解决APP与服务器之间的双向证书认证问题,没有太多的技巧,主要就是证书的使用。如果服务器采用了双向认证,那么一般在APP中有证书和证书密码的存在,找到之后导入抓包工具即可。

  • 相关阅读:
    用Python发生RestFul API POST和GET请求
    C# 8.0中的新功能
    A股数据分析之收集数据:股票列表和股价
    A股数据分析之收集数据:公司详细信息
    VS 2019中修改C#语言版本
    Weak Event Manager
    在WPF中使用MVVM的方式关闭窗口
    C# GDI绘制仪表盘(纯代码实现)
    C#中实现文件拖放打开的方法
    C#设置自定义文件图标实现双击启动
  • 原文地址:https://www.cnblogs.com/anbuxuan/p/11777817.html
Copyright © 2020-2023  润新知