Skip to content

Nuface Blog

隨意隨手記 Casual Notes

Menu
  • Home
  • About
  • Services
  • Blog
  • Contact
  • Privacy Policy
  • Login
Menu

Apache 反向代理 HTTPS:後端使用自建憑證時,該如何正確設定信任?

Posted on 2026-01-122026-01-12 by Rico

在企業內部環境中,我們常會遇到這樣的架構需求:

  • 對外由 Apache 提供 HTTPS 服務
  • Apache 作為 Reverse Proxy
  • 後端(Upstream)也是 HTTPS
  • 但後端使用的是 自建 CA 或自簽憑證

這時就會產生一個很關鍵的問題:

👉 Apache 連線到後端 HTTPS 時,是否會信任該自建憑證?需要額外設定嗎?

答案是:需要,而且設定方式會直接影響整體安全性。


一、先理解一個關鍵觀念

在這個架構中:

  • Browser ⇨ Apache
    • Apache 是 HTTPS Server
  • Apache ⇨ Backend HTTPS
    • Apache 變成 HTTPS Client

也就是說:

Apache 本身必須「驗證後端 HTTPS 憑證」

而 Apache 預設 只信任系統 CA(像 Let’s Encrypt、GlobalSign)
👉 不會信任你公司自建的 CA


二、整體架構示意

proxyarchitecture

Browser
│ HTTPS (Public Cert)
▼
Apache Reverse Proxy
│ HTTPS (Internal / Self-signed Cert)
▼
Backend Service

三、推薦做法(✅ 正確且安全):把自建 CA 加入 Apache 信任鏈

1️⃣ 啟用 HTTPS Proxy 功能

SSLProxyEngine On

這是基本條件,沒有它 Apache 不會用 SSL 方式連後端。


2️⃣ 啟用「完整憑證驗證」(強烈建議)

SSLProxyVerify require
SSLProxyCheckPeerName on
SSLProxyCheckPeerExpire on

這代表 Apache 會驗證:

  • 憑證是否由可信 CA 簽發
  • 憑證是否過期
  • 憑證 CN / SAN 是否符合連線的 hostname

3️⃣ 指定「你們公司的 CA 憑證」

假設你們有一個自建 CA,檔案為:

/etc/apache2/ssl/mycorp-root-ca.pem

設定:

SSLProxyCACertificateFile /etc/apache2/ssl/mycorp-root-ca.pem

📌 重點

  • 放的是 CA 憑證(不是後端 server cert)
  • 如果有中繼 CA,要把完整 chain 放進同一個 PEM

4️⃣ 設定反向代理到 HTTPS 後端

ProxyPreserveHost On

ProxyPass        /  https://backend.internal/
ProxyPassReverse /  https://backend.internal/

✔ backend.internal 必須:

  • 與後端憑證 SAN / CN 一致
  • 不要用 IP(否則會影響 SNI)

四、SNI 是最常踩雷的地方

如果後端:

  • 同一個 IP
  • 多個 HTTPS Virtual Host

那 SNI(Server Name Indication)一定要正常運作

檢查重點

  • ProxyPass 用 hostname
  • 不要用 https://10.x.x.x/
  • Apache 2.4 + OpenSSL 通常會自動送 SNI

檢查後端實際回傳的憑證

openssl s_client \
  -connect backend.internal:443 \
  -servername backend.internal \
  -showcerts

如果你看到回來的是「預設憑證」,那 99% 是 SNI 沒送對。


五、不建議但常見的「偷懶作法」(❌)

直接關掉後端憑證驗證:

SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

這代表什麼?

  • Apache 不管連到誰都算對
  • 任何中間人、DNS 污染、錯誤導向都無法察覺

⚠️ 只適合

  • 暫時測試
  • 極封閉實驗環境
  • 絕對不建議用在正式環境

六、常見錯誤與對應原因

❌ unable to get local issuer certificate

➡ Apache 不信任該 CA
✔ 解法:補 SSLProxyCACertificateFile


❌ Hostname verification failed

➡ ProxyPass 使用的 hostname 與憑證 SAN 不符
✔ 解法:修正 DNS / 憑證 / ProxyPass URL


❌ 回到錯誤的 VirtualHost

➡ SNI 沒送對
✔ 解法:避免用 IP,確認 hostname


七、實務建議總結

環境建議作法
企業內網、自建 CA✅ 加入 CA,完整驗證
正式環境✅ 嚴格驗證
暫時測試⚠️ 可暫時關驗證
長期維運❌ 不建議關驗證

八、結語

Apache 做 HTTPS 反向代理時,它不是單純轉發流量,而是一個真正的 HTTPS Client。
只要後端使用自建憑證,就必須 正確建立信任鏈,否則不是連不上,就是留下安全風險。

這個設定一旦做好:

  • 架構清楚
  • 安全性完整
  • 後續擴充(多後端、多站台)也會非常順

Recent Posts

  • Token/s and Concurrency:
  • Token/s 與並發:企業導入大型語言模型時,最容易被誤解的兩個指標
  • Running OpenCode AI using Docker
  • 使用 Docker 實際運行 OpenCode AI
  • Security Risks and Governance Models for AI Coding Tools

Recent Comments

  1. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on High Availability Architecture, Failover, GeoDNS, Monitoring, and Email Abuse Automation (SOAR)
  2. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on MariaDB + PostfixAdmin: The Core of Virtual Domain & Mailbox Management
  3. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Daily Operations, Monitoring, and Performance Tuning for an Enterprise Mail System
  4. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Final Chapter: Complete Troubleshooting Guide & Frequently Asked Questions (FAQ)
  5. Building a Complete Enterprise-Grade Mail System (Overview) - Nuface Blog on Network Architecture, DNS Configuration, TLS Design, and Postfix/Dovecot SNI Explained

Archives

  • January 2026
  • December 2025
  • November 2025
  • October 2025

Categories

  • AI
  • Apache
  • CUDA
  • Cybersecurity
  • Database
  • DNS
  • Docker
  • Fail2Ban
  • FileSystem
  • Firewall
  • Linux
  • LLM
  • Mail
  • N8N
  • OpenLdap
  • OPNsense
  • PHP
  • Python
  • QoS
  • Samba
  • Switch
  • Virtualization
  • VPN
  • WordPress
© 2026 Nuface Blog | Powered by Superbs Personal Blog theme