數(shù)字證書就是互聯(lián)網(wǎng)通訊中標志通訊各方身份信息,數(shù)字證書不是通信雙方的身份證書藐石,而是認證機構(gòu)在數(shù)字證書上扣得一個章即供,確認你的身份證書有效,它是由權(quán)威的CA機構(gòu)頒發(fā)用于表示互聯(lián)網(wǎng)上通信雙方的身份于微。個人搭建的自由CA服務(wù)器在互聯(lián)網(wǎng)中是不被認可的逗嫡,但是可以在自己的內(nèi)部網(wǎng)絡(luò)中使用。
一株依、架構(gòu)圖
首先在根CA進行簽署自證證書驱证,然后子CA向根CA申請證書,根CA簽署證書后子CA就可以向其他申請者發(fā)放證書恋腕。此時的子CA服務(wù)器相對于根服務(wù)器來說是申請者抹锄,相對于web服務(wù)器申請者是簽署者,所以子CA是兩個身份荠藤,既是申請者又是簽署者伙单。三者之間的關(guān)系一定要搞清楚,否則在搭建的時候容易出現(xiàn)混亂哈肖。
二吻育、配置文件
配置文件 /etc/pki/tls/openssl.cnf
省略了一部分配置文件只保留了有關(guān)CA的配置。如果服務(wù)器為證書簽署者的身份那么就會用到此配置文件淤井,此配置文件對于證書申請者是無作用的布疼。
####################################################################
[ ca ]
default_ca = CA_default # 默認的CA配置摊趾;CA_default指向下面配置塊
####################################################################
[ CA_default ]
dir = /etc/pki/CA # CA的默認工作目錄
certs = $dir/certs # 認證證書的目錄
crl_dir = $dir/crl # 證書吊銷列表的路徑
database = $dir/index.txt # 數(shù)據(jù)庫的索引文件
new_certs_dir = $dir/newcerts # 新頒發(fā)證書的默認路徑
certificate = $dir/cacert.pem # 此服務(wù)認證證書,如果此服務(wù)器為根CA那么這里為自頒發(fā)證書
serial = $dir/serial # 下一個證書的證書編號
crlnumber = $dir/crlnumber # 下一個吊銷的證書編號
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem# CA的私鑰
RANDFILE = $dir/private/.rand # 隨機數(shù)文件
x509_extensions = usr_cert # The extentions to add to the cert
name_opt = ca_default # 命名方式游两,以ca_default定義為準
cert_opt = ca_default # 證書參數(shù)严就,以ca_default定義為準
default_days = 365 # 證書默認有效期
default_crl_days= 30 # CRl的有效期
default_md = sha256 # 加密算法
preserve = no # keep passed DN ordering
policy = policy_match #policy_match策略生效
# For the CA policy
[ policy_match ]
countryName = match #國家;match表示申請者的申請信息必須與此一致
stateOrProvinceName = match #州器罐、省
organizationName = match #組織名梢为、公司名
organizationalUnitName = optional #部門名稱;optional表示申請者可以的信息與此可以不一致
commonName = supplied
emailAddress = optional
# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ] #由于定義了policy_match策略生效轰坊,所以此策略暫未生效
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
三铸董、目錄結(jié)構(gòu)圖
我在搭建CA服務(wù)器時就是因為對目錄結(jié)構(gòu)不清晰,導(dǎo)致搭建失敗肴沫。所以在搭建之前要把最重要兩個目錄結(jié)構(gòu)搞清楚粟害。
- 根CA服務(wù)器:因為只有CA服務(wù)器的角色,所以用到的目錄只有
/etc/pki/CA
- 子CA服務(wù)器:因為既充當證書簽署者颤芬,又充當證書申請者的角色悲幅。所以兩個目錄都有用到。子CA服務(wù)器是最容易出錯的地方站蝠。所以要時刻保持頭腦清醒
- web服務(wù)器:只是證書申請者的角色汰具,所以用到的目錄只有
/etc/pki/tls
四、步驟
- 根CA生成自己的私鑰菱魔,生成自簽名證書
- 子CA生成自己的私鑰留荔、證書申請文件,將證書申請文件發(fā)送給根CA請求根CA簽署證書澜倦。(此時子CA的身份為申請者)
- 子CA拿到根CA簽署的證書文件聚蝶,修改配置文件后,可以向其他申請者簽署證書(此時子CA為簽署者)
- web服務(wù)器藻治,生成自己的私鑰碘勉、證書申請文件,將證書申請根文件發(fā)送給子CA請求子CA簽署證書桩卵。
五验靡、實例過程
1.根CA搭建
- 創(chuàng)建所需要的文件
touch /etc/pki/CA/index.txt #生成證書索引數(shù)據(jù)庫文件
echo 01 > /etc/pki/CA/serial #指定第一個頒發(fā)證書的序列號
- 在根CA服務(wù)器上創(chuàng)建密鑰,密鑰的位置必須為
/etc/pki/CA/private/cakey.pem
吸占,這個是openssl.cnf中指定的路徑晴叨,只要與配置文件中指定的匹配即可。
- 根CA自簽名證書矾屯,根CA是最頂級的認證機構(gòu)兼蕊,沒有人能夠認證他,所以只能自己認證自己生成自簽名證書件蚕。
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem -days 7300
# -new: 生成新證書簽署請求
# -x509: 專用于CA生成自簽證書
# -key: 生成請求時用到的私鑰文件
# -days n:證書的有效期限
# -out /PATH/TO/SOMECERTFILE: 證書的保存路徑
/etc/pki/CA/cacert.pem就是生成的自簽名證書文件孙技,使用sz工具將他導(dǎo)出到windows機器中产禾。然后雙擊安裝此證書到受信任的根證書頒發(fā)機構(gòu)。
2.子CA搭建
- 創(chuàng)建子CA的私鑰
[root@subca.centos9.top]$(umask 066; openssl genrsa -out /etc/pki/tls/private/subca.centos9.top.key)
Generating RSA private key, 1024 bit long modulus
.++++++
.....................++++++
e is 65537 (0x10001)
- 子CA生成證書申請文件牵啦;
[root@subca.centos9.top]$openssl req -new -key /etc/pki/tls/private/subca.centos9.top.key -out /etc/pki/tls/subca.centos9.top.csr
# -key /etc/pki/tls/private/subca.centos9.top.key 指定私鑰的路徑
- 將申請文件復(fù)制到根CA目錄下亚情,請求根CA簽署證書
[root@subca.centos9.top]scp /etc/pki/tls/subca.centos9.top.csr 10.0.0.57:/etc/pki/CA/certs/
subca.centos9.top.csr 100% 660 0.6KB/s 00:00
#使用scp命令將文件復(fù)制到 10.0.0.57:/etc/pki/CA/certs/目錄下
- 在根CA服務(wù)器下,簽署子CA的證書哈雏。
[root@CA.aubin.red]$cd /etc/pki/CA/certs
[root@CA.aubin.red]$openssl ca -in subca.centos9.top.csr -out subca.centos9.top.crt -days 3650
# -in 指定傳入的傳入申請文件
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 119 (0x77)
Validity
Not Before: Sep 10 04:02:04 2017 GMT
Not After : Sep 8 04:02:04 2027 GMT
Subject:
countryName = CN
stateOrProvinceName = HeBei
organizationName = subca
organizationalUnitName = opt
commonName = subca.centos9.top
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
2B:81:EE:06:D7:12:45:5B:65:99:66:BE:52:DB:57:4B:39:ED:BF:02
X509v3 Authority Key Identifier:
keyid:66:71:6E:40:3D:29:2C:70:5B:35:EB:69:4B:F8:BD:AB:92:21:1A:C2
Certificate is to be certified until Sep 8 04:02:04 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
#核對信息后y確認
1 out of 1 certificate requests certified, commit? [y/n]y #y確認后證書文件生成
Write out database with 1 new entries
Data Base Updated
- 將簽署好的證書發(fā)回給子CA服務(wù)器,并改名為cacert.pem;
/etc/pki/CA/cacert.pem 為子CA服務(wù)器中openssl.cnf配置文件中的certificate指定的路徑楞件。
[root@CA.aubin.red]$scp subca.centos9.top.crt 10.0.0.56:/etc/pki/CA/cacert.pem
root@10.0.0.56's password:
/root/.bashrc: line 45: alias: /etc/sysconfig/network-scripts/ifcfg-ens33: not found
subca.centos9.top.crt 100% 3704 3.6KB/s 00:00
再次將證書傳到windows電腦中,雙擊查看此證書裳瘪,可以看到是ca.aubin.red頒發(fā)給subca.centos9.top的證書土浸。顯示此證書是正常的可用的前提是要將之前的證書安裝好可信的根證書路徑。
同時也將子CA的證書安裝到電腦中后彭羹,子CA就可以給其他申請者簽署證書了黄伊。
- 子CA要能給別人簽署證書,那么還要生成自己的CA私鑰存放在/etc/pki/CAprivate/cakey.pem,這個文件路徑也是在openssl.cnf中指定的派殷。當然也可以使用之前生成的私鑰復(fù)制一份改名后放到此路徑即可.
[root@subca.centos9.top]$cp /etc/pki/tls/private/subca.centos9.top.key /etc/pki/CA/private/cakey.pem
- 最后一步創(chuàng)建所需要的文件还最,子CA搭建完成,子CA可以給其他人簽署證書了。
touch /etc/pki/CA/index.txt #生成證書索引數(shù)據(jù)庫文件
echo 01 > /etc/pki/CA/serial #指定第一個頒發(fā)證書的序列號
web服務(wù)器向子CA申請簽署證書
- 申請第一步生成密鑰
[root@shuaiguoxia tls]# (umask 066; openssl genrsa -out /etc/pki/tls/private/www.shuaiguoxia.com.key 2048)
-
第二步生成申請文件
紅框中的為命令毡惜,黃色框中的為注意事項拓轻。國家與省必須與子CA配置文件的的規(guī)則匹配
上傳申請文件,請求子CA簽署
[root@shuaiguoxia tls]# scp www.shuaiguoxia.com.csr 10.0.0.56:/etc/pki/CA/private/
root@10.0.0.56's password:
/root/.bashrc: line 45: alias: /etc/sysconfig/network-scripts/ifcfg-ens33: not found
www.shuaiguoxia.com.csr 100% 1017 1.0KB/s 00:00
-
子CA確認紅色框中信息后虱黄,兩次y確認簽署證書悦即。然后將證書返回給www服務(wù)器即可
-
將證書傳入windwos電腦,雙擊點開可以查看到完整的證書鏈橱乱。
常見錯誤
- wrong number of fields on line 1 (looking for field 6, got 1, '' left)
原因是/etc/pki/CA/index.txt 文件不為空,可能之前有過其他信息粱甫。注意是0字節(jié)泳叠,不然會報出一個錯誤。 - unable to open '/etc/pki/CA/index.txt'
原因是此文件不存在茶宵,touch /etc/pki/CA/index.txt
創(chuàng)建一個空文件即可