網站資安

HTTPS 跟 HTTP 有什麼不同?不安全警告、SEO 影響與全站切換步驟

HTTP 傳資料的方式,很像寄一張明信片:內容全寫在外面,從寄出到送達,每個經手的人都讀得到,要偷偷改幾個字也不難。HTTPS 則是把同一張明信片放進封好的信封,再蓋上一枚只有收件人才核對得出真偽的封緘章。差別就這麼具體,在網址列上看起來卻只多了一個字母 S。

這個差別早就不只是技術圈的事。Chrome 自 2018 年起把 HTTP 網頁標成「不安全」,2026 年 9 月 22 日進入穩定版的 Chrome 154 更進一步,預設在使用者第一次連上不支援 HTTPS 的公開網站前,先跳出警告。官網如果還停在 http://,訪客遇到的就是一道要手動放行的關卡,而經營者往往到那時才發現,網站其實沒換好。

買一張憑證、裝上去,常被當成已經換好了,其實憑證只是第一步。轉址、站內網址、搜尋引擎端的設定只要漏掉一環,網站照樣會出現警告、掉圖,甚至陷入轉址迴圈。

HTTPS 是什麼?

HTTPS 是在 HTTP 外面多包一層 TLS 加密的版本。HTTP 的全名是 HyperText Transfer Protocol,也就是瀏覽器向網站要網頁時使用的通訊協定;protocol 的中文就是「通訊協定」,指雙方事先講好的溝通規則。HTTPS 的 S 代表 Secure,網址開頭也從 http:// 換成 https://。

根據 MDN 的說明,TLS(Transport Layer Security,傳輸層安全性協定)讓用戶端(例如瀏覽器)能在不受信任的網路上,與伺服器安全地通訊,套用在 HTTP 上的結果就叫 HTTPS。所以換成 HTTPS,網站還是同一套,只是 HTTP 外面多了一層保護:網頁內容、網址結構、後台的運作方式都不變,改變的只有瀏覽器與伺服器之間那段路,從任何人攔到都看得懂的明文傳輸,改成加密傳輸。

至於 SSL 與 TLS 的關係,簡單來說,TLS 是 SSL 的後繼協定,現行版本是 TLS 1.3(RFC 8446),TLS 1.0 與 1.1 已不應再使用。不過市面上仍習慣把憑證叫作「SSL 憑證」,這個名稱指的就是 HTTPS 所用的憑證。

HTTPS 比 HTTP 多了加密、身分驗證與完整性檢查

MDN 指出,TLS 以三種方式保護連線:加密、身分驗證與完整性。每一項都對應中小企業網站會遇到的實際情境,例如聯絡表單、後台登入、公用 Wi-Fi,以及頁面在途中被插入內容。

HTTPS 防禦的對象,是所謂的中間人(Man-in-the-Middle,簡稱 MITM):攻擊者把自己插在瀏覽器與伺服器之間,可以讀取,也可以修改雙方交換的流量。這也說明了 HTTP 的問題不在於資料夠不夠敏感,而是任何一個頁面,在傳輸途中都可能被讀取或改寫。

HTTP 明文傳輸讓途中的中間人讀得到也改得了,HTTPS 以 TLS 加密,提供加密、身分驗證與完整性三項保護
HTTP 像明信片,途中的人讀得到也改得了;HTTPS 加上 TLS 後,途中攔到的只剩亂碼,改寫也會被察覺。

加密擋下的是傳輸途中的竊聽

HTTP 以明文傳輸,途中經過的任何一台設備,例如咖啡廳公用 Wi-Fi 的熱點,都有機會讀到內容。加密之後,依 MDN 的說明,攻擊者讀不到傳輸中的資料,途中攔到的只是一串看不懂的亂碼。

最容易被忽略的暴露點,是表單、登入與後台頁。訪客在聯絡表單填的姓名、電話與需求,你自己登入後台時輸入的帳號密碼,在 HTTP 下全都是明文送出。後台網址沒有人會去逛,不代表傳輸途中沒有人看得到。

身分驗證靠憑證確認網域本人

光是加密還不夠,因為加密連線的另一端,也可能是冒名頂替的假網站。憑證就是用來確認身分的。MDN 說明,憑證內含簽章過的公開金鑰(網站對外公開、用來建立加密連線的那把鑰匙),把網站的金鑰與網域名稱綁在一起,瀏覽器才知道自己連到的真的是 https://example.com,而不是中途冒充的人。

憑證如果對不上,例如已經過期,或沒有涵蓋訪客輸入的網域,瀏覽器就會在載入網頁前先擋下整頁。憑證分成 DV(網域驗證)、OV(組織驗證)、EV(延伸驗證)等不同等級,各自查核的範圍不同;不論哪一級,在 HTTPS 裡的基本作用都是證明這個網域確實是它所宣稱的那一個。

