加密、解密以及Openssl建立私有CA

一、openssl簡介
      OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用
的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
  SSL:secure socket layer  安全套接層協議 可以在internet提供祕密性的傳輸。

二、加密算法  
 加密算法的分類:對稱、公鑰和單向加密
 1、對稱加密:
  加密和解密用同一個密鑰,安全性依賴於密鑰,而非算法。
   (1)算法:
        DES:Data Encryption standard,數據加密標準,56bits
        3DES:DES加強版
        AES:Advanced encrption standard 高級加密標準(128bits,192,256,382,512,)
        可自行選擇加密位數,常用算法
        blowfish
        twofish
        tdea
        rc6
        casts
   (2)特性
       1)同一密鑰
       2)將明文分隔成固定大小的塊,逐個進行加密
   (3)缺陷
       1)密鑰過多
       2)密鑰分發
 2、公鑰加密:
    (1)私鑰和公鑰
      私鑰:secret key,僅允許個人使用
      公鑰:public key,公開給所有人獲取
      公鑰從私鑰中提取而來,使用公鑰加密的數據,只能使用與此公鑰配對配對的私鑰解密
  (2)用處:
   1)身份認證:私鑰擁有者用自己的私鑰加密的數據,只要用其公鑰能解密,即可認證其身份;
   2)密鑰交換:與被通信方通信之前,首先獲取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,併發送給對方;
   3)數據加密:
  (3)算法:
   RSA
   DSA
   ELGamal
    (4)特性
       1)密鑰長度較大,512,2048
       2)加密解密分別使用密鑰對兒中的密鑰相對進行
       3)用於數據簽名和密鑰交換
 3、單向加密:
  提取數據的特徵碼
   (1)特性
      1)定長輸出,無論原來數據的大小,加密長度一樣
      2)雪崩效應:原數據微小改變,導致結果巨大變化
      3)不可逆       
   (2)算法:
        MD5:128bit
        sha1 160
        sha256
        sha384
        sha512
   (3)用處:
        數據完整性            
 4、一次加密通信過程
 發送者:  
 (1)提取數據特徵碼
 (2)私鑰加密特徵碼
 (3)生成臨時密鑰
 (4)臨時密鑰加密數據和加密過的特徵碼
 (5)使用接收方公鑰加密臨時密鑰,附加在數據後方
 接收方:
 (1)用私鑰解密,獲得臨時密鑰
 (2)使用臨時密鑰解密數據和特徵碼
 (3)用對方公鑰解密特徵碼
 (4)計算特徵碼,與解密的對比

三、數字證書
  1、數字證書的定義:
     數字證書:互聯網通訊中標誌通訊各方身份信息的一串數字,提供了一種在
  Internet上驗證通信實體身份的方式,數字證書不是數字***,而是身份認證
  機構蓋在數字***上的一個章或印。
     它是由一個由權威機構——CA機構,又稱爲證書授權(Certificate Authority)
 中心發行的,人們可以在網上用它來識別對方的身份。    
  2、數字證書的格式與用戶
   (1)數字證書的格式(x.509 ):
       版本號(version)
       序列號:(serial number):CA用於唯一標識證書
       簽名算法標誌(signature algorithm identifier)
       發行者的名稱:即CA自己的名稱
       有效證書主體名稱:證書擁有者自已的名字
       證書文體公鑰信息:證書擁有者自己的公鑰
       發行商的唯一標識
       證書主體的唯一標識
       擴展信息
       簽名:CA對此證書的數字簽名
   (2)證書通常有兩類用途
       用戶證書
       主機證書(httpd)
 3、證書的吊銷鏈表:
      算法-->CA的名稱-->本次更新時期-->下次更新日期-->用戶證書序列號,吊銷日期-->CA的數字簽名
 4、獲取證書的方法:
    (1)向RA註冊申請
    (2)建立私有CA 

