It’s possible I’m going to win an award for being the #1 scrub here on the mitmproxy forums but here I go.
Environment
I set up mitmproxy on my mac, installed the certificate, and used the system proxy settings to route all http and https traffic through the mitmproxy port on regular mode.
I want to intercept https requests of a singular host and depending on the path, either serve the response from a local file, or pass it on to the regular server. I don’t think I can use a reverse proxy here because I don’t want all of the requests from the host to be served locally, only some of them.
I wrote a simple redirect script and plugged it into mitmproxy and hit my host with postman to test.
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
if flow.pretty_host == "js.mywebsite.com" and "redirect" in flow.path:
flow.host = "localhost"
flow.port = 9999
flow.scheme = "http"
I have a simple python server on port 9999 serving local files.
Anyway, so if I make a postman request to http://js.mywebsite.com/redirect, everything is fine.
But if I make that same request as https, I see that my python file server is hit and returns the correct data, and even in the mitmproxy terminal i see a response that has the data from the file. But the initial request from postman just craps the bed.
I think that I’m missing some vital piece of information about security principles in general, so I’m sorry if I’m trying to do the impossible. But I thought that mitmproxy would create a certificate for js.mywebsite.com and return the local data over https and everything would work fine. Guess I’m missing something.
Any help would be appreciated, thanks for reading.