概述
CA英文全稱Certification Authority,即數字證書認機構。從廣義上來說,CA是負責發放和管理數字證書的權威機構,并作為用戶數字認證中受信任的第三方,承擔公鑰體系(PKI)中公鑰的合法性檢驗的責任,在互聯網上,實現用戶與用戶、用戶與企業之間的數字身份認證。
本文通過使用openssl進行搭建私有CA認證體系,從而簡單地了解CA的認證過程。搭建私有CA,可以實現企業內部認證加密。
環境部署
本文環境基于 CentOS 6.8
步驟流程
具體操作
1. CA的配置文件
首先我們可以查看 /etc/pki/tls/openssl.cnf 的文件,找到以下內容了解CA的配置信息
####################################################### [ ca ] default_ca = CA_default # The default ca section ####################################################### [ CA_default ] dir = /etc/pki/CA # CA的工作目錄 certs = $dir/certs # 證書存放位置 crl_dir = $dir/crl # 吊銷列表 database = $dir/index.txt # 索引文件數據庫,本文件自動生成 #unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $dir/newcerts # 默認新簽署證書存放目錄. certificate = $dir/cacert.pem # CA自己的證書 serial = $dir/serial # 當前發出去的證書的序列號 crlnumber = $dir/crlnumber # 吊銷的證書序列號 # must be commented out to leave a V1 CRL crl = $dir/crl.pem # 當前正在使用的CRL (證書列表文件) private_key = $dir/private/cakey.pem# CA自己的私鑰(建議限制權限600 ) RANDFILE = $dir/private/.rand # 隨機數種子 x509_extensions = usr_cert # 用戶擴展
2. 客戶端配置
2.1. 在客戶端生成密鑰,建議保存至應用此證書的服務的配置文件目錄下:
(演示假設證書應用于 httpd 服務,按建議,我們到 httpd 的配置文件目錄下創建文件)
[root@IP160-C6-httpd ~]# >>mkdir /etc/httpd/ssl [root@IP160-C6-httpd ~]# >>cd /etc/httpd/ssl [root@IP160-C6-httpd ~]# >>( umask 077 ; openssl genrsa -out httpd.key 1024 ) # 建議:子shell中更改umask,新建文件權限即為600,子shell的umask不影響全局
2.2. 生成證書簽署請求:
Tips: CSR是Certificate Signing
Request的英文縮寫,即證書請求文件,也就是證書申請者在申請數字證書時由CSP(加密服務提供者)在生成私鑰的同時也生成證書請求文件,證書申請
者只要把CSR文件提交給證書頒發機構后,證書頒發機構使用其根證書私鑰簽名就生成了證書公鑰文件,也就是頒發給用戶的證書。來自<http://baike.baidu.com/link?url=TD6KI4WvcgOHWfxuocHFvD54VHQIO5aAxn4B8k3cUg2a_RMmoK4CcktqsmdhRMVLj7cv4pXnjA5p8NdgBEsoyq>
生成
[root@IP160-C6-httpd ssl]# >>openssl req -new -key httpd.key -out httpd.csr #通過加載httpd.key生成一個新請求,保存為httpd.csr
創建過程中需要進行交互式填寫信息:()
1). 國家:CN 兩位國家代碼(可以在/etc/pki/tls/openssl.cnf設置默認值)
2). 省份:beijing
3). 市: beijing
4). 公司:Client.Co
5). 部門:RD
6). 名字:www.client.com #非常重要,
7). 聯系:test@client.com #測試使用
8). 密碼:#將申請文件加密
2.3. 將httpd.csr發給CA服務器
[root@IP160-C6-httpd ssl]# >>scp httpd.csr root@10.10.20.200:/root/pem #測試環境中使用scp傳輸文件到CA服務器
3. 服務器配置
3.1. 生成自己的密鑰對
CA服務器的配置目錄初始環境
我們進入 /etc/pki/CA/ 目錄生成私鑰:(留意當前目錄,與相對路徑)
[root@IP200-C6-CA ~]# >>cd /etc/pki/CA/ [root@IP200-C6-CA CA]# >>tree -C . [root@IP200-C6-CA CA]# >>( umask 077 ; openssl genrsa -out private/cakey.pem 2048 )
如果想查看公鑰:(非必要步驟)
[root@IP200-C6-CA CA]# >>openssl rsa -in private/cakey.pem -pubout -text -noout
3.2. 生成自簽證書
[root@IP200-C6-CA CA]# >>openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655 # -new 創建一個認證申請; # -x509 生成一份 X.509 證書,只有自簽署時候才需要此選項,簡化(申請-簽署)過程; # -key 指明私鑰文件; # -out 輸出證書文件; # -days 簽署證書有效期。
3.3. 創建所需文件,指定證書編號初始值
完成 3.2. 后,此時配置目錄下的狀態:
我們還需要新建部分初始文件,以保證CA服務正常運行
[root@IP200-C6-CA CA]# >>touch index.txt serial crlnumber [root@IP200-C6-CA CA]# >>echo 01 > serial #設置序號從01開始
到此,我們已經完成了搭建根CA服務器的過程。
3.4. 簽署client的證書
CA服務器簽署客戶端證書的命令很簡單:
[root@IP200-C6-CA CA]# >>openssl ca -in ~/pem/httpd.csr -out ~/pem/httpd.crt
此時我們運行會報錯:↓↓↓↓↓↓↓
[root@IP200-C6-CA CA]# >>ll ~/pem/httpd.csr -rw-r--r--. 1 root root 761 Sep 21 17:49 /root/pem/httpd.csr [root@IP200-C6-CA CA]# >>openssl ca -in ~/pem/httpd.csr -out ~/pem/httpd.crt Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok The stateOrProvinceName field needed to be the same in the CA certificate (shanghai) and the request (beijing)
我們在查看 /etc/pki/tls/openssl.cnf 的文件,發現這一段內容:
原因是CA配置默認啟用的是 policy_match ,限制客戶端注冊信息部分需要匹配CA服務器。
# A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional ####################################################################
所以我們只需修改為 policy_anything:
再次運行簽署證書命令:
簽署過程需要交互回答兩個問題
Sign the certificate? [y/n]:y #簽署確認 1 out of 1 certificate requests certified, commit? [y/n]y #寫入證書數據庫
我們看到證書已經在CA服務器上完成簽署,數據庫也記錄在案了。
注:CA服務器吊銷證書:(證書名)
openssl ca -revoke /PATH/TO/SOMEFILE.crt (證書名)
3.5. 回傳已簽署的證書給客戶端
[root@IP200-C6-CA CA]# >>scp ~/pem/httpd.crt root@10.10.20.160:/etc/httpd/ssl
至此,我們完成了整個CA搭建,客戶端證書認證的過程。
原創文章,作者:昭其,如若轉載,請注明出處:http://www.www58058.com/48411
寫的很詳細,圖片講解的也很細膩,贊一個。