首先簡單介紹一下SSL會話的過程:
SSL會話的簡化過程:
(1) 客戶端發送可供選擇的加密方式,並向服務器請求證書
(2) 服務器端發送證書及選定的加密方式給客戶端
(3) 客戶端去得證書並進行證書驗證
如果信任給其發證書的CA:
(a) 驗證證書的來源合法性:用CA的公鑰解密證書上的數字簽名
(b) 驗證證書的內容合法性,完整性驗證
(c) 檢查證書的有效期限
(d) 檢查證書是否被吊銷
(e) 證書中擁有者的名字與訪問的目標主機要一致
(4) 客戶端生成臨時會話密鑰(對稱密鑰),並使用服務器端的公鑰加密此數據發送給服務器,完成密鑰交換
(5) 服務器用此密鑰加密用戶請求的資源,響應給客戶端
需要注意的是SSL會話是基於IP地址創建的,所以單IP的主機上,僅可以使用一個https虛擬主機,不過實驗環境可隨意添加IP地址(ip addr add x.x.x.x/xx dev DEVICE)據說Linux下也有一個開源工具可以基於主機名創建多不個不同的https虛擬主機,不過配置起來沒有那么容易。
配置http支持https的大致步驟如下:
(1) 為服務器申請數字證書
測試:通過私建CA發證書
(a) 創建私有CA
(b) 在服務器上創建證書簽署請求
(c) CA簽證
(2) 配置httpd支持使用ssl,及使用證書
~]# yum install -y mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
DocumentRoot
ServerName
SSLCertificateFile
SSLCertificateKetFile
(3) 測試基於https訪問相應的主機
~]# openssl s_clirnt [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
集體配置過程如下:
基本環境:
CA主機:
CentOS 6.9/192.168.119.135
提供http服務的主機:
CentOS 7.2/192.168.119.132
httpd-2.4.6(yum方式安裝的默認版本)
期間,兩個主機的防火牆都是關閉狀態,SELinux也是disabled
首先創建一個CA,服務器端(提供http的主機)發起證書請求,由CA給其簽證,得到證書后服務器即可配置實現https
在CA(CentOS 6.9/192.168.119.135)主機上創建CA
~]# cd /etc/pki/CA/
CA]# (umask 077;openssl genrsa -out private/key.pem 2048) #指明所創建的文件為當前目錄下的private目錄下名為key.pem,密鑰長度為2048
CA]# touch index.txt #創建一個index.txt的文件
CA# echo 01 > serial #指定之后生成證書的編號從01開始
為自己創建自簽證書
CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 730 #假設CA的有效期為2年,接下來的內容根據實際情況填即可,完畢,可查看當前目錄下是否生成cacert.pem文件
CA]# ll #可看到已然生成cacert.pem,CA主機的CA創建完成,到提供http(CentOS 7.2/192.168.119.132)服務的主機生發起CA證書簽署請求
切換到服務器(CentOS 7.2/192.168.119.132)上,發起CA證書簽署請求
切換到/etc/httpd/目錄,並創建ssl目錄,#目錄可以隨意創建#並再切換到ssl目錄下
~]# cd /etc/httpd/
httpd]# install -d ssl
httpd]# cd ssl
ssl]# (umask 077;openssl genrsa -out httpd.key 1024) #生成密鑰,指明放在當前目錄下,密鑰長度為1024
ssl]# openssl req -new -key httpd.key -out httpd.csr #生證書簽署請求文件,在此處也可使用-days 來指明時間,但證書可以使用時間最終由CA所決定,指不指都作用不大
需要注意的是,此時所填寫的信息需與之前CA服務器上的一致,Server's name 為http服務器的域名,否則瀏覽器整會提示不一致
將csr文件發送到CA服務器
ssl]# scp httpd.csr root@192.168.119.135:/tmp/ #以root身份上傳到CA服務器的/tmp目錄下
此時切換到CA(CentOS 6.9/192.168.119.135)服務器上簽署證書即可
CA]# openssl ca -in /tmp/httpd.csr -out certs/www.lushenle.com.crt -days 365 #證書有效期為一年
查看newcerts目錄下是否生成了證書,若01.pem文件存在標明已經生成了證書,此時,將正說傳給http服務器即可
CA]# scp certs/www.lushenle.com.crt root@192.168.119.132:/etc/httpd/ssl #
接下來接配置http服務器支持https服務
需要確認服務器是否支持ssl模塊
~]# httpd -M | grep ssl #若不支持,需安裝模塊
~]# yum install -y mod_ssl
切換到/etc/httpd/conf.d/目錄下,編輯ssl.conf文件,當然在編輯之前建議先備份一分
~]# cd /etc/httpd/conf.d/
conf.d]# cp ssl.conf{,.bak}
conf.d]# vim ssl.conf
DocumentRoot "/vhosts/lushenle/htdocs"
ServerName www.lushenle.com:443
<VirtualHost _default_:443> 改為:
<VirtualHost *:443> 或者 <VirtualHost 192.168.119.132:443>
SSLCertificateFile /etc/pki/tls/certs/localhost.crt 改為:
SSLCertificateFile /etc/httpd/ssl/www.lushenle.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 改為:
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
保存退出,開始測試