linux裡的http的認證加密

2021-10-08 03:12:56 字數 4386 閱讀 7303

linux裡的http的認證加密

http即超文字傳輸協議

這是乙個檔案的傳輸協議,我們上網的時候,所有的檔案都是通過http這個協議,從伺服器上傳輸到客戶端的電腦裡面的。同時http協議工作在應用層,所以想要執行這個協議必須有相應的應用程式支撐。

這裡我們就先了解下什麼是客戶端,什麼是服務端

客戶端:通常是指我們的瀏覽器,比如谷歌瀏覽器、火狐瀏覽器、ie等,瀏覽器安裝在客戶使用的電腦上,所以,在描述http時,客戶端通常也代指那些安裝了瀏覽器的電腦。

服務端:通常是指那些安裝了web服務軟體的計算機,如httpd apache,nginx,lighttpd,這些服務端的計算機被稱為伺服器。

當我們從客戶端到服務端拉取檔案時,這些伺服器就會根據你的請求命令給你返回你所需要的資源。而這些資源在傳輸過程中都會以靜態的html格式檔案傳輸,同時它的傳輸方式是明文的。這樣的傳輸方式就會使你的一些重要資訊被一些有心人擷取下來,所以基於http的傳輸方式並不是安全的。

這就使https得以出現

https(全稱:httpover ssl,hyper text transfer protocol over secure socket layer),它是以安全為目標的http通道,簡單講就是http的安全版。即在http下加入了ssl子層,https的安全基礎是ssl。ssl會使用各種對稱加密演算法、非對稱加密演算法來加密傳送資料,https和ssl支援使用x.509數字認證,它提供了通訊雙方的身份驗證,保證客戶端到伺服器端的通訊都在被保護起來。所以有了這些就使得資料的傳輸得到了安全保障。

通過ssl建立會話的過程需要以下幾步:

1、客戶端與服務端交換協議版本號

2、選擇雙方都支援的加密方式,並向伺服器請求證書

3、伺服器端傳送證書以及選定的加密方式給客戶端

4、客戶端取得證書並進行證書驗證

客戶端接收到證書後,執行以下五步:

(a) 驗證證書**的合法性;用ca的公鑰解密證書上數字簽名

(b) 驗證證書的內容的合法性:完整性驗證

(d) 檢查證書是否被吊銷

(e) 證書中擁有者的名字,與訪問的目標主機要一致

4、客戶端生成臨時會話金鑰(對稱金鑰),並使用伺服器端的公鑰加密,將此資料傳送給服務端,完成秘鑰交換

5、服務端用此金鑰加密使用者請求的資源,響應給客戶端

https的實現

1、http想實現為https 就需要為配置ssl,及其使用的證書。這些在http裡有專門的mod_ssl模組來支援。

yum -y install mod_ssl  #安裝mod_ssl模組

安裝該模組後,它會自動修改配置檔案,增加loadmodule ssl_module modules/mod_ssl.so在httpd的子配置檔案/etc/httpd/conf.d/ssl.conf裡,同時也開啟了443埠,同時指定了證書的存放路徑。

原因是安裝的時候,安裝包裡會有指令碼去生成私鑰檔案/etc/pki/tls/private/localhost.key,同時也生成證書檔案/etc/pki/tls/certs/localhost.crt,而這個證書檔案是自簽名的,此時https**已經可以訪問,但是由於這個https伺服器的證書有問題,頒發給的機構不對,不是對應的站點名稱。所以需要要重新向ca申請,在獲取ca頒發的證書後才能正確使用https站點。

2、申請ca證書

要生成證書就需要為服務端生成私鑰,並用它來為其提供證書檔案;

mkdir /etc/httpd/ssl && cd /etc/httpd/ssl  #建立目錄存放私鑰檔案

(umask 077; openssl genrsa -out httpd.key 1024)  #生成1024位的私鑰

openssl req -new -key httpd.key -out httpd.csr  #用此私鑰生成簽署證書檔案,並把生成的檔案提交給ca機構進行證書的簽署

注意:證書裡的國家、省份等名稱要與根ca的名稱保持一致,而主機服務名一定要寫將來對外提供web服務的服務名稱

3、ca簽證

ca簽發完成後,根ca會把伺服器的證書再傳給伺服器,同時把根的證書cacert.pem也一起發給伺服器伺服器。

簽署後的證書為:/etc/httpd/ssl/httpd.crt

ca的根證書為:/etc/httpd/ssl/cacert.pem

4、修改配置檔案:/etc/httpd/conf.d/ssl.conf 需要修改的就是下面這幾項

documentroot /var/www/html  #指明共享檔案的根目錄,這個目錄會覆蓋/etc/httpd/conf/http.conf裡的設定

