基于ssl協議和openssl工具建立私有CA

前言

    要自建CA需先了解openssl工具和ssl協議還有各加密類型

    ssl(Secure Socket Layer)安全套接字層當前版本為3.0,瀏覽器與Web服務器之間的身份認證和加密數據傳輸,它工作在傳輸層和各應用層之間,用戶可以選擇是否使用ssl進行傳輸,選擇ssl協議將調用ssl函數庫,端口也會發生變化。


加密類型

          對稱加密:任意加密數據塊和流的內容,加密和解密用同一個密碼, 通常明文通過算法和密鑰生成密文,再由接受者用相同的密鑰和算法解密獲取明文。

              算法:(DES、3DES、AES現在使用比較廣、Blowfish、Twofish、IDEA、RC6、CAST5)
              特性:加密、解密使用同一口令。將明文分割成固定大小塊,逐個進行加密
              缺陷:密鑰過多、密鑰傳輸不安全、密鑰交換、身份驗證。

               

          公鑰加密:公鑰和私鑰是成對出現的,公鑰包含在私鑰中,公鑰稱為public key、私鑰為secret key,由發起者對接受者索要公鑰,用公鑰加密數據后發送給接受者,接受者用算法和私鑰解密

              缺陷:加密、解密時間過長一般不用于簡單通信


          單項加密:單項機密也叫數據完整性校驗,抽取數據特征碼和之前特征碼作比較以確保數據沒有被竄改


          認證協議:用來確定通信方的真實性。


ssl會話模型

       發起者用單項加密獲取數據特征碼,用自己的私鑰計算特征碼附加在數據后面,在用對稱加密對整個包(數據和特征碼)進行加密,并用對方公鑰加密對稱加密密碼,附加在整個包中一并發給對方。接受者用自己的私鑰解密獲取對稱加密密碼,得到密碼后解密整個包獲得數據和特征碼,在用相同的算法計算特征碼,用對方的公鑰解密數據驗證對方身份,用對方計算結果(特征碼)和解析結果(特征碼)進行對比,來驗證數據的完整性。


openssl工具

      對稱加密工具openssl enc

               openssl命令選項:
                   -e:指定為加密,可以不寫默認為加密。
                   -des3:指定算法算法
                   -salt:默認設置,生成一段字符串放在密碼最前面進行加密,提高解密難度。
                   -a:基于base64處理數據。加密結果進行base64編碼處理
                   -in:讀取那個文件進行加密
                   -out:輸出到那里
                   -d:指定為解密

               案例如下:

                   加密文件:openssl enc -e -des3 -a -salt -in test.sh -out ./test.txt
                   解密文件:openssl enc -d -des3 -a -salt -in test.txt -out ./test.sh 


       單項加密:openssl dgst

                  -md5:用md5方式加密
                  -sha1:sha1方式加密
                  -out:加密后密碼保存到那里

               案例如下:

                  openssl dgst -md5 test.sh 或openssl dgst -md5 -out ./123a test.sh

                  openssl dgst -sha1 test.sh


       用戶密碼:openssl passwd

                  -1:md5加密、
                  -salt:自己指定附加信息。

                  生成隨機數:openssl rand -base64 4或openssl rand -hex 4,生成8位隨機數

               案例如下:

                  openssl passwd -1 -salt `openssl rand -base64 4` 123456  

    

       生成私鑰和公鑰:openssl genrsa 

               案例如下:

                 (umask 077;openssl genrsa -out ./mykey 2048)生成只有當前用戶可讀的2048字節mkkey私鑰文件

                  openssl rsa -in ./mykey -pubout,-pubout根據私鑰文件提取公鑰


建立私有CA:

          服務器端:

             生成密鑰

             自簽證書

             初始化工作環境

       節點:

             生成密鑰對兒

             生成證書簽署請求

             把請求發送給CA

       CA服務器:

             驗正請求者信息:自建CA無需該步驟

             簽署證書

             把簽好的證書發送給請求者    


