用 PowerShell 檢查網站 HTTPS 憑證、重新導向與 WordPress 網址設定

網站突然出現憑證警告、瀏覽器在 httphttps 之間來回跳轉,或首頁可以開啟、登入後台卻被帶到錯誤網域,通常要先分清楚是 TLS 憑證、Web 伺服器重新導向,還是 WordPress 網址設定不一致。以下指令可直接在 Windows PowerShell 執行,適合公司資訊人員與 WordPress 維護人員做第一輪檢查。

一、先檢查 HTTP 狀態碼與 Location

先把網域換成實際網址。PowerShell 7 可使用 -SkipHttpErrorCheck,即使回傳 404 或 500 也會保留回應物件:

$u = "https://www.example.com/"
$r = Invoke-WebRequest -Uri $u -Method Head -MaximumRedirection 0 -SkipHttpErrorCheck
$r.StatusCode
$r.Headers["Location"]

預期 HTTPS 首頁可能回傳 200,且沒有 Location;若檢查 HTTP,正常的強制 HTTPS 通常是 301308,Location 應該是同一網域的 https:// 網址。想看完整跳轉鏈,可使用 Windows 內建的 curl:

curl.exe -sSIL --max-redirs 10 http://www.example.com/

逐行查看 HTTP/1.1HTTP/2Location 與最後的 200。若 http 指向 https、https 又指回 http,或 www 與非 www 互相切換,就是重新導向迴圈。也要測試登入頁與後台,不要只測首頁:

curl.exe -sSIL --max-redirs 10 https://www.example.com/wp-login.php
curl.exe -sSIL --max-redirs 10 https://www.example.com/wp-admin/

二、從 TLS 連線讀取憑證到期日

瀏覽器顯示憑證過期、主機名稱不符或憑證鏈不受信任時,可用下列 PowerShell 讀取伺服器實際送出的憑證。這段程式只建立 TLS 連線,不會修改網站:

$hostName = "www.example.com"
$tcp = [Net.Sockets.TcpClient]::new($hostName, 443)
$ssl = [Net.Security.SslStream]::new($tcp.GetStream(), $false, { $true })
$ssl.AuthenticateAsClient($hostName)
$cert = [Security.Cryptography.X509Certificates.X509Certificate2]::new($ssl.RemoteCertificate)
$cert | Select-Object Subject, Issuer, NotBefore, NotAfter, Thumbprint
$ssl.Dispose(); $tcp.Dispose()

NotAfter 是到期時間,Subject 或 SAN 必須涵蓋使用者輸入的網域。若憑證尚未到期但瀏覽器仍警告,可能是中繼憑證未完整安裝、伺服器送出錯誤憑證,或公司代理伺服器攔截 TLS。上述範例的驗證回呼固定回傳 true,只適合讀取憑證資料,不代表憑證可信;正式安全驗證仍應以瀏覽器與受信任用戶端結果為準。

三、檢查 WordPress 的 siteurl 與 home

WordPress 會用 siteurl 表示核心程式網址,用 home 表示訪客看到的網站網址。兩者常見錯誤包括仍是 http、殘留測試網域、www 不一致,或其中一個被設成錯誤主機。若網站允許管理員讀取設定,可使用應用程式密碼呼叫 REST API:

$base = "https://www.example.com"
$user = "admin"
$appPassword = "請貼上應用程式密碼"
$raw = "$user`:$appPassword"
$token = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($raw))
$h = @{ Authorization = "Basic $token" }
Invoke-RestMethod -Uri "$base/wp-json/wp/v2/settings" -Headers $h -Method Get |
  Select-Object title, url, home

預期 urlhome 都使用正式 HTTPS 網域;某些 WordPress 版本或權限設定可能只顯示 urlhome,也可能回傳 401 或 403。這不一定是網址錯誤,可能只是帳號沒有讀取設定的權限。無法使用 API 時,請在主機的 phpMyAdmin 以唯讀查詢確認,資料表前綴不一定是 wp_

SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl', 'home');

四、常見誤判與安全限制

  • 看到 301 不代表故障;要確認 Location 是否只跳一次並抵達正確 HTTPS 網址。
  • HEAD 被主機或 CDN 拒絕時,不代表 GET 也失敗,可改用 -Method Get,但不要大量請求正式站。
  • CDN、WAF、負載平衡器與來源主機可能各自有一層重新導向;應從外部使用者實際看到的網域檢查。
  • 後台網址錯誤時,不要直接把資料庫所有網址批次取代,也不要在沒有備份與維護時段下修改選項。
  • 應用程式密碼不要寫入共用腳本、聊天紀錄或版本控制;檢查完成後可撤銷並重新建立。

五、修改後的回復與驗證

先記錄原本的 siteurlhome、憑證指紋與重新導向鏈,再由主機商或憑證管理工具修正憑證與 Web 伺服器設定。若修改網址選項後無法登入,應將兩個值恢復為同一個可正常使用的正式 HTTPS 網址;若設定檔中有 WP_HOMEWP_SITEURL,也要檢查它是否覆蓋資料庫。最後重新執行首頁、wp-login.phpwp-admin/ 的 curl 檢查,並用無痕視窗確認登入、登出與管理頁沒有再跳轉。若問題只出現在公司內部,另行比對 DNS、代理伺服器與外部網路結果。

延伸閱讀:本網站的 XAMPP localhost SSL 憑證設定,適合處理本機測試環境;正式網站則應以受信任的公開憑證與正確的反向代理設定為準。

參考來源

相連文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *