為使用 Web 代理的裝置配置本機代理 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為使用 Web 代理的裝置配置本機代理

您可以在 AWS IoT 裝置上使用本機 Proxy 與 AWS IoT 安全通道 API 進行通訊。本機 Proxy 會透過安全連線,使用安全通道傳輸裝置應用程式傳送的資料。 WebSocket 本機代理可在 sourcedestination 模式中運作。在 source 模式中,其會在啟動 TCP 連線的相同裝置或網路上執行。在 destination 模式中,本機代理會與目的地應用程式一起在遠端裝置上執行。如需詳細資訊,請參閱 本機代理

本機 Proxy 必須直接連線至網際網路,才能使用 AWS IoT 安全通道。對於具有安全通道的長期 TCP 連線,本機 Proxy 會升級 HTTPS 要求,以建立與其中一個安全通道裝置 WebSockets 連線端點的連線。

若您的裝置位於使用 Web 代理的網路中,Web 代理可在將連線轉送至網際網路之前加以攔截。如要建立與安全通道裝置連線端點的長期連線,請配置本機代理使用 Web 代理,如 WebSocket 規格中所述。

注意

AWS IoT 裝置用戶端 不支援使用 Web 代理的裝置。如要使用 Web 代理,您需要使用本機代理,並配置其與 Web 代理搭配使用,如下所述。

下列步驟顯示了本機代理如何與 Web 代理搭配使用。

  1. 本機代理傳送 HTTP CONNECT 請求至 Web 代理,其包含安全通道服務的遠端地址及 Web 代理身分驗證資訊。

  2. Web 代理隨後會建立遠端安全通道端點的長期連線。

  3. TCP 連線已建立,本機代理現在可以來源和目的地模式運作,進行資料傳輸。

如要完成此程序,請執行下列步驟:

建置本機代理

打開 GitHub 存儲庫中的本地代理源代碼,然後按照構建和安裝本地代理的說明進行操作。

配置您的 Web 代理

本機代理依賴 HTTP/1.1 規格所說明的 HTTP 通道機制。如要符合規格,您的 Web 代理必須允許裝置可以使用 CONNECT 方法。

您配置 Web 代理的方式依您使用的 Web 代理及 Web 代理版本而定。如要確保您正確地配置 Web 代理,請查看您的 Web 代理文件。