完整性檢查讓傳輸內容無法被悄悄改寫

除了「看不到」,還有「改不了」。MDN 把這一項稱為完整性:攻擊者無法在不被察覺的情況下,修改傳輸中的資料。在 HTTP 下,途中的設備可以在頁面裡塞進廣告、替換下載連結,或改掉一段腳本,訪客看到的就不是網站原本送出的版本。web.dev 在談混合內容時也提醒,攻擊者攔截資源之後,可以替換圖片、竄改頁面,主動式內容(例如腳本)甚至能讓攻擊者幾乎完全控制整個頁面。

完整性與加密是兩件事:加密擋的是讀取,完整性擋的是改寫。這也是為什麼連沒有任何輸入欄位的純展示型官網,都值得用 HTTPS。頁面上沒有需要保護的資料,內容卻仍可能被塞進不是你寫的廣告或連結,而訪客只會覺得,是你的網站出了問題。

瀏覽器對 HTTP 頁面的警告越來越直接

從訪客的角度看,HTTP 與 HTTPS 最直接的差別,在於瀏覽器怎麼標示、怎麼處理。這幾年的方向相當一致,從輕輕提醒,走到進入網站前先擋一道。

Chrome 從 2018 年的 68 版標示 HTTP 網頁不安全,到 2026 年 9 月的 154 版預設在進站前先跳警告
Chrome 對 HTTP 網頁的處理一路收緊:先在網址列標示不安全,117 版換掉鎖頭,154 版起預設在進站前先警告(資料來源:Chromium 部落格、Google、Chrome for Developers)。

Chrome 從標示不安全開始,到 154 版起進站前先跳警告

Chromium 部落格在 2018 年 2 月說明,自 2018 年 7 月的 Chrome 68 起,網址列會對所有 HTTP 網頁顯示「Not secure」(不安全)。這是第一個階段:HTTP 網頁從此在畫面上多了一個一眼就看得到的標籤。

下一個階段是「一律使用安全連線」(Always Use Secure Connections)。依 Google 在 2025 年 10 月的公告,這項設定先在 Chrome 147(2026 年 4 月)對已開啟加強型安全瀏覽的使用者啟用,再自 Chrome 154 起改成所有使用者預設開啟。這個版本已在 2026 年 9 月 22 日進入穩定版,Chrome for Developers 的版本說明也把「預設在使用者連上不安全的 HTTP 連線時先詢問」列為更新項目。

運作方式是 Chrome 先嘗試以 HTTPS 連線,連不上時,才在第一次進入該公開網站前跳出警告(經常造訪的網站不會一再警告),說明這個網站不支援安全連線,攻擊者可能檢視或更改傳送與接收的資訊。使用者可以選擇「Continue to site」繼續,或選擇「Return」返回。

這項設定只針對公開網站,內網、區網 IP(例如 192.168.0.1)、單一標籤主機名稱(名稱裡沒有點號的主機)與 intranet/ 這類捷徑,都不在範圍內。Google 同時公布,公開網站的導覽已有絕大多數是 HTTPS:Windows 約 98%,Android 與 Mac 超過 99%,Linux 近 97%;中位數的使用者每週遇到的警告不到 1 次,第 95 百分位的使用者每週也少於 3 次。多數網站早已換好,沒換的網站反而顯眼,訪客會在進站前多看到一道要手動放行的關卡。至於有多少人會因此離開,Google 沒有公布數據。

Chrome 154 起先嘗試以 HTTPS 連線,連不上且第一次進入公開網站時才跳警告,內網與區網 IP 不在範圍內
連不上 HTTPS 的公開網站,訪客第一次進站前會先看到警告,要自己選擇繼續或返回;此為流程示意,非實際介面(資料來源:Google、Chrome for Developers)。

鎖頭只證明連線加密而不保證網站可信

很多人把網址列的鎖頭,當成「這個網站可信」的保證,其實它只表示連線是加密的、網域對得上。Let’s Encrypt 在〈The CA’s Role in Fighting Phishing and Malware〉一文中說明,DV 憑證斷言的只有「某把公開金鑰屬於某個網域」,沒有提供任何關於網站內容、經營者身分或安全性的資訊;攻擊者只要換一家憑證機構申請,幾乎總能拿到憑證,而且持有的時間足以拿來傷害使用者。換句話說,釣魚站同樣可以擁有 HTTPS。

Chromium 部落格在 2023 年 5 月公布了同一個觀察:2021 年的研究顯示,只有 11% 的受試者正確理解鎖頭圖示的精確意義,而且幾乎所有釣魚網站都使用 HTTPS,也都顯示鎖頭。Chrome 因此自 2023 年 9 月發佈的 Chrome 117 起,把網址列的鎖頭換成中性的設定圖示,目的是強調安全應該是預設狀態,而不是靠一個圖示替網站背書。

這等於替 HTTPS 劃出一條邊界,它是必要條件,卻不是萬靈丹。加密連線保護的是訪客與網站之間那段路;網站內容誠不誠實、帳號設定有沒有漏洞、外掛有沒有更新,都不在它的保護範圍,所以「有 HTTPS」不能當成網站安全的全部。

HTTPS 對 SEO 的影響比坊間說法保守

換成 HTTPS 常被當成一個 SEO 動作,不過 Google 公開說過的內容,其實比坊間的說法保守許多。這件事該做,但不要期待排名因此大幅提升。

安全連線在 Google 排名中只算輕量訊號

2014 年 8 月,Google 搜尋中心部落格宣布開始把 HTTPS 納入排名訊號,同時說明這只是一個非常輕量的訊號:影響全球不到 1% 的查詢,權重也不及高品質內容等其他訊號,並表示日後可能強化。

Google 目前的〈瞭解 Google 搜尋結果中的網頁體驗〉文件,把「網頁是否以安全的途徑提供」列為自我評估的問題之一,也提供 Search Console 的 HTTPS 報表,用來找出沒有以 HTTPS 提供的頁面與原因。不過同一份文件的常見問題也說明,除了 Core Web Vitals 之外,其他網頁體驗層面不會直接幫助網站在搜尋結果中提高排名;這些層面通常讓網站更符合使用者的需求,而這大致與 Google 排名系統考量的因素相同。

較準確的說法是,換成 HTTPS 的理由是保護訪客、維持信任,SEO 是附帶的好處,而不是主因。

Google 挑選標準網址時預設偏好 HTTPS 版本

HTTPS 對搜尋最確定、也最具體的影響,出現在標準網址的挑選。標準網址(canonical URL)是同一份內容有好幾個網址時,Google 選來代表、顯示在搜尋結果裡的那一個。HTTP 與 HTTPS 兩個版本同時存在時,Google 預設選 HTTPS 當標準網址,但說明文件也列出四種例外情況,可能讓 Google 改選 HTTP:

  1. HTTPS 頁面的憑證無效。
  2. HTTPS 頁面含有不安全的相依資源(圖片除外)。
  3. HTTPS 頁面會把使用者重新導向到 HTTP 頁面,或經過 HTTP 頁面再轉走。
  4. HTTPS 頁面的 rel=”canonical” 指向 HTTP 頁面。

文件特別提醒,憑證有問題與把 HTTPS 導回 HTTP,會讓 Google 非常強烈地偏好 HTTP,而且啟用 HSTS(要求瀏覽器只走加密連線的設定,後面換站步驟的最後一步會說明)也蓋不掉這個偏好。另外,憑證必須與完整的網站網址相符,或是萬用憑證(一張涵蓋同一層所有子網域的憑證,例如 *.example.com);example.com 這個網址送出的卻是 subdomain.example.com 的憑證,就是文件舉的錯誤例子。sitemap(網站地圖)與 hreflang(多語系版本標記)也不該列 HTTP 版本的網址。

把這四種情況反過來看,就是四件要做到的設定:憑證保持有效、頁面沒有混合內容(安全頁面裡夾帶 http 資源)、不要把 https 導回 http、canonical 指向 https 版本自己。它們剛好也是切換時最容易出狀況的四個地方。

全站換成 HTTPS 的六個步驟

Google 把網址從 HTTP 改成 HTTPS,視為網站遷移的一種,所以要照遷移的方式來做。小型與中型網站,Google 建議一次完成所有網址的遷移,不必分批;遷移期間排名可能短暫波動,中型網站的新網址通常要數週或更久,才會逐漸取代舊網址出現在搜尋結果裡;至於轉址,Google 明確說明,301(永久轉址)與其他永久重新導向不會導致 PageRank(Google 用來評估連結價值的指標)下滑。

這六個步驟的順序不能隨意調換。憑證沒裝好就先轉址,訪客會被導到一個打不開的網址;太早啟用 HSTS,一旦設定出錯,連略過警告的選項都沒有。每一步放在它的位置,都有原因。

全站換成 HTTPS 的六個步驟:安裝憑證、清除混合內容、單次 301、更新 canonical 與 sitemap、Search Console 驗證、最後啟用 HSTS
六個步驟照順序做:憑證沒裝好就轉址,訪客會被導到打不開的網址;太早啟用 HSTS,一出錯就連略過警告的選項都沒有。

