https協議的工作原理及其實現過程
HTTPS的實現過程
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer:是一種加密的http協議,但是他和http是兩個不同的協議。它基於tcp協議,工作在443埠上。
https的工作原理,大概是這樣子的:
在實現這個過程中,需要建立CA,然後apache伺服器生成證書請求,CA在為我們的apache伺服器簽署證書請求並頒發證書,接著CA將自己的自簽證書傳送給客戶端,這樣客戶端就可以使用這個自簽證書來驗證伺服器端的證書的合法性了。
說明:CA頒發機構和apache伺服器可以在同一臺主機上面建立,這裡我是將他們在兩臺主機上面建立的。CA所在的主機為192.168.0.104,apache所在的主機為192.168.0.103。
192.168.0.104主機上的配置(即CA主機)
1、建立私鑰CA(這個是在單獨的一臺機器建立的,我將CA和apache伺服器分開了)
(1)、生成一對金鑰
生成私鑰
#(umask 770;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
(2)、生成自簽證書
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem-days 3655
當然這樣建立完成之後,還要建立一些目錄和檔案,certscrl,newcerts,index.txt,serial這些檔案都位於/etc/pki/CA目錄下的,因此為了防止出錯,建議修改/etc/pki/tls/openssl.cnf中的引數,將CA的路徑修改為如下配置
dir = /etc/pki/CA
#mkdir crl certs newcrts -pv
# touch index.txt serial
# echo 01 > serial
這樣一個自簽證書就建立完成了。
192.168.0.103主機上的配置(即apache主機)
2、建立完成之後,就可以為客戶端頒發證書了(這裡apache主機相當於CA的客戶端)
(1)、在客戶端上面生成一對金鑰(建立私鑰)
# (umask 077;openssl genrsa -out /etc/pki/CA/private/httpd.key 1024)
(2)、生成證書頒發請求
# openssl req -new -key /etc/pki/CA/private/httpd.key -out /etc/pki/CA/httpd.csr
注意:在這個建立過程中將會出現一個互動資訊介面,這個介面的內容要和在建立自簽證書的內容一致。並且在填寫主機名時,一定要填寫的是httpd伺服器的主機名,否則會出錯。
如:建立過程中會出現如下型別資訊
Common Name (eg, your name or your server's hostname) []:www.xsl.com
這裡www.xsl.com就是我們httpd伺服器的主機名
(3)、將客戶端生產的證書請求發給CA來簽署
使用如下命令將證書請求發給CA主機(即192.168.0.104主機)
# scp /etc/pki/CA/httpd.csr 192.168.0.104:/tmp/
3、CA簽署這個客戶端證書請求,並頒發證書(CA主機上的配置)
# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
將生成的證書在發給客戶端(Apache伺服器)
使用如下命令將生成的證書發給客戶端:
# scp /tmp/httd.crt 192.168.0.103:/etc/httpd/ssl/
證書請求籤署完成之後,CA主機上/etc/pki/CA目錄下的index.txt和serial、newcerts檔案都會發生改變。
4、在apache主機上安裝mod_ssl軟體
雖然在apache伺服器上生成了一個證書,但是想要支援https功能,必須要安裝一個模組為mod_ssl。安裝完成之後,就會生成一個/etc/httpd/conf.d/ssl.conf的檔案,這個檔案將會是httpd的主配置檔案的一部分。在這個檔案我們需要修改幾個引數:
<VirtualHost 192.168.0.103:443> #這個就是我們要訪問的虛擬主機中的主機名所對應的ip地址
servername www.xsl.com#指定主機名
DocumentRoot '/www/xsl/com #指定站點根目錄,這個要和apache上的DocumentRoot保持一致
SSLEngine on#這個表示開啟ssl功能
SSLCertificateFile /etc/httpd/ssl/httpd.crt #指定證書路徑
SSLCertificateKeyFile /etc/pki/CA/private/httpd.key #指定私鑰檔案路徑
</VirtualHost>
在這裡補充說一點,由於ssl會話是根據ip來進行的,而不是根據主機名來進行的,因此,對於有多個基於主機名的虛擬主機來說,他們其中只有一個基於主機名的虛擬主機才可以使用https功能。
5、將CA自簽證書匯入window瀏覽器中,驗證伺服器端證書的合法性
最後將CA生成的自簽證書匯入到window的瀏覽器中即可(需要將CA自簽證書的字尾改為.crt格式再匯入),這樣就可以使用https來訪問頁面了。
轉載於:https://blog.51cto.com/xslwahaha/1552103