1. 程式人生 > >創建私有CA, 加密解密基礎, PKI, SSL

創建私有CA, 加密解密基礎, PKI, SSL

article sport 數據庫 comment crt 技術 base allow war

發現了一篇圖文並茂的超棒的 加密解密, CA, PKI, SSL 的基礎文章, 鏈接如下:
https://blog.csdn.net/lifetragedy/article/details/52238057


簡要描述一下概念:

  PKI: Public Key Infrastructure, 公鑰體系

    包含, CA, RA, CRL,證書存取庫

    CA: 證書簽發機構

    RA: 證書註冊機構

  X.509是證書標準規範, 定義了證書的結構以及認證協議標準, 現在使用多為v3版本

  SSL: Secure Socket Layer 安全的套接字層

  TLS:Transport Layer Security 安全傳輸層協議

    分層設計:1.最底層: 基礎算法原語的實現, aes, rsa, md5

        2.向上一層: 各種算法的實現

            例如: aes-128-cdb-pkcs7

        3.再向上一層: 組合算法實現的半成品

        4. 用各種組件拼裝而成的各種成品密碼學協議/軟件; 例如 tls, ssh


創建私有CA的簡明操作:

  操作環境: VMware 虛擬兩臺 CentOS 7.4, 兩機互通

    CA簽發服務器為 192.168.142.128 --> CA server

    申請CA簽發的客戶端為 192.168.142.135 --> CA client

  證書申請及簽署步驟:

    1. 生成申請請求
    2. RA核驗
    3. CA簽署
    4. 證書獲得及發放

  簡明CA相關文件及目錄:

    1. openssl默認配置文件: /etc/pki/tls/openssl.cnf --> 有必要的情況下可以修改, 一般不動
      ####################################################################
      [ CA_default ]
      
      dir                 = /etc/pki/CA            # Where everything is kept     -->證書目錄
      certs               
      = $dir/certs # Where the issued certs are kept -->證書存取庫 crl_dir = $dir/crl # Where the issued crl are kept -->證書吊銷列表 database = $dir/index.txt # database index file. -->數據庫的索引文件 #unique_subject = no # Set to no to allow creation of -->是否證書主體必須唯一 # several ctificates with same subject. new_certs_dir = $dir/newcerts # default place for new certs. -->剛剛簽完的證書放哪兒 certificate = $dir/cacert.pem # The CA certificate -->CA自己的證書 serial = $dir/serial # The current serial number -->證書的序列號 crlnumber = $dir/crlnumber # the current crl number -->吊銷的證書的序列號 # must be commented out to leave a V1 CRL crl = $dir/crl.pem # The current CRL -->當前正在使用的吊銷的證書 private_key = $dir/private/cakey.pem# The private key -->CA自己的私鑰 RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert
    2. 必要的文件及目錄如下:
    3. 技術分享圖片
      1. # touch index.txt
        -->數據庫的索引文件
      2. # echo 1 > serial
        -->證書的序列號

  創建私有CA步驟:

    1. 在完成上面的文件創建後, 給CA自己發一個證明自己是CA的自簽證書

      在CA server完成

      

(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) 
#生成2048位的RSA私鑰,輸出文件為 cakey.pem
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out cacert.pem
#以上述私鑰為基準生成一個CA自簽證書

技術分享圖片技術分享圖片

自簽證書時, 會要求你輸入: 國家信息, 省份信息, 城市信息, 公司名稱, 公司類型, 主機名, 管理郵箱; 處於測試目的, 我們隨便填一下好了;

    2.自簽做完, CA server等於啟動了; 轉移到client虛擬機, 請求發證; 以httpd為例

(umask077; openssl genrsa -out /etc/httpd/ssl/httpd.key 4096)
#生成密鑰
openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
#生成證書請求文件, 註意, 此處只是證書請求文件, 未經過CA簽名認證

技術分享圖片

技術分享圖片

    

    3. 發送證書申請書到CA server, 由CA server簽名蓋章後發回client

scp /etc/httpd/ssl/httpd.csr root@192.168.142.128:/tmp/
#發送到CA server 的/tmp目錄下

技術分享圖片

以下為CA server操作

cd /tmp
ll -t

技術分享圖片

我們看到httpd.csr已經成功傳送到CA server上來了

接下來, 就是對其簽證的操作:

openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
#生成證書, 並保存到CA server的證書目錄下, 有效期為一年; 註意此處後綴為統一後綴
#
#查看證書中的信息:
# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -text -subject

技術分享圖片

技術分享圖片

證書已簽名, 發放給client

scp /etc/pki/CA/certs/httpd.crt root@192.168.142.135:/etc/httpd/ssl

技術分享圖片

證書成功發放

  4.吊銷證書  

  **首次吊銷時需要操作** echo 01 > /etc/pki/CA/crlnumber

  

    在client獲取要吊銷的證書的serial編號 openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

    在CA server端對比檢驗 上述信息是否與 /etc/pki/CA/index.txt 文本中信息一致;

    CA server操作吊銷證書:

openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

    更新證書吊銷列表: openssl ca -gencrl -out THISCA.crl

至此私有CA發放完成, 註意此CA僅在互相任何的情況下才能生效;


  CA證書的用法在後續隨筆中會繼續提到, 例如 httpd的https服務, 或者nginx的https服務等;


關於CA簽發過程中的後綴:

  • 私鑰 *.key
  • 公鑰 *.pem
  • 待申請證書 *.csr
  • 證書 *.crt -->必須

  

創建私有CA, 加密解密基礎, PKI, SSL