取得並安裝涵蓋 www 與裸網域的憑證

Let’s Encrypt 的說明指出,對許多人來說,主機商會代為取得並管理憑證,可能自動完成,也可能在設定頁勾選開啟,所以第一步是先問主機商有沒有代管。主機商不處理、而且能在伺服器上執行指令時,才需要自己選一個 ACME 客戶端(自動申請與續簽憑證的程式)去申請,Let’s Encrypt 對多數人推薦的是 Certbot。

免費不代表次級。Let’s Encrypt 是非營利的憑證機構,不收費,只簽發 DV 憑證,不提供 OV 與 EV;一般官網用 DV 憑證就能滿足 HTTPS 的加密與網域驗證。預設效期目前是 90 天,2027 年 2 月 10 日起還會再縮短,所以續簽一定要靠自動化,不能靠人記得。

憑證涵蓋的主機名稱,則要與訪客實際會輸入的網址一致。裸網域(example.com)與 www.example.com 兩個版本都要在涵蓋範圍內,否則其中一個版本會直接跳出警告。前面提過,Google 的標準網址文件也要求憑證與完整網站網址相符,或使用萬用憑證。

站內寫死的 http 資源全改掉,混合內容才會消失

憑證裝好之後,頁面主體雖然走 HTTPS,但文章裡寫死的 http 圖片、腳本與字型網址,仍然會造成混合內容:HTML 以 HTTPS 載入,其他資源卻走 HTTP。web.dev 把混合內容分成兩類,被動式(圖片、影片、音訊)風險較低,主動式(腳本、樣式表、iframe 等)則可能讓攻擊者幾乎完全控制頁面。大多數瀏覽器現在會封鎖混合內容,Chrome 在某些情況下也會把被動內容自動升級成 HTTPS,沒有安全版本時就不載入。

HTTPS 頁面裡的被動式混合內容風險較低,主動式混合內容會被瀏覽器封鎖,讓按鈕、選單與表單失靈
混合內容分兩種:寫死 http 的圖片多半只影響安全標示,寫死 http 的腳本被封鎖後,功能會直接失靈(資料來源:web.dev、MDN)。

這會直接影響訪客的使用體驗:被封鎖的主動內容,可能讓按鈕沒反應、選單失靈,或表單送不出去。要找出殘留的網址,可以打開 Chrome 開發人員工具,web.dev 說明偵測到的混合內容會記錄在「問題」分頁,主控台也會列出對應的網址。

處理的原則很單純。同網域的資源,優先改用相對網址或 https 網址;外部資源改成 https 版本,沒有安全版本就換掉或移除。如果一時改不了程式碼,MDN 提供了備援做法:在伺服器設定含 upgrade-insecure-requests 指示詞的 Content-Security-Policy,讓瀏覽器自動把這些請求升級成 HTTPS。WordPress 資料庫裡殘留的舊網址,則需要另外清理。

用單次 301 把 http 網址直接導向最終網址

全站轉址是這次切換的主軸,做法是用伺服器端的永久重新導向,把每個 http 網址對到同一路徑的 https 網址。Google 的網站遷移文件建議使用 301 或 308 這兩種伺服器端永久重新導向;MDN 說明兩者的差別在於 308 會保留請求方法與內文(例如表單送出的資料),一般網頁導覽用 301 就夠。MDN 的 TLS 說明也提到,只用 HTTPS 的網站同樣要接收 HTTP 的連線,再用 301 導向 HTTPS 版本。

轉址要一次跳到最終網址,不要形成 http → https → www 這種連鎖轉址。Google 的爬蟲 Googlebot 在轉址鏈中最多追蹤 10 個躍點,但 Google 建議越短越好,最好不超過 3 次、至少少於 5 次;每多轉一次,訪客也多等一次。所以 http 與 https、www 與非 www 要合併成同一跳,例如 http://example.com/page 直接到 https://www.example.com/page。

http 網址應以單次 301 直接導向最終的 https 網址,避免 http、https、www 串成兩次的連鎖轉址
http 與 https、www 與非 www 合併成同一跳,訪客少等一次,也符合 Google 建議轉址越短越好的原則(資料來源:Google 搜尋中心、MDN)。

內部連結則直接改成 https。MDN 提醒,每次轉址都多一次 HTTP 請求的效能成本,改得了的連結就別靠轉址補。至於轉址寫在哪裡,主機後台的「強制 HTTPS」開關、伺服器設定檔與 WordPress 的轉址設定都是常見做法,原則是同一時間只留一處負責,避免互相抵銷。也別把 HTTPS 頁面轉回 HTTP,前面提過,那會讓 Google 改選 HTTP 當標準網址。

設定完成後,可以用瀏覽器開發人員工具的 Network 分頁,查看狀態碼與 Location,或在終端機用 curl 查看標頭:

curl -I http://example.com/Code language: Bash (bash)

回應的狀態碼應是 301 或 308,Location 標頭則指向最終的 https 網址。

同步更新 canonical、sitemap 與內部連結

轉址只是告訴搜尋引擎「這個網站搬家了」,新網址還得自己「報到」。Google 的網站遷移文件要求,每個新網址都要有自我參照的 rel=”canonical”,使用 hreflang 的網站要把註解更新成新網址,內部連結改指向新網址,並備好含新網址的 Sitemap。canonical 要用帶有通訊協定與網域的完整網址(絕對路徑)而不是相對路徑,指向 https 版本自己。

WordPress 網站的這幾件事,多半由佈景主題與 SEO 外掛隨網站網址設定連動,但仍要抽查。檢視網頁原始碼,確認 <link rel="canonical"> 的網址開頭是 https;打開 sitemap.xml,確認裡面列的網址沒有任何一筆還是 http。同一個網頁,也不要在 sitemap 與 canonical 指定兩個不同的網址,否則等於對 Google 說了兩種答案。

用 Search Console 驗證新舊版本並追蹤收錄狀況

換完之後,要確認 Google 看得到,也處理好了。Search Console 的屬性類型會決定看得到多少資料:根據 Google 的說明,網域資源包含所有子網域與多種通訊協定(http、https),網址前置字元資源則只包含符合該前置字元的網址,連通訊協定與子網域都要一致。如果只有網址前置字元資源,就要把 http、https、www、非 www 各驗證一次,才看得到完整資料。

換網址之後,驗證狀態也要重新確認。Google 的遷移文件提醒,HTML 檔案驗證要把檔案帶到新站,meta 標記驗證則要確認新環境也有帶過去。平常可以看 HTTPS 報表,找出沒有以 HTTPS 提供的頁面與原因,再看索引狀態與 Sitemap 報表裡的數字,是否逐步移向 https 網址。

這段期間要有耐心。前面提過,Google 需要數週或更久,才會逐漸顯示新網址,所以頭幾天數字沒什麼變化、搜尋結果裡仍看得到舊網址,都屬正常,不必急著回頭改設定。

HSTS 留到轉址穩定後再啟用,期限分階段拉長

HSTS(HTTP Strict Transport Security)是整個切換最後的加固。MDN 說明,它是伺服器回應時附上的一個 Strict-Transport-Security 標頭,通知瀏覽器這個主機只能用 HTTPS 存取;之後就算訪客輸入 http 網址,瀏覽器也會直接升級,不必再走一次 301。這個標頭只能透過 HTTPS 回應傳送,經由 HTTP 傳來的會被瀏覽器忽略,以免被中間人竄改。

HSTS 放在最後,是因為它一旦生效,瀏覽器會在 max-age(瀏覽器要記住這條規則多久,單位是秒)的期限內持續遵守,遇到憑證無效等 TLS 錯誤時,也不提供略過的選項。所以 hstspreload.org 的建議是,先確認所有子網域(包含不對外公開的內部子網域)都能用 HTTPS,再分階段拉長 max-age:從 5 分鐘(max-age=300)開始,再到 1 週(max-age=604800),最後是 1 個月(max-age=2592000),並且都加上 includeSubDomains。每個階段都檢查有沒有壞掉的頁面、流量有沒有異常,等滿該階段的時間才往下走,最後一階段就是等滿一個月。

Strict-Transport-Security: max-age=300; includeSubDomainsCode language: plaintext (plaintext)

HSTS 另有一個預載(preload)機制,把網域直接列進瀏覽器內建的清單。要列入預載清單,max-age 必須至少 31536000(1 年),而且要含 includeSubDomains 與 preload;但 hstspreload.org 直接說明,預載的好處相較 HSTS 本身很小,因為 Chrome 與 Safari 等瀏覽器,多半本來就會自動把 HTTP 導覽升級成 HTTPS,所以它建議使用 HSTS,不建議預載。

WordPress 內建的 HTTPS 一鍵切換不等於轉址完成

WordPress 5.7 起內建 HTTPS 的偵測與一鍵切換。根據 WordPress 核心開發筆記,站台健康狀態(Site Health)會偵測環境是否支援 HTTPS。偵測靠每日兩次的排程,用開啟憑證驗證(sslverify)的請求測試網站的加密版本,環境支援時,HTTPS 狀態區塊就會出現切換按鈕。5.7 當時的開發筆記把「未使用 HTTPS」列為重大(critical)問題,現行版本的站台健康狀態則把它歸在建議改進項目。

