I was trying to do vulnerability testing to an android mobile banking app so to get the endpoints of the API I installed the app into android emulator and captured the requests with transparent proxy called PolarProxy (it's very affective with other mobile apps and forward request without issue) but when using it with this app the destination server is replaying an error with 403 code. enter image description here

It works find when the proxy is not on so I though maybe the server is using a Client Certificate Authentication so I looked into the TLS handshakes captured with Wireshark but I couldn't find a Certificate request from server.

This screenshot is from a TLS handshake without transparent proxy.

and this one is when the proxy is ON.enter image description here

you can see in the first Wireshark image that there is no Certificate request from server so the server is not asking for a Client Certificate as I guess or I'm wrong ?

also I found little difference between the two TLS handshakes the one with proxy and the one with out it, the ClientHello message sent when the proxy is OFF has 1 more extension which called statues_request, I know it's for requesting a Certificates statues, so I tried adding that extension using postman but the postman is adding more extensions to ClientHello message and the server still replayed with same error so my other question is can missing or added extensions to ClientHello message cause 403 error? sorry for this long explanation but I just want be clear.

  • If you're able to extract a client certificate from the app then you can provide it to PolarProxy with the --clientcert argument. PolarProxy will then connect to the server using mTLS.
    – Erik
    Commented May 4, 2023 at 12:57
  • @Erik I extracted the client certificate from the app and it works with postman but not the PolarProxy, I used --clientcert argument+clientcert.p12+password but still it replays with same error Commented May 14, 2023 at 15:39
  • @zahal-a-omer That's interesting. Would you be able to share more details on this? Possibly with info[at]netresec.com?
    – Erik
    Commented May 16, 2023 at 8:30
  • @Erik yes sure, it's was actually easier than I thought I just followed this article ceres-c.it/2018/12/16/frida-android-keystore ,with Frida server that uses Dynamic code instrumentation to modify the java class which is responsible for the client cert I was able to extract the client cert. Commented May 16, 2023 at 19:03
  • @zahal-a-omer That’s a smart use of Frida. Would you be able to share any additional details regarding the error messages you get when using PolarProxy with the client cert? Or even better, would you be able to share any details that can be used to reproduce this issue in PolarProxy?
    – Erik
    Commented May 19, 2023 at 15:19

2 Answers 2


TLS server isn't limited to requesting client-auth/client-cert in the initial handshake, and some do so only after the HTTP request e.g. based on the URL. In 1.2 and below server requests a renegotiation and if client does renegotiate server requests client-auth; in 1.3 renegotiation is no longer supported but 'post-handshake client auth' IS.

Your trace shows several Encrypted Handshake and Change CipherSpec after the initial handshake in 1.2, which is clearly such a renegotiation, and though the image you posted doesn't show which messages are in which direction, by my count it looks likely that the renegotiation is requesting, and in the no-proxy case, getting, client-auth.

  • your answer was right thanks I was searching a way to decrypt those encrypted handshakes to verify your answer so I used SSLKEYLOGFILE and you was on point. Commented May 7, 2023 at 15:04

... is can missing or adding extensions to ClientHello message cause 403 error?

Yes, it can. The server might do TLS stack fingerprinting based on the content of the ClientHello.

For example JA3 is an established method to fingerprint client TLS stacks. JA3 includes the settings for ciphers, extensions etc and also there order. The server might either restrict the access to clients with known fingerprints or block access for known fingerprints of common MITM products. Wireshark can show JA3 fingerprint, so you might compare the values yourself.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .