Web 服務詳解:HTTP 與 HTTPS 配置
一、HTTP 服務概述
HTTP(Hypertext Transfer Protocol,超文本傳輸協議)是用于在網絡上傳輸網頁數據的基礎協議,默認使用80 端口,以明文形式傳輸數據。常見的 HTTP 服務軟件包括:
- httpd(Apache):最流行的開源 Web 服務器,功能豐富,配置靈活。
- Nginx:輕量級高性能 Web 服務器,擅長處理高并發請求。
- Tomcat:支持 Java Servlet 和 JSP 的應用服務器,常用于部署 Java Web 應用。
本文重點講解httpd(Apache) 的配置與使用。
二、httpd(Apache)核心配置
1. 關鍵文件與目錄
路徑 / 文件 | 作用描述 |
/etc/httpd/conf/httpd.conf | httpd 主配置文件,包含全局參數(端口、日志等)。 |
/var/www/html/ | 默認網頁存放目錄,訪問服務器 IP 時默認加載此目錄下的index.html。 |
/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf | 虛擬主機配置模板文件。 |
/etc/httpd/conf.d/ | 虛擬主機配置文件存放目錄(httpd 會自動加載此目錄下的.conf文件)。 |
2. 虛擬主機配置
虛擬主機(Virtual Host)允許在一臺服務器上通過不同的標識(IP、端口、域名)提供多個網站服務,常見配置方式有三種。
前提條件
- 已安裝 httpd 服務:yum -y install httpd
- 啟動服務并關閉防火墻 / SELinux:
systemctl start httpd
systemctl enable httpdsystemctl stop firewalld
systemctl disable firewalldsetenforce 0
- 準備測試網頁目錄及文件:
# 創建兩個測試目錄mkdir -p /var/www/one /var/www/html# 寫入測試內容echo "abcd" > /var/www/one/index.htmlecho "Welcome to luoqi" > /var/www/html/index.html
方式 1:相同 IP,不同端口
通過不同端口區分不同網站(如 80 端口和 8080 端口)。
- 復制虛擬主機模板文件:
cp -p /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/
- 編輯虛擬主機配置文件:
vim /etc/httpd/conf.d/httpd-vhosts.conf
- 添加以下配置:
# 80端口對應/var/www/one目錄<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/one" # 網頁目錄</VirtualHost># 監聽8080端口Listen 8080# 8080端口對應/var/www/html目錄<VirtualHost 192.168.100.10:8080>DocumentRoot "/var/www/html"</VirtualHost>
- 重啟服務生效:
systemctl restart httpd
- 驗證:
- 訪問 http://192.168.100.10 → 顯示 /var/www/one 內容
-
- 訪問 http://192.168.100.10:8080 → 顯示 /var/www/html 內容
方式 2:不同 IP,相同端口
服務器綁定多個 IP,通過不同 IP 區分網站(均使用 80 端口)。
- 為服務器添加第二個 IP(以ens33網卡為例):
vim /etc/sysconfig/network-scripts/ifcfg-ens33
添加以下內容:
IPADDR1=192.168.100.50 # 第二個IPPREFIX1=24
- 重啟網絡服務:
systemctl restart network
- 編輯虛擬主機配置文件:
vim /etc/httpd/conf.d/httpd-vhosts.conf
- 添加以下配置:
# IP 192.168.100.10 對應/var/www/one目錄<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/one"</VirtualHost># IP 192.168.100.50 對應/var/www/html目錄<VirtualHost 192.168.100.50:80>DocumentRoot "/var/www/html"</VirtualHost>
- 重啟服務并驗證:
訪問 http://192.168.100.10 → 顯示 /var/www/one 內容
訪問 http://192.168.100.50 → 顯示 /var/www/html 內容
方式 3:相同 IP、端口,不同 FQDN(域名)
通過不同域名(如one.example.com和html.example.com)區分網站,需配合 DNS 服務解析域名到同一 IP。
- 配置 DNS 正向解析(參考 DNS 服務配置):
在 DNS 服務器的example.com區域文件中添加:
one IN A 192.168.100.10 # one.example.com 解析到服務器IPhtml IN A 192.168.100.10 # html.example.com 解析到服務器IP
重啟 DNS 服務:systemctl restart named
- 編輯虛擬主機配置文件:
vim /etc/httpd/conf.d/httpd-vhosts.conf
- 添加以下配置:
# 域名 one.example.com 對應/var/www/one目錄<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/one"ServerName one.example.com # 綁定域名</VirtualHost># 域名 html.example.com 對應/var/www/html目錄<VirtualHost 192.168.100.10:80>DocumentRoot "/var/www/html"ServerName html.example.com # 綁定域名</VirtualHost>
- 重啟服務并驗證:
訪問 http://one.example.com → 顯示 /var/www/one 內容
訪問 http://html.example.com → 顯示 /var/www/html 內容
三、HTTPS 服務概述
HTTPS(HTTP Secure)是 HTTP 的加密版本,通過SSL/TLS 協議對傳輸數據加密,默認使用443 端口,確保數據傳輸的安全性(防止竊聽、篡改)。
核心特點
- 加密機制:HTTPS = HTTP + SSL/TLS,通過證書實現身份驗證和數據加密。
- 端口:默認 443 端口(需在防火墻開放)。
- 證書:需通過 CA(證書頒發機構)簽署的證書驗證服務器身份,避免 “中間人攻擊”。
四、HTTPS 加密原理(SSL/TLS 握手流程)
- ClientHello:客戶端向服務器發送支持的 SSL/TLS 版本、加密算法列表,及隨機數random_c。
- ServerHello:服務器確認使用的版本和算法,返回隨機數random_s、服務器證書(含公鑰)。
- ClientKeyExchange:客戶端驗證證書有效性后,生成預主密鑰pre_master,用服務器公鑰加密后發送。
- 會話密鑰生成:服務器用私鑰解密pre_master,雙方基于random_c + random_s + pre_master生成會話密鑰,后續通信使用該密鑰加密。
五、HTTPS 配置(基于 httpd 與自建 CA)
1. 環境準備
- CA 服務器:IP 192.168.100.10,負責生成根證書和簽署服務端證書。
- Web 服務器:IP 192.168.100.20,部署 httpd 并配置 HTTPS。
- DNS 服務器:已配置域名解析(如ca.example.com指向 CA 服務器,sl1.example.com指向 Web 服務器)。
2. 自建 CA(證書頒發機構)
(1)openssl 配置文件關鍵參數?
openssl 的主配置文件為/etc/pki/tls/openssl.cnf,其中與 CA 相關的重要參數如下:?
?
####################################################################?[ CA_default ]??dir = /etc/pki/CA # 所有CA相關文件的存放根目錄?certs = $dir/certs # 證書所在目錄?database = $dir/index.txt # 證書數據庫文件目錄?new_certs_dir = $dir/newcerts # 新生成證書的存放目錄??certificate = $dir/cacert.pem # CA自簽名證書(根證書)?serial = $dir/serial # 證書序列號文件?private_key = $dir/private/cakey.pem# CA私鑰文件路徑??
步驟 1:配置 CA 目錄與文件
CA 相關文件默認存放在/etc/pki/CA/,需創建必要文件(參考/etc/pki/tls/openssl.cnf配置):
# 進入CA目錄cd /etc/pki/CA/# 創建私鑰(權限需嚴格限制,僅root可讀寫)(umask 077; openssl genrsa -out private/cakey.pem)# 生成自簽名根證書(CA證書)openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365# 按提示輸入信息
(國家:CN,
省份:HB,
城市:WH,
組織:LQ,
主機名:ca.example.com等)# 創建證書數據庫和序列號文件touch index.txt # 證書索引數據庫echo 01 > serial # 證書序列號(初始為01)
(2)openssl 關鍵命令選項說明?
- -x509:生成自簽名證書格式,專用于創建私有 CA。?
- -new:生成新證書的簽署請求。?
- -key:指定生成請求時用到的私鑰文件路徑。?
- -out:指定生成后的文件存放路徑,如果是自簽名操作,將直接生成簽署過的證書。?
- -days:指定證書有效期,默認是 365 天。
3. Web 服務器配置 HTTPS
步驟 1:生成服務端私鑰與證書請求
# 在Web服務器上安裝httpd和SSL模塊yum -y install httpd mod_ssl# 創建存放證書的目錄mkdir /etc/httpd/ssl# 生成服務端私鑰(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key)# 生成證書請求文件(CSR)openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365# 輸入信息需與CA一致,主機名填Web服務器域名(如sl1.example.com)
步驟 2:向 CA 提交證書請求并獲取簽名證書
# 將CSR文件發送到CA服務器scp /etc/httpd/ssl/httpd.csr root@ca.example.com:/etc/pki/CA/# 在CA服務器上簽署證書cd /etc/pki/CA/openssl ca -in httpd.csr -out httpd.crt -days 365# 提示時輸入"y"確認簽署# 將簽署好的證書發送回Web服務器scp httpd.crt root@192.168.100.20:/etc/httpd/ssl/
步驟 3:配置 httpd 支持 HTTPS
- 編輯 SSL 配置文件:
vim /etc/httpd/conf.d/ssl.conf
修改證書和私鑰路徑:
SSLCertificateFile /etc/httpd/ssl/httpd.crt # 服務端證書SSLCertificateKeyFile /etc/httpd/ssl/httpd.key # 服務端私鑰
- 配置 HTTPS 虛擬主機(綁定 443 端口):
vim /etc/httpd/conf.d/httpd-vhosts.conf
添加以下內容:
<VirtualHost 192.168.100.20:443>DocumentRoot "/var/www/test" # HTTPS網頁目錄ServerName sl1.example.com # 綁定域名SSLEngine on # 啟用SSLSSLCertificateFile /etc/httpd/ssl/httpd.crtSSLCertificateKeyFile /etc/httpd/ssl/httpd.key</VirtualHost>
- 創建測試網頁:
mkdir /var/www/testecho "HTTPS Test Page" > /var/www/test/index.html
- 重啟 httpd 服務:
systemctl restart httpd
4. 客戶端驗證 HTTPS
- 在客戶端導入 CA 根證書(信任自建 CA):
# 從CA服務器下載根證書scp root@192.168.100.10:/etc/pki/CA/cacert.pem /tmp/
(Windows/Linux 客戶端需在瀏覽器中導入該證書,信任 CA)
- 訪問 HTTPS 網站:
瀏覽器輸入 https://sl1.example.com,確認連接加密(顯示鎖圖標),頁面顯示 /var/www/test 內容。
六、總結
- HTTP 服務:通過 httpd 的虛擬主機功能,可基于 IP、端口、域名部署多個網站,核心是配置DocumentRoot和綁定標識。
- HTTPS 服務:在 HTTP 基礎上添加 SSL/TLS 加密,需通過 CA 簽署證書實現身份驗證,配置重點是證書路徑和 SSL 引擎啟用。
實際生產環境中,建議使用可信 CA(如 Let's Encrypt)頒發的證書,并合理配置防火墻和 SELinux 規則,保障服務安全。