WordPress 網站狀態的建議改進項目列出「這個網站並未使用 HTTPS」,說明 WordPress 位址與網站位址未設定為 HTTPS
WordPress 的網站狀態會檢查 HTTPS;這個測試站的環境不支援 HTTPS,所以只提示聯絡主機商,不會出現一鍵切換按鈕(龐果測試站實截)。

不過這顆按鈕不等於「全站轉址與內容清理都做完」。它改了什麼、沒改什麼,要先弄清楚,切換之後才知道該驗證哪裡。

一鍵切換只改兩個網址欄位而不重寫資料庫

按鈕做的事,是把後台「設定→一般」裡的「WordPress 位址」與「網站位址」兩個欄位,改成 https,並由 WordPress 在輸出頁面時,即時把站內的 http 網址換成 https。依核心開發筆記的說明,這些舊網址只在輸出時替換,資料庫裡的內容並沒有被改寫;管理員若想真正替換資料庫裡的網址,仍要另外處理。

按鈕的使用條件也有限:環境要先支援 HTTPS,兩個位址的網域也必須相同。兩個位址設成不同網域的進階設定不在支援範圍;用 WP_HOME 或 WP_SITEURL 常數設定網址的網站,WordPress 無法自動更新。若切換後 WordPress 沒能正確辨識出 HTTPS,設定會自動還原。核心開發筆記說明的範圍,只有這兩個網址設定與輸出時的即時替換;伺服器層的轉址設定、外部嵌入的資源與外掛寫死的 http 網址,都不在其中,所以不要把它當成「按下去就完成」。

切換之後,建議自己實測三件事:

  1. 用無痕視窗開 http:// 版本,看會不會導向 https 版本。
  2. 開首頁與主要版型,看瀏覽器主控台有沒有混合內容警告。
  3. 開 sitemap,看裡面的網址是不是 https 開頭。

網站前面有 CDN 或反向代理時,主機端那段連線也要確認

網站前面有 CDN(內容傳遞網路,把網站內容分散到各地節點加速)或反向代理(擋在主機前面代收請求的伺服器)時,「訪客到 CDN」與「CDN 到主機」是兩段連線,各自可以是 HTTP 或 HTTPS。以 Cloudflare 為例,它把這個設定稱為加密模式,常用的有三種:Flexible 是訪客到 CDN 加密、CDN 到主機不加密;Full 是訪客走 HTTPS 時,CDN 到主機也用 HTTPS,但不驗證主機的憑證;Full (strict) 則會驗證主機的憑證。Cloudflare 的文件也強烈建議,盡可能使用 Full 或 Full (strict)。

典型的風險出現在 Flexible 模式:訪客的網址列看起來沒問題,但主機上其實沒有憑證,CDN 到主機那一段完全沒有加密。另一種連帶問題是,WordPress 收到的是 CDN 轉來的 HTTP 請求,可能因此誤判訪客用的不是 HTTPS,輸出的連結也就變成 http。所以網站前面有 CDN 或代理服務時,除了訪客端看得到鎖頭,還要確認 CDN 到主機那段的設定,以及 WordPress 判斷 HTTPS 的方式是否一致。

換成 HTTPS 後最常見的三種錯誤

換完之後最容易出事的有三種:憑證過期或網域沒涵蓋、混合內容、轉址迴圈。它們共同的特點是,症狀都看得見,只是成因各自對應前面某一個步驟沒有做完整。

憑證一旦過期或沒涵蓋網域,訪客就會看到全頁警告

觸發的情境有兩種:憑證過期了,或是憑證沒有涵蓋實際的網址,例如只簽了裸網域,沒簽 www。這時瀏覽器會在進入網頁前先擋下,顯示全頁警告。網站若已啟用 HSTS,依 MDN 的說明,瀏覽器遇到這類 TLS 錯誤時不提供略過選項,訪客連點擊繼續都做不到。對應回前面,就是安裝憑證那一步的涵蓋範圍沒對齊,而最後一步的 HSTS 又放大了這個後果。

另一個要留意的,是憑證效期還在持續縮短,靠手動續簽只會越來越容易漏。Let’s Encrypt 目前預設發 90 天的憑證。依其 2025 年 12 月 2 日的公告,給想提早採用者選用的 tlsserver profile 已在 2026 年 5 月 13 日改發 45 天憑證;預設的 classic profile 則自 2027 年 2 月 10 日起改發 64 天憑證,2028 年 2 月 16 日再降到 45 天,授權重用期(網域驗證通過後可沿用的時間)也縮短到 7 小時。Let’s Encrypt 說明,這是配合 CA/Browser Forum(憑證機構與瀏覽器業者共同制定憑證規則的組織)的基準要求,與整個產業一起調整。

