# 安裝系統根憑證

此介面用於在您的 Android 系統內安裝系統級別的根憑證，並與所有 Android 版本相容。
您可能會對此感到困惑，這裡的根憑證和 FIRERPA 的服務憑證分別是什麼。FIRERPA 服務憑證是用於加密 FIRERPA 與您之間的通訊流量，而這裡所指的根憑證是指 Android 系統內建的根憑證，此憑證用於系統中 HTTPS 等相關流量的加解密工作。如果您了解封包擷取（抓包），這裡的根憑證即是指用於封包擷取的憑證。您可以透過本章的介面搭配設定代理介面來實現中間人攻擊（Man-in-the-Middle）的封包擷取。當然，您也可以選擇使用我們封裝好的 `startmitm.py`。我們在此只是為了向您介紹這個基礎功能的實現方式。

## 準備工作

請確保您已經準備好 fiddler、mitmproxy 提供給您的憑證。對於 mitmproxy，您應該使用的憑證是 `mitmproxy-ca-cert.pem`。而對於 fiddler，憑證格式可能是 crt。您應該可以在 fiddler 中匯出此檔案，直接將該檔案路徑作為參數提供即可，無需擔心任何檔名轉換問題。為了避免浪費不必要的時間，我們推薦使用 `mitmproxy`。如果您使用的是 `Charles` 等工具，我們無法保證您可以一次性完成設定，因為這類應用程式的設定項目較為複雜，且您可能需要理解各種代理類型才能正確設定 HTTPS 中間人。如果您堅持要使用，建議使用 Charles 的 SOCKS5 作為代理協定。


## 安裝根憑證

有了您準備好的憑證檔案路徑後，您可以直接編寫以下介面來安裝 mitmproxy 的根憑證。安裝一次後將永久存在，無需重複安裝。


```python
d.install_ca_certificate(cert_path)
```

## 卸載根憑證

您可以呼叫以下程式碼來移除安裝在裝置上的自訂根憑證。我們不建議您頻繁地安裝與卸載，在非必要的情況下可以不用呼叫此介面。

```python
d.uninstall_ca_certificate(cert_path)
```

完整的程式碼如下（我們不再重複實例化 `d` 裝置實例）

```python
import os

# 拼接 mitmproxy-ca-cert.pem 檔案的路徑
HOME = os.path.expanduser("~")
cert_path = os.path.join(HOME, ".mitmproxy", "mitmproxy-ca-cert.pem")
# 以 mitmproxy 為例，使用以下程式碼安裝中間人憑證
d.install_ca_certificate(cert_path)

# 使用以下程式碼卸載憑證
d.uninstall_ca_certificate(cert_path)
```

此憑證安裝與卸載介面是通用的，您可以用它來安裝任何應用程式要求您安裝的憑證。您同樣可以用它來安裝 Fiddler/Charles 要求您安裝的憑證，只需提供檔案路徑即可。如果您要進行封包擷取，隨後可以參考 `設定代理` 章節，將代理伺服器設定為中間人應用程式正在監聽的位址即可。