服務器端自建CA

       生成密鑰:

             (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

       自簽證書:

             req: 生成證書簽署請求
             -news: 新請求
             -key /path/to/keyfile: 指定私鑰文件
             -out /path/to/somefile:輸出文件到那里
             -x509: 生成自簽署證書
             -days n: 有效天數
             openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

             詳細記錄證書創建時所填信息如不一致簽署將失敗。建議修改openssl.conf文件發給每個申請節點

       初始化工作環境:
             touch /etc/pki/CA/{index.txt,serial}:創建相關文件
             echo 01 > /etc/pki/CA/serial。只需第一次創建序列號


節點申請證書:

       生成密鑰:

             (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

         生成證書簽署請求:

             openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

         把簽署請求文件發送給CA服務


CA服務器簽署證書: 
                  
簽署證書:

             openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
         發送給請求者:


CA證書驗證會話模型

       在基于tcp/ip協議建立后,服務端會把ca證書發送給客戶端,客戶端得到證書后通過ca公鑰進行解密ca簽名,能解密證明該證書是可信任的、把解密出來的數據和重新計算出來的特征碼對比對確保完整性、之后驗證主機的名稱和申請者名稱是否相同,驗證通過后客戶端會取得服務器端公鑰信息,客戶端用公鑰生成個一次性的對稱加密密碼發給服務器端。服務器端獲取密碼后加密網頁數據發給客戶端。


以上為建立CA大致流程,如有遺漏請告知。

原創文章,作者:xiangjin1,如若轉載,請注明出處:http://www.www58058.com/3991

(0)
xiangjin1xiangjin1
上一篇 2015-05-05 18:17
下一篇 2015-05-07 09:30

相關推薦

  • 虛擬主機的實現

    示例1:基于ip 編輯配置文件,切換到最后一行,增加: <VirtualHost 192.168.1.117:80>     ServerName web1.ams.com     DocumentRoot "/vhosts/web1/htdocs" </VirtualHost&g…

    Linux干貨 2016-08-05
  • sed工具的基本用法

    sed -n(不輸出模式,不自動打?。?sed -d(刪除匹配到的內容) sed-e(多點編輯) sed-r(支持擴展正則表達式) sed#,#(地址定界,在此范圍中匹配) sed 1~2   sed 2~2 (找奇數行和偶數行) sed =(為打印到的內容編輯行號)  sed?。ㄈ》矗?sed s///(查找替換,支持使用其他…

    Linux干貨 2017-05-02
  • 回溯法 -數據結構與算法

    1.回溯法算法思想: 定義:         回溯法(探索與回溯法)是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 1、回溯法適用:有許多問題,當需要找出它的解集(…

    Linux干貨 2015-04-07
  • 群集簡介和LVS_nat模式配置

    群集簡介: 群集(或集群)和稱呼來自于英文單詞cluster,表示一群、一串的意思,用在服務器領域則表示大量服務器的集合體,以區分于單個服務器。 根據實際企業環境的不同,群集所提供的功能也各不相同,采用的技術細節也可能各有千秋,但無論哪種群集,都至少包括兩臺節點服務器。而對外表現為一個整體,只提供一個訪問入口(域名或IP地址),相當于一臺大型計算機。根據群集…

    Linux干貨 2017-02-13
  • 一鍵編譯安裝httpd服務

    一鍵編譯安裝httpd服務 背景: httpd服務是一個常用的web服務,所以很多地方會用到,這里寫一個一鍵編譯安裝httpd服務的腳本。 環境: 系統:centos6.9和centos7.3(應該所有的6和7的版本都可以使用) httpd源代碼版本:httpd-2.2.34.tar.bz2和httpd-2.4.27.tar.bz2 。下載網址官網:http…

    2017-09-16
  • HTTPD-相關的配置

    一次完整的HTTP請求處理過程: 1、建立連接:接收或拒絕鏈接請求 2、接受請求:接收客戶端請求報文中對某資源的一次請求的過程 Web訪問響應模型(Web I/O) 單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請 求被串行響應; 多進程I/O模型:并行啟動多個進程,每個進程響應一個鏈接請求; 復用I/O結構:啟動一個進程,同時響應N個…

    2017-08-29
欧美性久久久久