一、OpenSSL:CA默認配置信息
openssl 配置文件:/etc/pki/tls/openssl.cnf
openssl.cnf部分配置信息和CA相關的配置文件,可修改
####################################################################
[ ca ]
default_ca = CA_default # The default ca section 指定默認CA是CA_default
####################################################################
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept CA的公共目錄 定義一個dir變量
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自己的證書,根CA是自己給自己頒發的證書,子CA是由上級CA頒發的證書
serial = \$dir/serial # The current serial number 當前序列號,是一個16進制,數值要放在此文件夾中,但是表示的是頒發的下一個證書的編號
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 證書的私鑰
RANDFILE = \$dir/private/.rand # private random number file 隨機數
x509_extensions = usr_cert # The extentions to add to the cert x509
\# Comment out the following two lines for the "traditional"\# (and highly broken) format.
name_opt = ca_default # Subject Name options 命令方式是由ca_default決定的
cert_opt = ca_default # Certificate field options
\# Extension copying option: use with caution.
\# copy_extensions = copy
\# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
\# so this is commented out by default to leave a V1 CRL.
\# crlnumber must also be commented out to leave a V1 CRL.
\# crl_extensions = crl_ext
default_days = 365 # how long to certify for 證書的有效期默認是365天,可以修改
default_crl_days= 30 # how long before next CRL crl 默認有效期是30天
default_md = sha256 # use SHA-256 by default preserve = no # keep passed DN ordering
\# 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 策略是policy_match
\# For the CA policy
[ policy_match ] 紀錄的是CA搭建的時候的以及客戶端申請CA證書的時候信息匹配程度
countryName = match 國家
stateOrProvinceName = match 美國的州 我們國家應該是省
organizationName = match 公司
organizationalUnitName = optional 公司部門
commonName = supplied 通用名,主機名,給網站域名用的
emailAddress = optional 郵件地址
注意: match 必須匹配 optional 可有可無,可以不一樣 supplied 必須添加,可以不一樣
\# 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 = optional12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
####################################################################
二、OpenSSL:創建私有證書籤發機構CA步驟
1.生成私鑰
cd /etc/pki/CA/
umask 066;openssl genrsa -out private/cakey.pem -des3 2048)
umask #指定文件的權限
genrsa #私鑰加密的算法
-out private/cakey.pem #生成的私鑰存放路徑,這裏必須是這個路徑,如果要改成其他路徑,需要修改配置/etc/pki/CA -des3 #加密算法,後面跟的位數範圍是 1024 到 4096 我們這裏選擇2048 1234567
如上圖,輸入口令加密私鑰。
如上圖查看生成的私鑰文件catkey.pem
2. 利用私鑰生成自簽名證書
cd /etc/pki/CA
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
-new:#生成新證書籤署請求;-x509:#生成自籤格式證書,專用於創建私有CA時;-key:#生成請求時用到的私有密鑰文件路徑;-out:#生成的請求文件路徑;如果自籤操作將直接生成簽署過的證書;-days:#證書的有效時長,單位是day;12345678910111213
填寫證書基本信息
Country Name (2 letter code) [XX]: # 兩個字符表示的國家代碼,CN爲中國
State or Province Name (full name) []: # 省或洲的完整名稱
Locality Name (eg, city) [Default City]: # 所在位置的名稱(默認爲城市)
Organization Name (eg, company) [Default Company Ltd]: # 組織機構名稱(默認爲公司)
Organizational Unit Name (eg, section) []: # 組織機構單元名稱(eg.部門)
Common Name (eg, your name or your server’s hostname) []: # 持有者名或者所在服務器主機名(即域名)
Email Address []: # 管理員郵件地址,可以省略
查看自簽名證書
在xshell中執行命令
sz cacert.pem把數字證書cacert.pem 導入到Windows系統中可以看一下效果123
如上圖,因爲我們創建的自簽名證書,所以【頒發者】和【頒發給】後面跟的都是同一主機名ca.zhangym.com。時間也是我們設置的7300天,大約20年。還可以查看證書路徑,詳細信息等等,這裏不再截圖展示了。
三、OpenSSL:子CA證書申請和根CA頒發 證書給子CA
1. 子CA生成證書請求
子CA生成私鑰
(umask 066;openssl genrsa -out private/cakey.pem -des3 2048)1
openssl req -new -key private/cakey.key -out subca.csr12
證書信息填寫
將證書請求文件傳輸給根CA
openssl ca -in subca.csr -out certs/subca.crt #可以加上期限(-days xxxx),這裏我選擇配置文件默認期限1
2. 根CA簽署證書,並將證書頒發給請求者
cd /etc/pki/CA #注意路徑,進入CA目錄下操作touch index.txt #證書數據庫,存放證書的狀態,編號等openssl ca -in subca.csr -out certs/subca.crt 123
可以查看到/etc/pki/CA/certs/目錄下生成的頒發的證書subca.crt文件
scp certs/subca.crt 172.18.24.6:/etc/pki/CA/cacert.pem1
注意:這裏要把subca.crt文件的後綴名改成 .pem,配置文件規定,CA要有cacert.pem文件纔可以頒發證書。
自此根CA給子CA頒發的證書cacert.pem就生成了,子CA就可以在相應的服務中使用證書了。
四、OpenSSL:客戶端申請證書和子CA頒發證書
1. 客戶端生成私鑰
進入到/etc/pki/tls目錄下,這裏把客戶端生成的私鑰存放在tls目錄下的private目錄中,可以自行選擇存放路徑,這裏沒有嚴格要求路徑
cd /etc/pki/tls
(umask 066; openssl genrsa -out private/app.key -des3 2048)123
如上圖,openssl命令參數跟一步驟的生成私鑰一樣,這裏不做過多的闡述。
2. 在需要使用證書的主機生成證書請求
生成私鑰
openssl req -new -key private/app.key -out app.csr#這裏跟步驟一生成自簽名文件一樣,不過少了-x509,加上-x509表示自簽名,我們這裏是申請證書123
生成app.csr證書請求文件
openssl req -new -key private/app.key -out app.csr12
填寫申請證書信息,如下圖
將證書請求文件傳輸給子CA
2. 子CA簽署證書,並將證書頒發給請求者
cd /etc/pki/CA #注意路徑,進入CA目錄下操作touch index.txt #證書數據庫,存放證書的狀態,編號等echo 00 > serial #數值要放在此文件夾中,但是表示的是頒發的下一個證書的編號,00表示下一個數字證書的編號是00,可以自己自己指定一個值123
頒發證書
openssl ca -in app.csr -out certs/app.crt -days 100 #這裏期限設置爲100天1
**注意:默認證書請求和子CA上的,國家、省、公司名稱三項必須一致,如果填寫不一致,可能會報錯,需要從會客戶端從新生成app.csr文件 。如果我們修改了配置,把policy-math改成policy-anything,這個時候所有的信息都可以不一樣,其實那些信息一樣,那些信息不一樣,都是可以通過修改配置文件的策略來自定義的。我們這裏選擇默認,感興趣的同學可以試試。
**
正確操作後,會有兩個選擇,都選擇Y即可。
查看index文件和serial文件
把頒發的證書發送給客戶端
證書在客戶端服務裏面的使用不是這裏的重點,不在這裏詳講。
同時我們可以修改CA端的/etc/pki/CA/目錄下的index.txt.attr文件,unique_subject = yes改成unique_subject = no ,可以頒發兩個相同的證書。
自此,子CA頒發給客戶端的數字證書app.crt 就生成了,客戶端就可以在相應的服務中使用數字證書了。
五、OpenSSL:吊銷證書
1. 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致,吊銷證書:
openssl ca -revoke newcerts/01.pem1
吊銷證書後,可以查看index.txt文件下的信息,R表示頒發的無效,說明吊銷成功,如果顯示V,則表示證書在生效中
2. 指定第一個吊銷證書的編號
注意:第一次更新證書吊銷列表前,才需要執行
echo 01 > /etc/pki/CA/crlnumber1
3.更新證書吊銷列表
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem1
吊銷證書crl.pem就生成了