Linux裏HTTP實現爲HTTPS

    HTTP即超文本傳輸協議(Hypertext Transfer Protocol)。html

    這是一個文件的傳輸協議,咱們上網的時候,全部的文件都是經過HTTP這個協議,從服務器上傳輸到客戶端的電腦裏面的。同時HTTP協議工做在應用層,因此想要運行這個協議必須有相應的應用程序支撐。nginx

    這裏咱們就先了解下什麼是客戶端,什麼是服務端web

    客戶端:一般是指咱們的瀏覽器,好比谷歌瀏覽器、火狐瀏覽器、IE等,瀏覽器安裝在客戶使用的電腦上,因此,在描述http時,客戶端一般也代指那些安裝了瀏覽器的電腦。算法

    服務端:一般是指那些安裝了web服務軟件的計算機,如httpd apache,nginx,lighttpd,這些服務端的計算機被稱爲服務器。apache

    當咱們從客戶端到服務端拉取文件時,這些服務器就會根據你的請求命令給你返回你所須要的資源。而這些資源在傳輸過程當中都會以靜態的html格式文件傳輸,同時它的傳輸方式是明文的。這樣的傳輸方式就會使你的一些重要信息被一些有心人截取下來,因此基於http的傳輸方式並非安全的。vim

    這就使HTTPS得以出現瀏覽器

    HTTPS(全稱:httpover ssl,Hyper Text Transfer Protocol over Secure Socket Layer),它是以安全爲目標的HTTP通道,簡單講就是HTTP的安全版。即在HTTP下加入了SSL子層,HTTPS的安全基礎是SSL。SSL會使用各類對稱加密算法、非對稱加密算法來加密傳送數據,HTTPS和SSL支持使用X.509數字認證,它提供了通訊雙方的身份驗證,保證客戶端到服務器端的通訊都在被保護起來。因此有了這些就使得數據的傳輸獲得了安全保障。緩存

    經過SSL創建會話的過程須要如下幾步:安全

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

      二、選擇雙方都支持的加密方式,並向服務器請求證書

      三、服務器端發送證書以及選定的加密方式給客戶端

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

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

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

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

        (c) 檢查證書的有效期限

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

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

      四、客戶端生成臨時會話密鑰(對稱密鑰),並使用服務器端的公鑰加密,將此數據發送給服務端,完成祕鑰交換

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

   HTTPS的實現

    一、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站點。

    二、申請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服務的服務名稱

    三、CA簽證

      CA簽發完成後,根CA會把服務器的證書再傳給服務器,同時把根的證書cacert.pem也一塊兒發給服務器服務器。

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

      CA的根證書爲:/etc/httpd/ssl/cacert.pem

    四、修改配置文件:/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  #重載配置文件

    六、測試是否配置成功

      測試命令:

      openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

      例:openssl s_client -connect  HostIP:443  #若是出現證書文件內容,則說明https已經搭建成功

      這裏的HostIP也能夠寫成你的服務器域名,前提是你的域名已經在DNS服務器上作過域名解析了。

    七、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  https://www.Webname.com  #添加一條跳轉路徑,指明跳轉後的根目錄

 

    (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轉發:

    vim  /etc/httpd/conf/httpd.conf

      Header always set Strict-Transport-Security "max-age=63072000"  #告訴瀏覽器下次須要用https進行訪問,這個信息的失效時間爲兩年

      RewriteEngine   on  #打開重寫引擎

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

  最後,修改完成後不要忘了從新加載配置。

相關文章
相關標籤/搜索