1. 程式人生 > >Linux學習(第九周)

Linux學習(第九周)

第九周學習內容:加密演算法、DNS與Bind

第九周作業:

1、簡述常見加密演算法及常見加密演算法原理。

      金鑰演算法和協議主要有對稱加密;公鑰加密;單向加密和金鑰交換。

      對稱加密:加密和解密使用同一把金鑰,有DES、3DES、AES、Blowfish、Twofish、IDEA等等。特點除了使用同一把金鑰外,還有會將原始資料分割成為固定大小的塊,逐個進行加密。缺點有金鑰過多和分發困難。

      公鑰加密:金鑰分為公鑰和私鑰,首先通過工具生成私鑰,再由私鑰提取出公鑰。公鑰交給對方,私鑰留給自己,並保證其私密性,所有用私鑰加密的資料只能使用對應的公鑰才能解密,反之亦然。主要作用有數字簽名、金鑰交換,很少將其直接應用於加密資料。數字簽名:用私鑰加密一段從資料中提取的特徵碼發給對方,對方用與其配套的公鑰進行解密,這樣就能確認私鑰使用者的身份了,然後對傳輸過來的資料也做提取特徵碼操作與解密出的特徵碼進行比較,如果一致則表示資料完整性也得到了保障。演算法有RSA、DSA、ELGamal等。

      單向加密:只能加密,不能解密,是一個單向操作的過程,前面提到的提取資料特徵碼就是單向加密。特點是不等長輸入等長輸出,還具有雪崩效應,資料中一點的變化,會改變整個特徵碼。主要功能就是驗證資料完整性。演算法有MD5、SHA1、SHA224、SHA256、SHA384、SHA512等。

      金鑰交換:將前面三種加密方式結合起來,安全可靠有效地共享金鑰的一種行為。最常用的金鑰交換流程:(1)A計算出資料特徵碼;(2)A使用私鑰加密特徵碼並將其附在真是資料之後;(3)A生成一對對稱金鑰,加密整段檔案,包括資料和加密後的特徵碼;(4)A使用B事先發來的公鑰加密自己生成的對稱金鑰將其附在整段檔案之後並將其傳送給B;(5)B使用私鑰先解密整段最後的對稱金鑰;(6)B使用對稱金鑰解密整段檔案;(7)B用A發來的公鑰解密特徵碼,如果能解密則驗證了A的身份(8)B自行計算資料特徵碼,並拿它與解密出的特徵碼作比較,如果一致則驗證了資料的完整性。接下去AB之間就可以基於這對對稱金鑰進行通訊了。

      金鑰交換簡單圖解:

      主機A:

      image.png

      主機B:

      image.png

2、搭建apache或者nginx並使用自簽證書實現https訪問,自簽名證書的域名自擬。

      自建CA是一種私有CA,只有在私有範圍內通訊時有效,大方向分兩大塊一是CA自己的配置,二是使用者主機的證書生成和簽名。

      (1)CA主機生成私鑰:

      image.png

      (2)CA主機生成自簽證書:

      image.png

      (3)建立幾個檔案,併為第一張自簽證書給上編號:

      image.png

      (4)使用者主機生成私鑰:

      image.png

      (5)使用者主機生成證書:

      image.png

      (6)傳送給CA,並讓其簽名:

      image.png

      由於公司名字大小寫出錯,第一次簽名失敗:

      image.png

      公司名字修好後,簽名成功:

      image.png

      (7)nginx簡單配置一下,主要是把證書和私鑰指向簽名證書和生成的私鑰:

      image.png

      (8)成功訪問https主頁:

      image.png

