web服務進階 自建CA/https詳解
一、SSL與https
1、引言
我們網上購物、網上訂票,以及使用支付寶支付過程中都會在網上直接輸入賬號和密碼。這些信息都是非常重要的,如何才能在輸入的過程中,不被別人看見和竊取,就需要對你輸入的信息進行加密處理。
早期的兩主機通信之間是沒有加解密程序,后來就在傳輸層與應用層之間加了一個SSL庫,完成加密解密功能。
2、身份認證是怎么實現的?
A主機給B主機發了一個很重要的文件,B主機是怎么知道這個文件是A發的呢,萬一是不法分子小C的陰謀,那我該不該相信這個信息呢?所以采用下面一種策略
首先發送方用自己的私鑰加密數據特征碼,接收方用對方的公鑰去解密,如果接的開,就說明是對方發送的,密鑰是成對出現的,私鑰只有發送方自己有。其中發送方用自己的私鑰加密數據的結果就叫數據簽名。就相當于蓋個章,這個東西是我的了。
3、加密過程:A發送給B信息
(1)A生成一組數據,為了保證數據安全保密的送給B,A先用單向加密算法計算出這段數據的特征碼
(2)A會用自己的私鑰加密這段特征碼并將結果覆加在數據后面。
(3)A生成了一個臨時的對稱密鑰,并使用這個對稱密鑰加密這整段數據。
(4)S會獲取到B的公鑰,并使用對方的公鑰加密剛才那個對稱密鑰并覆加到整個后面,然后發送到B進行解密。
4、解密過程:B來解密
(1)B拿到報文以后,先用自己的私鑰去解密這段加密的對稱私鑰
(2)用對稱密鑰解密整段加密的內容
(3)用A的公鑰去解密特征碼,能解密,A的身份得到驗證
(4)在用同樣的加密對稱算法,去計算這段數據的特征碼并與解密出來的進行比較,如果相同,數據完整性得到驗證。
5、這中間缺一個環節,就是CA,幫助通信雙方確認對方身份是否真偽。雙方通信時要商量好:
(1)把CA頒發的公鑰證書給我
(2)商議好用哪種方式加密
(3)B拿到A的公鑰后要驗證
6、ssl與http的關系
http本身不具備加密解密功能,所以通過ssl進行加密。使用ssl的http通信叫做https通信。
二、實例演示
1、自建CA(A主機:ip為192.168.1.118)
(1)生成私鑰文件 mkdir -p /etc/pki/CA/private #創建私鑰保存的目錄
(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
ll /etc/pki/CA/private/ # 私鑰只能自己保存,對保密性要求高
(2)生成自簽證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 7300
(3)為CA提供所需的目錄和文件
touch /etc/pki/CA/index.txt # 創建數據庫文件
echo 01 > /etc/pki/CA/serial # 創建序列號文件并給明第一個證書的序列號碼
ll /etc/pki/CA
至此,私有CA創建完畢。
2、證書申請:(在B主機上:ip:192.168.1.109)
(1)在證書申請的主機上生成私鑰
cd /etc/httpd/
mkdir ssl #創建保存私鑰的目錄
cd ssl
(umask 077;openssl genrsa -out httpd.key 2048) #生成私鑰
ll
(2)生成證書簽署請求
openssl req -new -key httpd.key -out httpd.csr -days 365 # 在本地生成
(3)把請求發送給CA
scp httpd.csr root@192.168.1.118:/etc/pki/CA # 192.168.1.118為CA主機
(4)CA簽發證書(在CA192.168.1.118主機上操作),cd到 /tmp下
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
cat /etc/pki/CA/index.txt #查看第一個簽發的證書
(5)把簽署好的證書發還給請求者
cd /etc/pki/CA
scp certs/httpd.crt root@192.168.1.109:/etc/httpd/ssl/
在請求主機上查看,證書已經頒發好了
3、配置httpd支持使用ssl,及使用的證書;
(1) yum install -y mod_ssl
(2)修改配置文件: vim /etc/httpd/conf.d/ssl.conf
<VirtualHost 192.168.1.109:443> ServerName www.a.com DocumentRoot /www/a.com/htdocs SSLengine ON SSLprotocol ALL -sslv2 -sslv3 SSLcertificatefile /etc/httpd/ssl/httpd.crt SSLcertificatekeyfile /etc/httpd/ssl/httpd.key </VirtualHost>
(3)配置虛擬主機vim /etc/httpd/conf.d/virt.conf
<VirtualHost 192.168.1.109:80> ServerName www.a.com DocumentRoot /www/a.com/htdocs <Directory "/www/a.com/htdocs"> Options None AllowOverride None Require all granted </Directory>
檢查
測試如下:
ok了,還要把CA證書下載到windows導入瀏覽器。就可以了。
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/63170
博客完成的非常好,有圖有真現,有實驗結果。加油!