You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+18-4Lines changed: 18 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -135,7 +135,7 @@ To route your browser's HTTPS traffic through the Apps Script relay, `mhrv-rs` h
135
135
- A fresh CA keypair (`ca/ca.crt` + `ca/ca.key`) is generated **on your machine**, in your user-data dir.
136
136
- The public `ca.crt` is added to your system trust store so browsers accept the per-site certificates `mhrv-rs` mints on the fly. This is the step that needs sudo / Administrator.
137
137
- The private `ca.key`**never leaves your machine**. Nothing uploads it, nothing phones home, and no remote party — including the Apps Script relay — can use it to impersonate sites to you.
138
-
- You can revoke it at any time by deleting the CA from your OS keychain (macOS: Keychain Access → System → delete `mhrv-rs`) / Windows cert store / `/etc/ca-certificates`, and removing the `ca/` folder.
138
+
- You can revoke it at any time with `mhrv-rs --remove-cert` (or the **Remove CA** button in the UI) — it clears the CA from the OS trust store, verifies the revocation by name before touching disk, and deletes the on-disk `ca/` folder. NSS cleanup (Firefox profiles + Chrome/Chromium on Linux) is best-effort: if `certutil` from libnss3-tools isn't on PATH or a browser has the NSS DB locked, the tool logs a manual-cleanup hint. `config.json` and your Apps Script deployment are not touched, so regenerating the CA never requires redeploying `Code.gs`. Manual fallback: the certificate's Common Name is `MasterHttpRelayVPN` (not `mhrv-rs` — that's the app name, not the cert name). Delete by that CN in your OS keychain (macOS: Keychain Access → System → delete `MasterHttpRelayVPN`), Windows `certmgr.msc` → Trusted Root Certification Authorities, or `/usr/local/share/ca-certificates/MasterHttpRelayVPN.crt` + `sudo update-ca-certificates` on Linux; remove the `MasterHttpRelayVPN` entry from each browser's cert settings; and remove the `ca/` folder under the user-data dir.
139
139
140
140
The launcher does all of this for you and then starts the UI:
141
141
@@ -197,9 +197,14 @@ Then:
197
197
./mhrv-rs test# one-shot end-to-end probe
198
198
./mhrv-rs scan-ips # rank Google frontend IPs by latency
199
199
./mhrv-rs --install-cert # reinstall the MITM CA
200
+
./mhrv-rs --remove-cert # clean slate: uninstall + delete the whole ca/ dir
200
201
./mhrv-rs --help
201
202
```
202
203
204
+
`--remove-cert` deletes the CA from the OS trust store, deletes the on-disk `ca/` directory, and verifies the revocation by name — if a system-level delete needed admin you didn't have, it aborts the file deletion and prints an error so you can re-run elevated. NSS cleanup (Firefox profiles + Chrome/Chromium on Linux) is best-effort: if `certutil` isn't on PATH or a browser holds the NSS DB open, the tool logs a manual-cleanup hint. Your `config.json` and the Apps Script deployment at `script.google.com` are untouched, so a fresh CA (generated next time you start the proxy) does not require redeploying `Code.gs`.
205
+
206
+
> **Upgrading from pre-v1.2.11?** Earlier versions wrote a bare `user_pref("security.enterprise_roots.enabled", true);` into each Firefox profile's `user.js` without a provenance marker. `--remove-cert` intentionally does **not** strip that line — a bare pref is indistinguishable from one authored by the user or a corporate policy, and silently revoking trust behavior is worse than leaving one cosmetic orphan line. Firefox falls back to its built-in Mozilla root store the moment the MITM CA leaves the OS trust store, so this has no functional effect. Delete the line manually if it bothers you.
207
+
203
208
`script_id` can also be a JSON array: `["id1", "id2", "id3"]`.
204
209
205
210
#### scan-ips configuration (optional)
@@ -710,9 +715,15 @@ logread -e mhrv-rs -f
710
715
711
716
**چطور گواهی را بعداً حذف کنم؟**
712
717
713
-
-**مک:**`Keychain Access` را باز کنید، در بخش `System` دنبال `mhrv-rs` بگردید و حذف کنید. سپس پوشهٔ `~/Library/Application Support/mhrv-rs/ca/` را پاک کنید
714
-
-**ویندوز:**`certmgr.msc` را اجرا کنید → `Trusted Root Certification Authorities` → `Certificates` → دنبال `mhrv-rs` بگردید و حذف کنید
715
-
-**لینوکس:** فایل `/usr/local/share/ca-certificates/mhrv-rs.crt` را حذف و `sudo update-ca-certificates` اجرا کنید
718
+
-**سادهترین راه (هر سه سیستمعامل):** داخل برنامه روی دکمهٔ **`Remove CA`** بزنید، یا در ترمینال:
719
+
- مک/لینوکس: `sudo ./mhrv-rs --remove-cert`
720
+
- ویندوز (با `Run as administrator`): `mhrv-rs.exe --remove-cert`
721
+
- این دستور گواهی را از `trust store` سیستم و `NSS` (فایرفاکس/کروم) پاک میکند و فایلهای `ca/ca.crt` و `ca/ca.key` را هم روی دیسک حذف میکند. فایل `config.json` و `deployment` آپساسکریپت دستنخورده میمانند — پس لازم نیست `Code.gs` را دوباره دیپلوی کنید.
722
+
-**بهصورت دستی** (اگر میخواهید):
723
+
-**نکته:** نام گواهی (`Common Name`) در همهٔ مکانها `MasterHttpRelayVPN` است — `mhrv-rs` نام برنامه است، نه نام گواهی.
724
+
-**مک:**`Keychain Access` را باز کنید، در بخش `System` دنبال `MasterHttpRelayVPN` بگردید و حذف کنید. سپس پوشهٔ `~/Library/Application Support/mhrv-rs/ca/` را پاک کنید
725
+
-**ویندوز:**`certmgr.msc` را اجرا کنید → `Trusted Root Certification Authorities` → `Certificates` → دنبال `MasterHttpRelayVPN` بگردید و حذف کنید
726
+
-**لینوکس:** فایل `/usr/local/share/ca-certificates/MasterHttpRelayVPN.crt` را حذف و `sudo update-ca-certificates` اجرا کنید
716
727
717
728
**چند `Deployment ID` لازم دارم؟**
718
729
یکی برای استفادهٔ عادی کافی است. سهمیهٔ روزانه `UrlFetchApp` برای حساب رایگان گوگل **۲۰٬۰۰۰ درخواست در روز** است (برای `Workspace` پولی ۱۰۰٬۰۰۰)، با محدودیت پاسخ ۵۰ مگابایت به ازای هر `fetch`. از هر حساب گوگل **فقط یک `Deployment`** بسازید — سقف ۳۰ درخواست همزمان به ازای هر حساب است، پس چند `Deployment` روی یک حساب همزمانی اضافه نمیکند. برای افزایش همزمانی یا سهمیهٔ روزانه، در حسابهای گوگل دیگر `Deployment` بسازید — هر حساب سهمیهٔ ۲۰ هزار درخواستی و ۳۰ اجرای همزمان خودش را دارد. همهٔ `ID`ها را در فیلد `Apps Script ID(s)` وارد کنید — برنامه خودکار بینشان میچرخد. مرجع: <https://developers.google.com/apps-script/guides/services/quotas>
@@ -735,9 +746,12 @@ logread -e mhrv-rs -f
735
746
./mhrv-rs scan-ips # رتبهبندی IPهای گوگل بر اساس سرعت
736
747
./mhrv-rs test-sni # تست نامهای SNI در pool
737
748
./mhrv-rs --install-cert # نصب مجدد گواهی
749
+
./mhrv-rs --remove-cert # حذف کامل گواهی: پاکسازی trust store و کل پوشهٔ ca/
738
750
./mhrv-rs --help
739
751
```
740
752
753
+
دستور `--remove-cert` گواهی را از `trust store` سیستم پاک میکند، با بررسی نام تأیید میکند که حذف انجام شده، و سپس پوشهٔ `ca/` روی دیسک را حذف میکند — اگر حذف نیاز به دسترسی ادمین داشته باشد که در دسترس نبوده، قبل از پاک کردن فایلها متوقف میشود تا بتوانید با دسترسی مدیر دوباره اجرا کنید. پاکسازی `NSS` (فایرفاکس/کروم) `best-effort` است: اگر `certutil` نصب نباشد یا یکی از مرورگرها بازِ دیتابیس را قفل کرده باشد، ابزار پیغامی با راهنمای پاکسازی دستی نشان میدهد. فایل `config.json` شما و `deployment` آپساسکریپت در `script.google.com` دستنخورده میمانند — یعنی وقتی در اجرای بعدی گواهی تازه تولید میشود، نیازی به دیپلوی مجدد `Code.gs` نیست.
754
+
741
755
**چرا گاهی جستوجوی گوگل بدون `JavaScript` نشان داده میشود؟**
742
756
`Apps Script` مجبور است `User-Agent` درخواستهای خود را روی `Google-Apps-Script` بگذارد. بعضی سایتها این را به عنوان ربات شناسایی میکنند و نسخهٔ سادهٔ بدون `JavaScript` برمیگردانند. دامنههایی که در لیست `SNI-rewrite` قرار گرفتهاند (مثل `google.com`، `youtube.com`) از این مشکل در امان هستند چون مستقیماً از لبهٔ گوگل میآیند، نه از `Apps Script`.
0 commit comments