2017-02-20 117 views
1

簡短版本:我在設置用於虛擬主機的AWS S3存儲桶的靜態網站上收到https錯誤,但未收到https。它位於指向我的AWS Route 53託管區域上的S3存儲桶的CNAME記錄中,其中A記錄轉到其他站點,該站點使用https。子網域上的AWS S3靜態網站上的https錯誤

龍版本:

我在上AWS EC2實例我的頂點URL(idoimaging.com)主辦的Rails站。我希望獨立於此,將博客作爲靜態網站(Jekyll)作爲子域blog.idoimaging.com進行託管。

要測試一個簡單的設置,我嘗試了一個最小的靜態子域名網站hello.idoimaging.com。我製作了一個名爲hello.idoimaging.com的測試存儲桶,並在其中放入了小型文件index.htmlerror.html。我啓用了網站在桶性質的託管,並增加了讀取所有政策桶:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Allow Public Access to All Objects", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::hello.idoimaging.com/*" 
     } 
    ] 
} 

我可以直接在其端點hello.idoimaging.com.s3-website-us-east-1.amazonaws.com訪問桶,我看到index.html頁面。迄今爲止都很好。

現在我想設置CNAME,以便我可以訪問靜態網站hello.idoimaging.com。在AWS Route 53中,我爲我的idoimaging.com域設置了託管區域,並在該域中創建了名稱爲「hello.idoimaging.com」且值爲「hello.idoimaging.com.s3-website-us-east-1.amazonaws.com」的CNAME。

挖掘結果看行:

$ dig hello.idoimaging.com 
... 
;; QUESTION SECTION: 
;hello.idoimaging.com.  IN A 
... 
;; ANSWER SECTION: 
hello.idoimaging.com. 226 IN CNAME hello.idoimaging.com.s3-website-us-east-1.amazonaws.com. 
hello.idoimaging.com.s3-website-us-east-1.amazonaws.com. 60 IN CNAME s3-website-us-east-1.amazonaws.com. 
s3-website-us-east-1.amazonaws.com. 3 IN A 52.216.64.90 
... 
;; AUTHORITY SECTION: 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-1133.awsdns-13.org. 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-1919.awsdns-47.co.uk. 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-490.awsdns-61.com. 
s3-website-us-east-1.amazonaws.com. 1778 IN NS ns-661.awsdns-18.net. 

起初,當我試圖訪問hello.idoimaging.com我剛剛得到一個超時。我讀了一篇關於右鍵點擊存儲桶中的對象「公開」的帖子。這聽起來並不合適,因爲我認爲這是桶政策的目的,但是當我嘗試時,我得到了改變。在權限下,我現在有受讓人:每個人都沒有權限打開/下載,儘管它仍然無法正常工作,但現在我得到HTTPS安全錯誤,而不是超時。所以看起來'公開'(我以前從未使用過)會有所作爲。進展,我猜?

使用curl我可以獲取hello.idoimaging.com並檢索index.html文件,無後顧之憂,即使我使用HTTPS --proto。然而,wget和任何瀏覽器都不會。

hello.idoimaging.com的所有請求,現在被迫https://開頭,這是與失敗「您的連接不是私人」 /「這個網站使用HTTP嚴格傳輸安全(HSTS)」,並在不同的瀏覽器的各種不同的消息。這種force-to-https行爲是否正常?我問的原因是我的apex站點,在nginx服務器中,將http請求重定向到https。但是如果我請求hello.idoimaging.com,DNS將爲我的S3站點選擇CNAME,而不是我的apex站點的A記錄,對吧?似乎他們不能相關。 apex站點使用來自letsencrypt.org的本地證書進行保護。

一旦我開始使用這個功能,我想使用CloudFront,但現在我的S3網站已經有足夠的難度了。

看起來問題的結果是從hello.idoimaging.com的請求(類型如此)被強制爲https,這是失敗的。尋找建議。如果我的apex站點出現https問題,並且該子站點不是https,似乎我會通過嘗試在子站點上設置https來使其複雜化,因爲它將使用來自apex站點的不同證書。

所有這些東西都起來了,現在就住。

+1

我傾向於認爲這將證明是[Amazon AWS 307響應和永久重定向到HTTPS]的副本(http://stackoverflow.com/ a/28595295/1695906) - 您已經在您的基本域上配置了HSTS,並且*瀏覽器*似乎將其擴展到子域。該服務沒有這樣做。它不能,因爲Web站點託管桶無法在沒有CloudFront幫助的情況下執行HTTPS。 –

+0

這看起來很有希望!我的nginx服務器沒有配置Strict-Transport-Security頭,但它肯定會解釋行爲。此外,爲什麼curl可以獲取index.html頁面,但瀏覽器不能。我正在閱讀HSTS。看來這將是一件好事嗎?由於我要將S3存儲桶放在支持TLS的CloudFront之後,我應該繼續前進嗎?我認爲從http開始會更簡單,也許會導致問題。 –

+1

原則上,您是對的,先嚐試更簡單的配置,但在這種情況下,可能會使事情變得複雜。我懷疑你必須在某個時候配置HSTS,因爲這會發生。瀏覽者在看到它時會記住該標誌。另請注意,使用CloudFront時,當爲存儲網站配置存儲區時,[不要從下拉列表中選擇存儲區名稱](http://stackoverflow.com/a/34065543/1695906)。將網站端點主機名(您當前的CNAME目標)鍵入到原始主機名框中。 –

回答

1
  • 您是否指定index.html作爲索引文件?
  • 另外推薦的方式來設置自定義DNS的桶是使用類型A記錄與別名類型。在別名目標放s3-website-us-east-1.amazonaws.com.

P.S.關於SSL,s3不提供帶有自定義DNS的網站的ssl,唯一的選擇是在前面添加CloudFront。

P.S.清除瀏覽器緩存或嘗試進入無痕模式: enter image description here

+0

乾杯。我確實指定了index.html。正如你所建議的,我使用s3端點將其從CNAME更改爲A別名(作爲建議彈出),但現在它已超時。我注意到,當我嘗試wget hello.idoimaging.com時,它說「由於HSTS策略而轉換爲HTTPS的URL」,這可能與https問題有關嗎?如果我直接連接到S3存儲桶端點,它將保留在http中。 –

+0

它爲我工作:http://hello.idoimaging.com/ –

+0

我看到你它留下http和工作。對於我從CNAME更改爲別名後,它仍強制爲https,並仍然超時。我正在嘗試從隱身/清除緩存。 –