CA/Browser Forum 的 SC-081v3 投票案在 2025 年 4 月 11 日通過,規定公開信任的 TLS 憑證最長效期,自 2026 年 3 月 15 日起已降為 200 天,2027 年 3 月 15 日起為 100 天,2029 年 3 月 15 日起為 47 天。

公開信任 TLS 憑證最長效期自 2026 年 3 月 15 日降為 200 天,2027 年 100 天、2029 年 47 天,Let's Encrypt 預設效期也排定縮短
憑證效期一路縮短,Let’s Encrypt 預設排定在 2027 年改為 64 天、2028 年改為 45 天,續簽只能交給自動化(資料來源:CA/Browser Forum、Let’s Encrypt)。

所以續簽要自動化,而且要有失敗告警。Let’s Encrypt 建議使用 ACME Renewal Information(ARI,由憑證機構告知建議續簽時間的機制),或在憑證效期約三分之二時續簽,並說明隨著效期縮短,寫死 60 天的續簽間隔不再足夠;它也不建議手動續簽,並建議系統設有監控,在憑證沒有如期續簽時發出告警。

混合內容會引發安全警告並讓腳本與表單失靈

混合內容的症狀有兩類。第一類是頁面看起來正常,但瀏覽器對這個頁面的安全標示出現警告,多半是被動內容造成,例如寫死 http 的圖片。第二類是某個功能整個失靈,主動內容被瀏覽器封鎖,選單、表單與第三方腳本最常出現這種狀況。web.dev 說明大多數瀏覽器會封鎖混合內容,MDN 則補充,瀏覽器會依資源類型決定升級或封鎖。

成因通常是頁面、外掛或佈景主題裡寫死的 http 網址,或是外部資源本身沒有 https 版本。先用瀏覽器主控台與開發人員工具的「問題」分頁,找出殘留的網址;把該網址改成 https 之後,如果打不開,代表那個資源本身不支援 HTTPS,只能換個來源,這也是前面清除混合內容那一步最後要處理的事。

轉址迴圈多半出在 CDN 與主機同時強制轉址

瀏覽器顯示「重新導向次數過多」(ERR_TOO_MANY_REDIRECTS)時,多半是兩個地方各自在轉址,彼此互相抵銷。最典型的組合,是 CDN 設成 Flexible,到主機走 HTTP,主機又把所有 HTTP 請求導向 HTTPS:訪客要求 https,CDN 轉成 http 送給主機,主機又導回 https,如此反覆,永遠停不下來。反過來,CDN 設成 Full 或 Full (strict),主機卻把 HTTPS 導回 HTTP,也會造成同樣的迴圈。這兩種情境,Cloudflare 的疑難排解文件都有說明。

CDN 設成 Flexible、主機又把 HTTP 導向 HTTPS 時,請求會在兩者之間反覆轉址,出現 ERR_TOO_MANY_REDIRECTS
CDN 與主機兩處同時強制轉址,就會互相抵銷成迴圈;只留一處負責強制 HTTPS,並讓 CDN 到主機也走加密連線(資料來源:Cloudflare)。

解法的原則是只留一處負責強制 HTTPS,並讓 CDN 到主機那一段也改走加密連線(Full 以上,主機需裝有憑證)。排查時,先數一數有幾處在轉:CDN 的強制 HTTPS 設定、伺服器設定檔、WordPress 後台的網址欄位、轉址外掛,一次只留一處。MDN 也提醒,HTTP 轉址與 HTML 的 meta 轉址並存時,只改了其中一邊,同樣可能造成無限迴圈。

HTTPS 是現在網站的基本配備,但它保護的是連線,不是網站本身。訪客在網址列看到的安全標示或警告,只是整件事最外面的一層。真正要做的,是讓網站從憑證、轉址、站內網址到搜尋引擎的設定,都停在 https 這一邊,並且在憑證到期前自動續簽。

現在就可以做一件小事:用無痕視窗輸入網站的 http:// 網址,看它是否一次就跳到最終的 https 網址,而且頁面上沒有任何警告,這個結果比任何設定畫面都誠實。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

HTTPS 跟 HTTP 有什麼不同?

HTTPS 是在 HTTP 外面多包一層 TLS 加密的版本,S 代表 Secure。網站內容、網址結構與後台都不變,改變的是瀏覽器與伺服器之間的傳輸,從攔到就看得懂的明文,改成具備加密、身分驗證與完整性檢查的連線。