3、簡述DNS伺服器原理,並搭建主-輔伺服器。

       DNS:域名地址解析服務,可以把主機名和域名(FQDN)轉換為主機可是別的網路地址,也就是IP地址。DNS將主機名做了層次劃分,從最頂層開始依次往下:根域(.)——頂級域(.com、.org、.net、.gov等)和國家域(.cn、.hk、.tw、.uk等)——二級域(個人或公司可自己起名,需要註冊並且不可重複)。DNS服務是一種分散式資料庫系統,他會將本來一個非常龐大的資料庫分不到多臺伺服器上實現,根據前面所說的層次劃分,根域伺服器只管理頂級域和國家域,而頂級域和國家域的伺服器只管理屬於其下面的二級域,而二級域伺服器也只管理其旗下的主機,這樣每個伺服器的負擔就笑了,當有某臺具體主機發生更新時,只要更新與其相關的DNS伺服器即可,無需驚動最上層的根域伺服器。當一個使用者想要訪問某主機時,通過系統設定好的DNS伺服器地址找到伺服器,若該伺服器也不知道該主機的IP地址,則它會直接向根域伺服器發起請求,請求其幫忙解析。然而就如前面所說的,根域只管頂級域和國家域,他也是不知道具體某臺主機的IP地址的,但他會把關於這臺主機的頂級域或國家域資訊告知請求者,這樣請求者就又可以向頂級域或國家域發起請求了,以此類推,最終就能通過其他DNS伺服器的幫助得知某主機的具體IP地址,在此過程中使用者向DNS伺服器發起的查詢叫做遞迴查詢,而DNS伺服器向根域、頂級域伺服器發起的查詢叫做迭代查詢。從域名到IP地址的解析叫正向解析,反之,從IP地址到域名的解析被稱為反向解析,是完全不同的層級結構,根據IP地址的一段一段進行分層,根域叫做in-addr.arpa,比起正向解析複雜很多,所以在很長一段時間內是沒有反向解析的。一次完整的DNS查詢請求過程:客戶端——本地host——本地快取——指向的DNS伺服器——指向的DNS伺服器快取——迭代查詢找根域伺服器——迭代查詢找頂級域伺服器——迭代查詢找二級域伺服器。

      區域資料庫檔案:每一行一個資源記錄(RR),根據標記的資源型別不同有各種分類:SOA(起始授權記錄)一個區域只能有一個,且必須放在第一條,標記了該區域的基礎資訊;NS(域名服務記錄)一個區域可以有多條,具體某臺DNS伺服器的名字就是NS;A(地址記錄)從FQDN解析為IPV4地址的記錄;AAAA(地址記錄)從FQDN解析為IPV6地址的記錄;CNAME(別名記錄)可以將多個主機設為同一個別名,訪問此別名即可提供多臺主機的服務;PTR(方向記錄)將IP地址方向解析為FQDN的記錄;MX(郵件交換器)專門用來標記郵件伺服器的記錄,記錄最後需要加上優先順序。資源記錄的具體格式:名字+[TTL]+IN+資源型別+值。其中“IN”是關鍵字,“TTL”可有可無。而每種資源所對應的名字和值也更不相同。

      主-備DNS伺服器:備DNS伺服器會有主DNS伺服器的資料庫副本,且只能同步,不能手動修改,只要主伺服器發生更改,備份伺服器會同步更新,靠的是序列號。所以在配置主DNS伺服器時,序列號非常重要,要養成修改完一次更改一次的習慣,否則會造成不同步的情況。

      Bind:bind是DNS的一種具體實現,當bind執行起來後進程名叫named。使用bind搭建主-輔伺服器步驟如下:

      (1)一般主機預設只安裝了bind-libs和bind-utils,即使用DNS服務所需要的檔案,而並沒有安裝bind程式,這是作為DNS伺服器所需要的程式,所以需要先安裝bind:

      image.png

      (2)定義區域,編輯配置檔案/etc/named.rfc1912.zones檔案,主伺服器type為master,輔伺服器type為slave,並且要指master伺服器:

      image.png

      image.png

      (3)在主伺服器上定義區域資料檔案:

      image.png

      (4)主備伺服器上都啟用DNS服務,並將某臺主機的DNS伺服器設定為這兩臺主備伺服器,解析成功。

      image.png

 4、搭建並實現智慧DNS。

      bind view:只能DNS的實現,同一個主機名,來自不同的使用者的請求,可以得到不同的地址,在現實生產環境中,不同運營商的網路對同一域名的訪問可以拿到完全不同的地址,非常實用。

      (1)編輯配置檔案/etc/named.conf:

      image.png

      (2)再編輯兩個區域資料檔案:

      image.png

      image.png

      (3)語法檢查沒有問題後,就可以重啟服務,智慧DNS就完成了。

      image.png