Linux中Https配置與私有CA部署指南
一、HTTPS 核心概念
特性 | HTTP | HTTPS |
---|---|---|
協議 | 明文傳輸 | HTTP + SSL/TLS |
端口 | 80 | 443 |
加密 | 未加密 | 數據加密 |
二、SSL/TLS 握手流程
- Client → Server
ClientHello
:支持哪些版本、支持哪些加密算法,隨機生成一組32字節數據random_c
- Server → Client
ServerHello
:確定版本、確定加密算法,隨機生成一組32字節數據random_s
ServerCertificate
:發送證書(含公鑰)
- Client → Server
ClientKeyExchange
:用公鑰加密預主密鑰pre_master
并發送
- Server 解密
- 服務端收到后,用私鑰解密
pre_master
- 服務端收到后,用私鑰解密
- 生成會話密鑰
- 最終密鑰 =
random_c
+random_s
+pre_master
- 最終密鑰 =
三、私有CA部署
注意:所有操作需確保 DNS 解析正確(如
ca.example.com
、web.example.com
等)。
1、CA 服務器配置
-
配置正向解析對應IP地址:
vim /var/named/yyh.comca IN A 192.168.100.10
-
為主機CA生成私鑰:
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem) # umask為權限減去的值 # openssl genrsa為生成私有密鑰
-
為主機CA生成自簽名證
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 # 生成自簽名根證書CN # 國家 HB # 省份 WH # 城市 LQ # 公司 linux # 單位 ca.example.com # 服務器主機名 root@example.com # 郵箱
-
為CA提供所需的目錄及文件:
touch /etc/pki/CA/index.txt # 創建目錄 echo 01 > /etc/pki/CA/serial # 創建并寫入文件
2、Web 服務器申請證書
-
驗證能否解析
ca.example.com
:nslookup ca.example.com # 對 ca.example.com 進行解析
-
為主機WEB生成私鑰:
mkdir /etc/httpd/ssl # 創建/etc/httpd/ssl目錄 (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key) # 存放在/etc/httpd/ssl目錄
-
為web.example.com站點生成簽署請求文件:
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 # 生成證書簽名請求CN # 國家 HB # 省份 WH # 城市 LQ # 公司 linux # 單位 web.example.com # 服務器主機名 root@example.com # 郵箱
-
將簽署請求文件發送給CA服務器:
scp -p /etc/httpd/ssl/httpd.csr root@ca.example.com:/etc/pki/CA/ # 遠程復制
3、CA 簽署證書
-
在主機CA上 對簽署請求進行數字簽名:
openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 # 指明所生成的Web證書的存放路徑為 /etc/pki/CA/certs/httpd.crt
-
將CA主機上已經數字簽名后的Web證書發給Web主機:
scp -p /etc/pki/CA/certs/httpd.crt root@web.example.com:/etc/httpd/ssl/ # 遠程復制
4、部署https站點
-
在主機WEB上安裝apche http擴展模塊mod_ssl:
yum -y install mod_ssl # yum 安裝 mod_ssl
-
修改 SSL 配置:
vim /etc/httpd/conf.d/ssl.conf # 編輯 ssl 配置文件SSLCertificateFile /etc/httpd/ssl/httpd.crt # 證書SSLCertificateKeyFile /etc/httpd/ssl/httpd.key # 私鑰
-
配置虛擬主機:
vim httpd-vhosts.conf # 編輯主配置文件<VirtualHost 192.168.100.20:443> # IP 地址和端口號DocumentRoot "/var/www/html" # 告訴配置文件位置在哪里ServerName web.eaxmple.com # 完整域名SSLEngine on # 啟用 SSL 引擎SSLCertificateFile /etc/httpd/ssl/httpd.crt # 證書位置SSLCertificateKeyFile /etc/httpd/ssl/httpd.key # 私玥位置</VirtualHost>systemctl restart httpd
5、客戶端信任私有 CA
-
在客戶端上去下載CA服務器上的根證書:
scp root@ca.example.com:/etc/pki/CA/cacert.pem /root # 遠程復制
-
在Web主機創建網頁:
echo 123456 > /var/www/html/index.html # 創建并寫入文件
-
在客戶端驗證:
curl -k https://web.example.com # 訪問網址
6、集成動態web
-
安裝httpd mod_wsgi:
yum -y install mod_wsgi # yum 安裝 mod_wsgi
-
上傳動態web內容:
-
配置虛擬主機:
mv python.txt test.py # 把 python.txt 更名為 test.pyvim /etc/httpd/conf.d/httpd-vhosts.conf # 編輯主配置文件<VirtualHost 192.168.100.20:80> # IP 地址和端口號DocumentRoot "/var/www/wsgi" # 告訴配置文件位置在哪里WSGIScriptAlias / "var/www/wsgi/test.py" # 別名ServerName lq.example.com # 完整域名</VirtualHost>systemctl restart httpd # 重啟服務
-
訪問驗證:
-
修改虛擬主機:
vim /etc/httpd/conf.d/httpd-vhosts.conf # 編輯主配置文件<VirtualHost 192.168.100.20:80> # IP 地址和端口號DocumentRoot "/var/www/wsgi" # 告訴配置文件位置在哪里ServerName lq.example.com # 完整域名</VirtualHost>systemctl restart httpd # 重啟服務
-
訪問驗證:
關鍵命令說明
命令選項 | 作用 |
---|---|
-x509 | 生成自簽名證書(用于創建 CA) |
-new | 生成證書簽名請求 (CSR) |
-key | 指定私鑰文件路徑 |
-out | 指定輸出文件路徑 |
-days | 設置證書有效期(默認 365 天) |