servername www.webname.com  #指明這個web**伺服器的名字

sslcertificatefile /etc/httpd/ssl/httpd.crt  #指明證書存放的位置

sslcertificatekey /etc/httpd/ssl/httpd.key   #指明私鑰檔案的存放位置

sslcacertificatefile /etc/httpd/ssl/cacert.pem  #指明根證書的存放位置

service httpd reload  #過載配置檔案

6、測試是否配置成功

測試命令:

openssl s_client [-connect host:port] [-cert filename] [-capath directory] [-cafile filename]

例:openssl s_client -connect hostip:443  #如果出現證書檔案內容,則說明https已經搭建成功

這裡的hostip也可以寫成你的伺服器網域名稱,前提是你的網域名稱已經在dns伺服器上做過網域名稱解析了。

7、http重定向到https

重定向就是將http 請求**至https 的url。一般使用者在向web伺服器請求檔案時不會專門記這個**是否為加密**。所以就需要在服務端自動的將使用者的http請求轉換為https請求。

這裡建議將http和https的主站點設定為同乙個站點。因為跳轉會將設定目錄下的所有http請求進行跳轉,如果https沒有http站點的目錄,比如http預設主站點是/var/www/html/,但是https下的主站點是/var/www/https,而且沒有/var/www/https/web這個站點,當有請求去請求這個/var/www/https/web頁面時,則跳轉會顯示網頁不存在而導致網頁打不開。

重定向:

(1)基於redirect進行跳轉

基於redirect的跳轉需要伺服器內配置跳轉檔案,並指明跳轉的路徑。

redirect的語法格式:

redirect [status] url-path url

status 的兩個狀態:

permanent:returns a permanent redirect status(301) indicating that the resource has moved permanently(永久跳轉)

temp:returns a temporary redirect status (302).this is the default(臨時跳轉)

例:vim /etc/httpd/conf.d/redirect.conf

redirect permanent /var/www/html   #新增一條跳轉路徑,指明跳轉後的根目錄

(2)基於hsts跳轉

目前主流都是採用hsts(http stricttransport security)技術進行跳轉。伺服器端配置支援hsts後,會在給瀏覽器返回的http首部中攜帶hsts欄位。瀏覽器獲取到該資訊後,會將所有http訪問請求在內部做重寫307 跳轉到https。而無需任何網路過程。當客戶端第一次發http請求過來,伺服器端響應https的結果給客戶端,客戶端會把這個響應快取下來,下次客戶端瀏覽器再次訪問的時候,在瀏覽器端自動會將http轉換為https,然後以https發請求給伺服器。hsts可以很大程度上解決ssl剝離攻擊,因為只要瀏覽器曾經與伺服器建立過一次安全連線,之後瀏覽器會強制使用https,即使鏈結被換成了http。

hsts preload list

hsts preload list是chrome瀏覽器中的hsts預載入列表,在該列表中的**,使用chrome瀏覽器訪問時,會自動轉換為https。firefox、safari、edge瀏覽器也會採用這個列表。這個是在瀏覽器內配置的,所以是要**向各瀏覽器服務商申請,瀏覽器才會支援的。

配置hsts**:

header always set strict-transport-security 「max-age=63072000」  #告訴瀏覽器下次需要用https進行訪問,這個資訊的失效時間為兩年

rewriteengine on  #開啟重寫引擎

rewriterule ^(/.*)$ https://%$1 [redirect=301]  #定義重寫規則

HTTP的幾種認證方式

基礎認證簡單的使用base64對密碼 使用者名稱進行加密,並將加密後的資訊放在header中,本質上還是明文傳輸使用者名稱 密碼等,基本流程 摘要認證使用隨機數 md5加密雜湊函式來對使用者名稱 密碼進行加密,在上述第二步時伺服器返回隨機字串nonnce,之後客戶端傳送摘要 md5 ha1 nonc...

PHP的HTTP認證機制

php的http認證機制因此該功能不適用於 cgi 版本。在 apache 模組的 php 指令碼中,可以用 header 函式來向客戶端瀏覽器傳送authentication required資訊,使其彈出乙個使用者名稱 密碼輸入視窗。當使用者輸入使用者名稱和密碼後,包含有 url 的 php 指...

Http協議的身份認證

目錄 一 basic基礎認證 二 digest摘要認證 三 ssl client認證 四 http 表單認證 http提供了一套標準的身份驗證框架 伺服器可以用來針對客戶端的請求傳送質詢 challenge 客戶端根據質詢提供身份驗證憑證。質詢與應答的工作流程如下 伺服器端向客戶端返回401 una...