四、openssl加密解密:
 1、openssl 的組成部分
    libcrypto:加密、解密庫文件
    libssl:ssl協議實現
    openssl:多用途命令行工具,每種功能都使用專用 的子命令來實現
 2、對稱加密
    工具:openssl enc
    算法:des,3des,aes
    openssl enc -e -CIPHERNAME -a salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/FILE
    openssl enc -d -CIPHERNAME -a salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/FILE
      #cp /etc/fstab ./
      #openssl enc -e -des3 -a -salt -in fstab -out fstab.des3
      #openssl enc -d -des3 -a -salt -in fstab.des3 -out fstab
 3、公鑰加密
   工具:gpg,openssl rsautl
   數字簽名:RSA,DSA,ELGamal
     DSA:digital signature algorithm  數字簽名算法
     DSS:digital signature standard    數字簽名標準
操作過程 :生成私鑰,從私鑰中提取公鑰
(1)生成私鑰:
     openssl genrsa -out keyFILE  NUM_BITS
     #openssl genrsa -out testkey 2048
    (umask 077;openssl genrsa -out KEY_FILE NUM_BITS)
    #(umask 077;openssl genrsa -out testkey 2048)
    注意:命令加(),會在子shell中運行,修改默認生成私鑰權限
(2)提取公鑰
     #openssl rsa -in KEY_FILE -pubout
     #openssl rsa -in testkey -pubout
 4、單向加密
    算法:md5,sha1
    工具:openssl dgst,md2sum,sha1sum
    openssl dgst -CIPHER /PATH/TO/SOMEFILE...
    #openssl dgst -md5 fstab
    #md5sum fstab
 5、生成用戶密碼:
     openssl passwd -1 -salt 8bits 隨機數 -1表示以MD5加密
     #openssl passwd -1 -salt 12345678
 6、生成隨機數
    openssl rand -hex|-base64 NUM
    #openssl passwd -1 -salt $(openssl rand -hex 4)
     openssl
 7、隨機數生成器
    random,urandom
    熵池:保存硬件中斷產生的隨機數
    /dev/random 僅從熵池中返回隨機,當熵池耗盡,進程將被阻塞
    /dev/urandom  取隨機數,當熵池耗盡,讓生成器生成隨機數

五、構建私有CA
 配置文件:/etc/pki/tls/openssl.conf
 工作目錄:/etc/pki/CA/
 1、建立私有CA:
  (1)生成私鑰文件  /etc/pki/CA/private/cakey.pem
        #cd /etc/pki/CA
        #(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
  (2)生成自簽證書
        #openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out/etc/pki/CA/cacert.pem -days 3650
          -new :生成新的證書籤署請求
          -key 私鑰文件路徑,用於提取公鑰
          -days N:有效時長 ,天
          -out:輸出文件保存位置
              -x509:直接輸出自簽署證書文件,只有構建CA時才用
  (3)提供輔助文件
        #cd /etc/pki/CA
        #touch /etc/pki/CA/index.txt
        #echo 01 >/etc/pki/CA/serial
 2、給節點發證書
  (1)節點申請證書
         1)生成私鑰
             #cd /etc/httpd
             #mkdir ssl
             #(umask 077;openssl genrsa -out httpd.key 1024)
         2)生成證書籤署請求
             #openssl req -new -key httpd.key -out httpd.csr
            注意:
               a)其中subject信息部分與CA一致
               b)common Name 要使用此主機在通信使用名字
         3)把請求發送給CA
  (2)CA簽發證書
         1)驗正請求者信息
         2)簽署證書
           openssl ca -in CSR_FILE -out CRT_FILE -days N
           #openssl ca -in /etc/httpd/ssl/http.csr -out /etc/httpd/ssl/httpd.crt -days 3650
         3)把簽署好的證書發還給請求者
 3、吊銷證書:
  (1)獲取吊銷證書的序列號
       openssl x509 -in CRT_FILE -noout -serial -subject
      #openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject
  (2)實現證書吊銷
        1)吊銷證書
          #openssl ca -revoke CRT_FILE
        2) 生成吊銷證書編號
         #echo 01 >/etc/pkie/ca/crlnumber
        3)更新證書吊銷列表
          #openssl crl -gencrl -out SCA.crl

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章