Openssl搭建私有CA認證

概述


CA英文全稱Certification Authority,即數字證書認機構。從廣義上來說,CA是負責發放和管理數字證書的權威機構,并作為用戶數字認證中受信任的第三方,承擔公鑰體系(PKI)中公鑰的合法性檢驗的責任,在互聯網上,實現用戶與用戶、用戶與企業之間的數字身份認證。

本文通過使用openssl進行搭建私有CA認證體系,從而簡單地了解CA的認證過程。搭建私有CA,可以實現企業內部認證加密。

環境部署


本文環境基于 CentOS 6.8

wKiom1fijmuytQIkAALGFevsae0320.png

步驟流程


wKioL1fiQSTTTQCVAAD7ba3OYjY090.png

具體操作


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不影響全局

wKiom1fiUZmwQ-9SAAAjQjXFTMo173.png

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). 密碼:#將申請文件加密

wKioL1fiVE3xut2pAACOv3GLqbA179.png

 

2.3. 將httpd.csr發給CA服務器

[root@IP160-C6-httpd ssl]# >>scp httpd.csr root@10.10.20.200:/root/pem
    #測試環境中使用scp傳輸文件到CA服務器

wKioL1fiX-6gZOAQAAAVgBlPsO0503.png

 

3. 服務器配置

3.1.  生成自己的密鑰對

CA服務器的配置目錄初始環境

wKioL1fiZ8WgpBhaAAAYWYcGKOU672.png

我們進入 /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 )

wKiom1fiaSqyvzucAAAvV5sKLKo937.png

 

 如果想查看公鑰:(非必要步驟)

[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  簽署證書有效期。

wKioL1fibMOBOZPvAABgRgePi1I350.png

 

3.3. 創建所需文件,指定證書編號初始值

完成 3.2. 后,此時配置目錄下的狀態:

wKiom1fibVjCQqQUAAAa_RZ2rso748.png

我們還需要新建部分初始文件,以保證CA服務正常運行

[root@IP200-C6-CA CA]# >>touch index.txt serial crlnumber
[root@IP200-C6-CA CA]# >>echo 01 > serial
  #設置序號從01開始

wKioL1fib8iAvHPFAAAq-V_c-1E269.png

到此,我們已經完成了搭建根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:

Openssl搭建私有CA認證

再次運行簽署證書命令:

簽署過程需要交互回答兩個問題

Sign the certificate? [y/n]:y   #簽署確認
1 out of 1 certificate requests certified, commit? [y/n]y   #寫入證書數據庫

Openssl搭建私有CA認證

我們看到證書已經在CA服務器上完成簽署,數據庫也記錄在案了。

Openssl搭建私有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

 Openssl搭建私有CA認證

至此,我們完成了整個CA搭建,客戶端證書認證的過程。

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

(1)
昭其昭其
上一篇 2016-09-21 22:19
下一篇 2016-09-22 09:17

相關推薦

  • N29第一周作業:初識Linux系統

    1、描述計算機的組成及其功能。
    2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別。
    3、描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述。
    4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述。
    5、如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的。
    6、請羅列Linux發行版的基礎目錄名稱命名法則及功用規定

    2018-03-04
  • bash

    1.  bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示           狀態返回值:            &nbsp…

    Linux干貨 2016-11-06
  • 從Code Review 談如何做技術

    (這篇文章緣由我的微博,我想多說一些,有些雜亂,想到哪寫到哪) 這兩天,在微博上表達了一下Code Review的重要性。因為翻看了阿里內部的Review Board上的記錄,從上面發現Code Review做得好的是一些比較偏技術的團隊,而偏業務的技術團隊基本上沒有看到Code Review的記錄。當然,這并不能說沒有記錄他們就沒有做Code Review…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班21期第6周作業

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; %s/^[[:space:]]\+/#& 2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符; %s/^[[:space:]]\+/ …

    Linux干貨 2016-12-05
  • shell腳本4——特殊循環和函數

    循環的特殊用法: 1、while循環的特殊用法之遍歷文件的每一行 while read line; do     循環體 done < /PATH/FROM/SOMEFILE 依次讀取/PATH/FROM/SOMEFILE文件中的每一行,將每一行賦值給變量line…

    Linux干貨 2016-08-21
  • Linux下which、locate、find 命令查找文件

    在Linux下我們經常要查找某個文件,但是又不記得文件位置,可以使用一些命令來搜索,目前接觸到的文件命令有以下幾個 which 查看可執行文件的位置 locate 基于數據庫查找文件位置 find 實時搜索文件 1、 Which   語法:which 可執行二進制文件名稱   Which是通過PATH環境變量查找文件的,在PATH 指定的…

    2017-08-14

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 12:09

    寫的很詳細,圖片講解的也很細膩,贊一個。

欧美性久久久久