在Linux中實作https通路web站點
一、基礎知識:
web本意是蜘蛛網和網的意思。現廣泛譯作網絡、網際網路等技術領域。表現為三種形式,即超文本(hypertext)、超媒體(hypermedia)、超文本傳輸協定(HTTP)等。
1、WEB伺服器種類: news.netcrfat.com 最常用的調查網站;
1)、Apache
2)、Microsoft
3)、Nginx Linux;
4)、Google
2、apache支援MPM(多道處理子產品):
其出現的目的是讓apache server有着更強的實用性和能夠更好的與它所依賴的平台的特性進行互動并能夠實作快速響應使用者的一種機制;apache中的MPM有多種,其中最著名的有以下兩種:
1)、worker 每一個請求用一個線程響應;在一個程序中建立多個線程,用每一個線程去響應使用者的請求;
程序有多個執行流;每個流就稱為一個線程;線程也是CPU資源配置設定的機關;線程可以共享同一個程序;線程是程序的子機關,響應速度優于程序,但是當線程去改變一個檔案時,其它線程就不能通路該檔案了,就是說當檔案正在被線程寫入時是不能被讀的(有寫鎖和讀鎖控制,缺點是會出現鎖競争;
linix線程和程序是不明顯區分開的,是以線程響應速度并不比程序快;
程序靠自己生成的子程序中的各個線程來響應使用者請求;
但是線程穩定性較差,如果一個使用者請求導緻一個線程崩潰,容易産生連動效應導緻其它線程同時崩潰;
定義程序能打開最多的線程數;
2)、prefork 每一個請求用一個程序響應,預設apche用此種機制;
先定義生成一定數量的空閑程序;使用者請求來後直接将空閑程序拿來用;多餘的空閑程序由父程序收回;
MAXSpare 定義最多空閑程序多少個;
MINSpare 定義最少空閑程序多少個;
MaxClient 定義最大的用戶端請求個數;
prefork 穩定性極佳;
module 子產品的裝載是基于DOS(Dynamic Shared Object動态共享對象)實作;
nginx 一個程序同時響應多個使用者的請求,基于事件驅動實作,不靠線程實作,占用記憶體較小,效率極高;
3、HTTPS簡介:
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目标的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,是以加密的詳細内容就需要SSL。
HTTPS主要作用可以分為兩種:一種是建立一個資訊安全通道,來保證資料傳輸的安全;另一種就是确認網站的真實性。
4、SSL簡介:
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網絡通信提供安全及資料完整性的一種安全協定。TLS與SSL在傳輸層對網絡連接配接進行加密。 SSL協定位于TCP/IP協定與各種應用層協定之間,為資料通訊提供安全支援。
5、SSL 協定的驗證的具體過程:
SSL 的握手協定非常有效的讓客戶和伺服器之間完成互相之間的身份認證,其主要過程如下:
① 浏覽器發送一個連接配接請求給安全伺服器。
② 伺服器将自己的證書,以及同證書相關的資訊發送給客戶浏覽器。證書中包括辨別、公鑰、發證機關、防僞辨別;
③ 客戶利用伺服器傳過來的資訊驗證伺服器的合法性,伺服器的合法性包括:證書是否過期,發行伺服器證書的 CA 是否可靠,發行者證書的公鑰能否正确解開伺服器證書的“發行者的數字簽名”,伺服器證書上的域名是否和伺服器的實際域名相比對。如果合法性驗證沒有通過,通訊将斷開;如果合法性驗證通過,将繼續進行第四步。
④ 使用者端随機産生一個用于後面通訊的“對稱密碼”K,然後用伺服器的公鑰(伺服器的公鑰從步驟②中的伺服器的證書中獲得)對其加密,然後将加密後的“預主密碼”傳給伺服器。
⑤ 如果伺服器要求客戶的身份認證(在握手過程中為可選),使用者可以建立一個随機數然後對其進行資料簽名,将這個含有簽名的随機數和客戶自己的證書以及加密過的“預主密碼”一起傳給伺服器。
⑥ 如果伺服器要求客戶的身份認證,伺服器必須檢驗客戶證書和簽名随機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的 CA 是否可靠,發行 CA 的公鑰能否正确解開客戶證書的發行 CA 的數字簽名,檢查客戶的證書是否在證書廢止清單(CRL)中。檢驗如果沒有通過,通訊立刻中斷;如果驗證通過,伺服器将用自己的私鑰解開加密的“預主密碼”,然後執行一系列步驟來産生主通訊密碼(用戶端也将通過同樣的方法産生相同的主通訊密碼)。
⑦ 伺服器和用戶端用相同的主密碼即“通話密碼”,一個對稱密鑰用于 SSL 協定的安全資料通訊的加解密通訊。同時在 SSL 通訊過程中還要完成資料通訊的完整性,防止資料通訊中的任何變化。
⑧ 用戶端向伺服器端發出資訊,指明後面的資料通訊将使用的步驟⑦中的主密碼為對稱密鑰,同時通知伺服器用戶端的握手過程結束。
⑨ 伺服器向用戶端發出資訊,指明後面的資料通訊将使用的步驟⑦中的主密碼為對稱密鑰,同時通知用戶端伺服器端的握手過程結束。
⑩ SSL 的握手部分結束,SSL 安全通道的資料通訊開始,客戶和伺服器開始使用相同的對稱密鑰進行資料通訊,同時進行通訊完整性的檢驗。
二、案例 - 1
1、實驗說明:
在一個企業網中有一台web站點,為了實作通路的安全性,公司要求使用https通路web站點,并實作身份驗證;
2、拓撲圖:

3、拓撲說明:
在本實驗中,我們在公司web站點上建立CA伺服器,來使web站點獲驗證書;
4、實驗要求:
1)、使用者通路web站點需要進行身份驗證;
2)、當使用者通路web站點時,web站點是需要出示證書;
3)、禁止使用http來通路web站點;
5、環境搭建:
使用Red Hat Enterprise Linux 5.4平台;
6、實驗步驟:
1)、在Linux建立一個證書伺服器(CA);
<1>、編輯CA的主配置文檔:
允許外部站點獲驗證書:
更改證書産生時的初始配置:
<2>、建立證書伺服器必要的三個目錄,兩個檔案:
<3>、給serial一個證書釋出的初始序列号:
<4>、産生CA伺服器自己的私鑰:
<5>、保護CA私鑰的安全性,改變私鑰檔案的權限:
<6>使用CA的私鑰來産生CA自己的證書:
2)、建立web站點,并從CA申請證書;
<1>、挂載CD光牒:
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]#
<2>、安裝httpd:
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
warning: httpd-2.2.3-31.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:httpd ########################################### [100%]
[root@localhost Server]#
<3>、安裝ssl的相應的一個子產品:
<4>、在web站點主目錄中建立一個證書目錄(用于存放證書):
<5>、在web站點上生成一個屬于web站點的私鑰:
<6>、通過web站點的私鑰來産生一個證書請求:
<7>、通過證書請求來擷取web站點自己的證書:
<8>、保護證書的安全性,改變相應檔案的權限:
3)編輯web站點的配置文檔;
<1>、編輯http的主配置文檔:
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
取消監聽80端口:
開啟身份驗證:
<2>、編輯http相應的ssl安全套接字配置檔案:
指明監聽端口:
指明證書存放位置:
指明私鑰存放位置:
4)、設定web站點的身份驗證
<1>、建立并編輯身份驗證檔案:
<2>、建立web站點登入使用者:
5)、啟動httpd服務:
7、驗證測試:
1)、在用戶端hosts檔案中添加一條本地dns記錄:(便于測試)
2)、通路https://www.shanghai.com,t彈出安全警報;
3)、獲得web站點初始的證書
4)、檢視證書資訊:
5)、當客戶機獲驗證書後,頁面彈出登入頁面:
6)、輸入使用者資訊後,成功登入: