Mitmproxy в режиме обратного прокси с самозаверяющим сертификатом восходящего потока
У меня есть несколько машин, которые не поддерживают TLS 1.1 и 1.2, и сервер, к которому они должны подключаться, отказывается от поддержки старых протоколов. В любом случае они все туннелируют через центральный сервер.
Идея состоит в том, чтобы запустить mitmdump в качестве обратного прокси на центральном сервере; клиенты отправляют простые HTTP-запросы обратному прокси-серверу вместо https на удаленный сервер, а затем он связывается с удаленным сервером по протоколу TLS 1.2 (пожалуйста, сообщите, если вы считаете, что существуют более лучшие / более простые решения).
Я тестирую это локально, поэтому клиент отправляет http на localhost, где работает mitmdump.
Вот как я запускаю mitmdump:
mitmdump -R https://remotehost:port --port 8844 --upstream-trusted-ca "C:\fullpath\root_ca_pem.cer"
И вот что я получаю:
127.0.0.1:54547: clientconnect
127.0.0.1:54547: POST https://remotehost:someport/
<< Certificate Verification Error for remotehost: unable to get issuer certificate (errno: 2, depth: 1)
127.0.0.1:54547: clientdisconnect
Удаленный сервер использует CA cert и sub cert, которые по умолчанию не находятся в хранилище доверенных корневых сертификатов, хотя я их там и добавил (используется ли он mitmdump в windows?). Поэтому я использовал "--upstream-trust-ca", но, к сожалению, это не решило проблему.
Есть идеи, что я делаю не так? Может быть, я должен включить все сертификаты в цепочке; как бы я это сделал?
1 ответ
Удаленный сервер использует CA cert и sub cert, которые по умолчанию не находятся в хранилище доверенных корневых сертификатов, хотя я их там и добавил (используется ли он mitmdump в windows?).
Мы хотели бы использовать магазин ОС, но это не так просто с OpenSSL. Mitmproxy использует сертификацию прямо сейчас. Как вы упомянули, --upstream-trusted-ca
это правильный способ исправить это. Если у вас есть промежуточные центры сертификации, которые не отправляются сервером, вам может потребоваться структурировать ваш файл PEM следующим образом:
-----BEGIN CERTIFICATE-----
<cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediary cert (optional)>
-----END CERTIFICATE-----