如要配置您的 Web 代理,請先識別您的 Web 代理 URL,並確認您的 Web 代理是否支援 HTTP 通道。當您配置並啟動本機代理時,Web 代理 URL 將於稍後使用。

  1. 識別您的 Web 代理 URL

    您的 Web 代理 URL 將會採用下列格式。

    protocol://web_proxy_host_domain:web_proxy_port

    AWS IoT 安全通道僅支援 Web Proxy 的基本驗證。如要使用基本身分驗證,您必須指定 usernamepassword 以做為 Web 代理 URL 的一部分。Web 代理 URL 將會採用下列格式。

    protocol://username:password@web_proxy_host_domain:web_proxy_port
    • 通訊協定可為 httphttps。建議您使用 https

    • web_proxy_host_domain 是您 Web 代理的 IP 地址,或可解析 Web 代理 IP 地址的 DNS 名稱。

    • web_proxy_port 是 Web 代理接聽的連接埠。

    • web 代理會使用此 usernamepassword 來驗證請求。

  2. 測試您的 Web 代理 URL

    如要確認您的 Web 代理是否支援 TCP 通道,請使用 curl 命令並確保您取得 2xx3xx 回應。

    例如,若您的 Web 代理 URL 是 https://server.com:1235,請使用具 curl 命令的 proxy-insecure 旗標,因為 Web 代理可能會依賴自簽憑證。

    export HTTPS_PROXY=https://server.com:1235 curl -I https://aws.amazon.com --proxy-insecure

    若您的 Web 代理 URL 具有 http 連接埠 (例如,http://server.com:1234),則您無須使用 proxy-insecure 旗標。

    export HTTPS_PROXY=http://server.com:1234 curl -I https://aws.amazon.com

配置並啟動本機代理

如要將本機代理配置為使用 Web 代理,您必須以 Web 代理使用的 DNS 網域名稱或 IP 地址和連接埠號來配置 HTTPS_PROXY 環境環境變數。

在您配置本機代理之後,您可以使用本機代理,如讀我檔案文件中所述。

注意

您的環境變數宣告區分大小寫。我們建議您使用全部大寫或全部小寫字母來定義每個變數一次。下列範例顯示環境變數以全部大寫字母進行宣告。若同時使用大寫和小寫字母指定相同的變數,則使用小寫字母指定的變數優先。

下列命令顯示如何將執行於目的地上的本機代理配置為使用 Web 代理並啟動本機代理。

  • AWSIOT_TUNNEL_ACCESS_TOKEN:此變數會保存目的地的用戶端存取字符 (CAT)。

  • HTTPS_PROXY:此變數會保留 Web 代理 URL 或 IP 地址,以配置本機代理。

下列範例中顯示的命令取決於您使用的作業系統,及 Web 代理是否在 HTTP 或 HTTPS 連接埠上進行接聽。

在 HTTP 連接埠上接聽 Web 代理

若您的 Web 代理正在接聽 HTTP 連接埠,您可提供 HTTPS_PROXY 變數的 Web 代理 URL 或 IP 地址。

Linux/macOS

在 Linux 或 macOS 中,請在終端機中執行下列命令,以配置並啟動您目的地上的本機代理,以使用接聽 HTTP 連接埠的 Web 代理。

export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} export HTTPS_PROXY=http:proxy.example.com:1234 ./localproxy -r us-east-1 -d 22

若您必須使用代理進行驗證,則必須指定 usernamepassword 以作為 HTTPS_PROXY 變數的一部分。

export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} export HTTPS_PROXY=http://username:password@proxy.example.com:1234 ./localproxy -r us-east-1 -d 22
Windows

在 Windows 中,您可將本機代理配置為類似於您處理 Linux 或 macOS 的方式,但定義環境變數的方式則與其他平台不同。在 cmd 視窗中執行下列命令,以配置並啟動您目的地上的本機代理,以使用接聽 HTTP 連接埠的 Web 代理。

set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} set HTTPS_PROXY=http://proxy.example.com:1234 .\localproxy -r us-east-1 -d 22

若您必須使用代理進行驗證,則必須指定 usernamepassword 以作為 HTTPS_PROXY 變數的一部分。

set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} set HTTPS_PROXY=http://username:password@10.15.20.25:1234 .\localproxy -r us-east-1 -d 22

在 HTTPS 連接埠上接聽 Web 代理

若您的 Web 代理正在接聽 HTTPS 連接埠,請執行下列命令。

注意

如果您使用的是自簽名證書的 Web 代理,或者如果您在沒有原生 OpenSSL 支持和默認配置的操作系統上運行本地代理,則必須按照存儲庫中的證書設置部分中的說明設置 Web 代理證書。 GitHub

下列命令與您為 HTTP 代理配置 Web 代理的方式類似,不同之處在於您還需要指定之前所述所安裝憑證檔案的路徑。

Linux/macOS

在 Linux 或 macOS 中,請在終端機中執行下列命令,以配置執行於您目的地上的本機代理,以使用接聽 HTTPS 連接埠的 Web 代理。

export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} export HTTPS_PROXY=http:proxy.example.com:1234 ./localproxy -r us-east-1 -d 22 -c /path/to/certs

若您必須使用代理進行驗證,則必須指定 usernamepassword 以作為 HTTPS_PROXY 變數的一部分。

export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} export HTTPS_PROXY=http://username:password@proxy.example.com:1234 ./localproxy -r us-east-1 -d 22 -c /path/to/certs
Windows

在 Windows 中,執行 cmd 視窗中的下列命令,可配置並啟動執行於目的地上的本機代理,以使用接聽 HTTP 連接埠的 Web 代理。

