如何為在 AWS 中執行的 Web 應用程序和 HTTP API 啟用 SSL?
我推遲寫這個問題,因為我不確定它是屬於 ServerFault 還是 StackOverflow。
我有一個託管在 AWS S3 儲存桶中並使用 CloudFront 的 React Web 應用程序。我有一個 REST API 編寫為在 AWS EC2 實例上執行的 Java Spring Boot 應用程序。我正在嘗試在這兩個上啟用 SSL 以保護我的流量。
到目前為止,我已經使用 AWS 生成的 SSL 證書來保護 Web 應用程序。我嘗試使用相同的 AWS 生成的 SSL 證書來保護 Java Spring Boot 應用程序,並且我了解到使用此證書是不可能的。應用程序啟動時,所有嘗試使用此證書使 Java Spring Boot 應用程序支持 SSL 的嘗試都失敗了。
我一直在本地試驗自簽名證書,在接受瀏覽器警告後,它適用於 Web 應用程序,但不適用於 Java Spring Boot 應用程序。Java Spring Boot 應用程序啟動良好,我可以使用 Postman 訪問 API(在配置 Postman 以跳過證書驗證之後)。我相信我使用 (Axios) 呼叫 Java Spring Boot 應用程序的 JavaScript 庫無法處理自簽名證書,並且我無法將其配置為接受/忽略自簽名證書。最終我不會使用自簽名證書,所以無論如何這是一個死胡同。
我在 EC2 實例上使用 HTTP API 部署託管在 S3 中的 Web 應用程序似乎並不罕見。是嗎?我應該採取不同的做法嗎?
在我通過購買證書和使用更多 AWS 服務進一步深入兔子洞之前,我希望這裡有人可以給我一些指導。
首先,我不相信 AWS 對應用於其基礎設施的證書收費。我會在 CloudFront 和 EC2 實例之間放置一個負載均衡器,並在負載均衡器上使用證書,並在負載均衡器和 EC2 實例之間使用未加密的流量。希望這可以解決您的應用程序問題。您可以使用安全規則將實例僅鎖定到負載均衡器。
有幾種方法可以將負載均衡器鎖定到 CloudFront - 一種常見的記錄方法是放置一個小型且不經常執行的 Lambda 函式來限制對 CloudFront IP 地址的訪問,如此處所述。
我還讓 CloudFront 添加了一個自定義標頭,其中包含一個魔術字元串作為其值,並讓 EC2 上的 apache 過濾掉任何沒有魔術字元串的流量。這兩項措施似乎在阻止對伺服器的非雲端訪問方面完全有效,您可以將進一步的 WAF 措施集中在 CloudFront 分發本身上。