SSL、TLS 跟 HTTPS 是什麼關係?

HTTPS 就是 HTTP 套上 TLS 加密的結果,而 TLS 是 SSL 的後繼協定,現行版本是 TLS 1.3,TLS 1.0 與 1.1 已不應再使用。市面上仍習慣說「SSL 憑證」,指的就是 HTTPS 所用的憑證。

沒有表單的純展示官網也需要 HTTPS 嗎?

純展示官網同樣需要 HTTPS。HTTPS 除了加密,還提供完整性檢查,讓傳輸中的頁面無法被悄悄改寫;在 HTTP 下,途中設備可以塞進廣告、替換連結或改掉腳本,訪客只會以為是網站本身出了問題。

網址列有鎖頭代表 HTTPS 網站一定可信嗎?

HTTPS 的鎖頭不代表網站可信,只表示連線有加密、網域對得上。DV 憑證不提供網站內容或經營者身分的資訊,幾乎所有釣魚網站也都使用 HTTPS,Chrome 自 117 版起已把鎖頭換成中性的設定圖示。

Chrome 對沒有 HTTPS 的網站會怎麼警告?

Chrome 自 2018 年的 Chrome 68 起,把 HTTP 網頁標成「不安全」;2026 年 9 月進入穩定版的 Chrome 154 預設先嘗試 HTTPS,連不上時,會在第一次進入該公開網站前先跳出警告。

換成 HTTPS 能讓 Google 排名大幅提升嗎?

換成 HTTPS 不會讓排名大幅提升。Google 在 2014 年把 HTTPS 納入排名訊號時就說明,這只是非常輕量的訊號,影響全球不到 1% 的查詢。換 HTTPS 的主因是保護訪客、維持信任,SEO 是附帶的好處。

網站換成 HTTPS 要用哪一種轉址?

網站換成 HTTPS 建議用伺服器端的 301 永久轉址,把每個 http 網址直接導向同路徑的最終 https 網址;需要保留表單資料等請求內容時可改用 308。轉址要一次到位,避免 http、https、www 串成連鎖轉址。

HTTPS 頁面出現混合內容該怎麼處理?

HTTPS 頁面的混合內容,來自寫死的 http 圖片、腳本或字型。站內資源改成相對網址或 https 網址,外部資源沒有安全版本就換掉或移除;一時改不了程式碼,可用 upgrade-insecure-requests 讓瀏覽器自動升級。

WordPress 一鍵切換 HTTPS 會改寫資料庫嗎?

WordPress 5.7 起內建的 HTTPS 一鍵切換不會改寫資料庫,只把兩個網址欄位改成 https,並在輸出頁面時即時替換站內的 http 網址。伺服器轉址、外部資源與外掛寫死的網址都要另外處理。

換成 HTTPS 後出現轉址迴圈是什麼原因?

HTTPS 轉址迴圈多半是兩個地方同時在轉址,最典型的是 CDN 設成 Flexible、到主機走 HTTP,主機又把 HTTP 導回 HTTPS,如此反覆。解法是只留一處負責強制 HTTPS,並讓 CDN 到主機那一段也改走加密連線。

資料來源
  1. Transport Layer Security (TLS) — MDN
  2. Strict-Transport-Security header — MDN
  3. Redirections in HTTP — MDN
  4. What is mixed content? — web.dev
  5. Fixing mixed content — web.dev
  6. A secure web is here to stay(2018) — Chromium
  7. An update on the lock icon(2023) — Chromium
  8. HTTPS by default(2025) — Google
  9. Chrome 154 Release notes — Chrome for Developers
  10. The CA's Role in Fighting Phishing and Malware — Let's Encrypt
  11. Getting Started — Let's Encrypt
  12. FAQ — Let's Encrypt
  13. Decreasing Certificate Lifetimes to 45 Days(2025) — Let's Encrypt
  14. Ballot SC081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods — CA/Browser Forum
  15. HTTPS as a ranking signal(2014) — Google
  16. 瞭解 Google 搜尋結果中的網頁體驗 — Google
  17. How to Specify a Canonical with rel="canonical" and Other Methods — Google
  18. How to move a site — Google
  19. Add a website or platform property to Search Console — Google
  20. HSTS Preload List Submission — hstspreload.org
  21. Improved HTTPS detection and migration in WordPress 5.7 — WordPress
  22. Encryption modes — Cloudflare
  23. ERR_TOO_MANY_REDIRECTS — Cloudflare
  24. Upcoming Let's Encrypt Profile Changes On May 13, 20th, and 27th — Let's Encrypt