親愛的,我把HTTP無痛變成HTTPS了

親愛的,我把HTTP無痛變成HTTPS了

AWS API Gateway HTTP 代理整合教學

各位好,你是否也曾碰到需要使用HTTPS進行跨API通訊時,但卻苦於有一邊是HTTP? 又或者臨時需要HTTP變成HTTPS呢?

本篇提供出一種方法,教你如何讓HTTP服務,快速變成HTTPS

[問題點]

例如:某一個HTTPS API A要與HTTP API B做呼叫時,就會發生以下狀況

主要是瀏覽器有一條資安規則,API之間互相呼叫時,不得使用到HTTP通訊

相信這時的你,已經開始面臨崩潰了!

但不要緊,我們還是有幾個思路能解決問題的

[思考點]

釐清問題

  1. HTTPS API A 的傳輸對象一定也要HTTPS
  2. 需要把 HTTP API B 變成HTTPS
  3. 找一個代理,作為API A的接口,以代替API B,並接到API B (A–>代理–>B)

分析問題

  1. 這是一條瀏覽器安全規則,不要去想怎麼繞過它
  2. 如果可以直接裝SSL,我還需要Google找問題嗎?
  3. 使用HTTP代理服務,如Nginx的反向代理(reverse proxy),或是雲端代理(如AWS API Gateway HTTP 代理)

探討作法

  1. 使用Nginx,雖然可以利用反向代理(reverse proxy)保護API B,但是Nginx本身還是要裝SSL
  2. 使用AWS API Gateway,建置後就會附贈一組AWS網域下的HTTPS Endpoint URL,且設定極為簡單

官方文件參考:https://docs.aws.amazon.com/zh_tw/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-http.html

[解決點]

  1. 開啟 https://console.aws.amazon.com/apigateway
  • 點選 [建立API]
  • 選擇 API 類型 -> [REST API建置]
  • 選擇通訊協定 -> [REST]
  • 建立新的 API -> [新 API]
  • 設定 API 名稱* -> **[任意名稱]**
  • 端點類型 -> [區域性]

[區域性]是指在服務上的Region建立,如果是需要快取功能及更完整的全球部署,可選擇[邊緣最佳化],最後,若是需要私有VPC連線,則選[私有]

  1. 進入剛建立的API Gateway
  • 點選 [資源]
  • 點選根資源 [/]
  • 點選 [操作]
  • 點選 [建立資源]
  • 設定為代理資源 [打勾]
  • [Option] 可啟用或不啟用 CORS (為了測試可以先不啟用)

資源名稱可以不用更改,那只是資源路徑使用時的參數名稱

  1. 設定proxy要代理的端點 URL

proxy參數就是剛剛填寫的資源名稱

  1. 完成並測試
  • 點選資源的/{proxy+} [ANY]
  • 點選 [測試]

這邊開始請依照你需要測試的URL參數 假設我們是要測試,代理YAHOO股市 [長榮股票資訊]

  • 方法 [GET]
  • 路徑 [q/bc]
  • 查詢字串 [s=2603]
  • 點選 [測試]

最後請求就會看到 [/q/bc?s=2603] 以及回應內文 [長榮股票資訊]

  1. 正式部署
  • 點選資源的/{proxy+} [ANY]
  • 點選 [操作]
  • 點選 [部署API]
  • 部署階段填入任意名字 [如product or test之類]
  • 點選 [部署]
  • 產出連結 https://[API Gateway資源名稱].execute-api.ap-northeast-1.amazonaws.com/test
  1. 使用結果


以上就是如何使用AWS API Gateway HTTP 代理整合,並快速解決沒有SSL的問題


留言板
歷史留言

標籤