set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} set HTTPS_PROXY=http://proxy.example.com:1234 .\localproxy -r us-east-1 -d 22 -c \path\to\certs

若您必須使用代理進行驗證,則必須指定 usernamepassword 以作為 HTTPS_PROXY 變數的一部分。

set AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} set HTTPS_PROXY=http://username:password@10.15.20.25:1234 .\localproxy -r us-east-1 -d 22 -c \path\to\certs

命令和輸出範例

下列會顯示您執行於 Linux 作業系統上的命令範例,及相對應的輸出。該範例顯示接聽 HTTP 連接埠上的 Web 代理,及如何配置本機代理以 sourcedestination 兩種模式來使用 Web 代理。在執行這些命令之前,您必須先開啟通道並取得來源和目的地的用戶端存取字符。您還必須依照先前所述建置本機代理並配置 Web 代理。

此處概述您啟動本機代理後的步驟。本機代理:

  • 識別 Web 代理 URL,以便其可使用 URL 連線至代理伺服器。

  • 建立與 Web 代理的 TCP 連線。

  • 將 HTTP CONNECT 請求傳送至 Web 代理,並等待 HTTP/1.1 200 回應,表示已建立連線。

  • 將 HTTPS 通訊協定升級 WebSockets 為建立長期連線。

  • 透過與安全通道裝置端點的連接,開始傳輸資料。

注意

用於範例中的下列命令會使用 verbosity 標記,說明執行本機代理後先前所述之不同步驟的概觀。建議您僅將此標記用於測試目的。

以來源模式執行本機代理

下列命令顯示如何以來源模式執行本機代理。

export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} export HTTPS_PROXY=http:username:password@10.15.10.25:1234 ./localproxy -s 5555 -v 5 -r us-west-2

下列會顯示以 source 模式執行本機代理的範例輸出。

... Parsed basic auth credentials for the URL Found Web proxy information in the environment variables, will use it to connect via the proxy. ... Starting proxy in source mode Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443 Resolved Web proxy IP: 10.10.0.11 Connected successfully with Web Proxy Successfully sent HTTP CONNECT to the Web proxy Full response from the Web proxy: HTTP/1.1 200 Connection established TCP tunnel established successfully Connected successfully with proxy server Successfully completed SSL handshake with proxy server Web socket session ID: 0a109afffee745f5-00001341-000b8138-cc6c878d80e8adb0-f186064b Web socket subprotocol selected: aws.iot.securetunneling-2.0 Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443 Seting up web socket pings for every 5000 milliseconds Scheduled next read: ... Starting web socket read loop continue reading... Resolved bind IP: 127.0.0.1 Listening for new connection on port 5555
以目的地模式執行本機代理

下列命令顯示如何以目的地模式執行本機代理。

export AWSIOT_TUNNEL_ACCESS_TOKEN=${access_token} export HTTPS_PROXY=http:username:password@10.15.10.25:1234 ./localproxy -d 22 -v 5 -r us-west-2

下列會顯示以 destination 模式執行本機代理的範例輸出。

... Parsed basic auth credentials for the URL Found Web proxy information in the environment variables, will use it to connect via the proxy. ... Starting proxy in destination mode Attempting to establish web socket connection with endpoint wss://data.tunneling.iot.us-west-2.amazonaws.com:443 Resolved Web proxy IP: 10.10.0.1 Connected successfully with Web Proxy Successfully sent HTTP CONNECT to the Web proxy Full response from the Web proxy: HTTP/1.1 200 Connection established TCP tunnel established successfully Connected successfully with proxy server Successfully completed SSL handshake with proxy server Web socket session ID: 06717bfffed3fd05-00001355-000b8315-da3109a85da804dd-24c3d10d Web socket subprotocol selected: aws.iot.securetunneling-2.0 Successfully established websocket connection with proxy server: wss://data.tunneling.iot.us-west-2.amazonaws.com:443 Seting up web socket pings for every 5000 milliseconds Scheduled next read: ... Starting web socket read loop continue reading...