2017-08-11 109 views
0

我擔心這可能是一個編程問題,但我也希望您可能會有一些建議。從AWS ELB轉發到EC2實例上的不安全端口

我正在使用AWS彈性負載平衡器轉移到故障轉移環境,以將流量定向到EC2實例。目前,我已經在ELB背後安裝了一個EC2實例。你會在一瞬間明白爲什麼。儘管它使用此ELB - > EC2路徑向我的客戶提供內容,但它仍處於測試模式。

在我的每個生產環境中(我有兩個),我在負載平衡器上有一個AWS證書,在EC2實例上有私人獲得的安全證書。負載均衡器偵聽器被配置爲將在端口443上接收到的流量發送到EC2實例上的安全端口(443)。這是行得通的;然而,隨着我在負載均衡器後擴展到更多EC2實例,我必須爲這些EC2實例中的每一個購買安全證書。

使用向我推薦的建議,我使用新的負載平衡器及其配置的EC2服務器建立了測試環境。該ELB服務器將在其端口443上收到的消息發送到EC2系統上的端口80。我被告知這是它應該完成的方式 - 將加密/解密限制到負載均衡器,並在負載均衡器和其實例之間使用未加密的通信。

最後,這是我的問題。此應用程序提供的HTML頁面使用相對引用來指向每個頁面中的嵌入式腳本和其他工件。當請求到達EC2實例(應用程序服務器)時,它已被降級爲HTTP,而不管它是什麼。這意味着對這些嵌入工件的引用呈現爲不安全(HTTP)。由於原始頁面引用是安全的(HTTPS),瀏覽器拒絕加載這些不安全的資源。

我已經在應用程序中使用頭部X-Forwarded-Proto來確定負載平衡器上的原始請求是HTTP還是HTTPS。我希望不要希望EC2實例中有一些參數告訴它根據收到的X-Forwarded-Proto頭來呈現相對引用。除此之外,你有沒有關於別人如何解決這個問題的想法?

謝謝你的時間和考慮。

+1

爲什麼你需要爲每個EC2實例購買安全證書? –

回答

0

首先,通過在ELB/ALB中使用SSL終端,然後將安全組分配給僅接受來自ELB/ALB的流量的EC2的安全組,這是正確的方法。

但是,基於X-Forwarded-Proto請求頭或基於自定義配置的https url響應需要在應用程序代碼或Web服務器中處理。