Linux數(shù)據(jù)加密和數(shù)字證書認(rèn)證

??在互聯(lián)網(wǎng)中數(shù)據(jù)被非法竊取、篡改經(jīng)常發(fā)生,那么我們?cè)撊绾蝸矸婪哆@些安全問題呢。下面我將介紹幾種在Linux中常用的數(shù)據(jù)加密以及傳輸過程中的身份認(rèn)證的方法。

1. 對(duì)稱加密

1. 特性:

1. 加密、解密使用同一個(gè)密鑰,效率高
2. 將原始數(shù)據(jù)分割成固定大小的塊,逐個(gè)進(jìn)行加密

2.功能

1. 加密數(shù)據(jù)

3. 缺陷:

1. 密鑰過多
2. 密鑰分發(fā)
3. 數(shù)據(jù)來源無法確認(rèn)

4. 算法

1. DES     : 是一種使用密鑰加密的塊算法,采用56位加密算法。
2. 3DES    : 三重?cái)?shù)據(jù)加密算法,進(jìn)行三次DES加密。
3. AES     : 高級(jí)加密標(biāo)準(zhǔn)目前對(duì)稱加密中最常用的算法之一,采用128、192、256、512位算法。
4. Blowfish: 是一個(gè)64位分組及可變密鑰長度的對(duì)稱密鑰分組密碼算法。
6. IDEA    : 國際數(shù)據(jù)加密算法,采用128位加密算法。
7. CAST-128: 是類似于DES的置換組合網(wǎng)路加密系統(tǒng),是一種12或16循環(huán)的Feistel密碼,塊長度是64位,密碼長度最大128位。

5. 示例,在Linux使用gpg軟件

1. GPG是一個(gè)由GNU(自由軟件基金會(huì))發(fā)布的一款加密和數(shù)字簽名的免費(fèi)工具。軟件包名gnupg2 。
2. 常用選項(xiàng)
命令 注釋
-b, --detach-sign 生成一份分離的簽名
-e, --encrypt 加密數(shù)據(jù)
-c, --symmetric 使用對(duì)稱加密
-d, --decrypt 解密數(shù)據(jù)
--verify 驗(yàn)證簽名
-k, --list-keys 列出密鑰和簽名
--check-sigs 列出并檢查密鑰簽名
--fingerprint 列出密鑰和指紋
-K, --list-secret-keys 列出私鑰
--gen-key 生成一副新的密鑰對(duì)
--delete-keys 從公鑰鑰匙環(huán)里刪除密鑰
--delete-secret-keys 從私鑰鑰匙環(huán)里刪除密鑰
--sign-key 為某把密鑰添加簽名
--lsign-key 為某把密鑰添加本地簽名
--edit-key 編輯某把密鑰或?yàn)槠涮砑雍灻?/td>
--gen-revoke 生成一份吊銷證書
--export 導(dǎo)出密鑰
--import 導(dǎo)入/合并密鑰
-o, --output FILE 將輸出寫入到FILE
-v, --verbose 詳細(xì)模式
[root@CentOS7.3 ~]#echo "Symmetric encryption" > file        #創(chuàng)建一個(gè)文件
[root@CentOS7.3 ~]#ll file                                   #查看文件的屬性
-rw-r--r--. 1 root root 21 Jul 16 23:50 file
[root@CentOS7.3 ~]#gpg -c file                               #gpg -c使用對(duì)稱加密,會(huì)創(chuàng)建一個(gè)file.gpg的文件。需要輸入兩次密碼,如圖1.
[root@CentOS7.3 ~]#ll file*                                  #查看所有以file開頭的文件
-rw-r--r--. 1 root root 21 Jul 16 23:50 file            
-rw-r--r--. 1 root root 64 Jul 16 23:50 file.gpg             #加密生成的文件,文件大小比原文件大了3倍  
[root@CentOS7.3 ~]#cat file.gpg                              #查看加密文件的內(nèi)容
Ro+@q!?P|${<?z??ob\$靰`X%PaqJjp[root@CentOS7.3 ~]#           #可以看到加密過的文件內(nèi)容是一堆亂碼
[root@CentOS7.3 ~]#scp file.gpg root@192.168.166.129:/root/  #把文件傳到另外的一臺(tái)計(jì)算機(jī)

圖1


image.png
[root@CentOS6.9 ~]#ls                                                       #查看當(dāng)前目錄下的文件
anaconda-ks.cfg  bin  -d  file.gpg  install.log  install.log.syslog  
[root@CentOS6.9 ~]#cat file.gpg                                             #查看file.gpg文件的內(nèi)容
Ro+@q!?P|${<?z??ob\$?`X%PaqJjp[root@CentOS6.9 ~]#
[root@CentOS6.9 ~]#gpg -o file -d file.gpg                                  #使用密碼解密文件,通過file.gpg文件生成file文件
gpg: CAST5 加密過的數(shù)據(jù)                                                     #gpg默認(rèn)采用的是CAST-128算法
can't connect to `/root/.gnupg/S.gpg-agent': 拒絕連接
gpg: 以 1 個(gè)密碼加密
gpg: 警告:報(bào)文未受到完整的保護(hù)
[root@CentOS6.9 ~]#ls                                                       #再次查看當(dāng)前目錄下的文件
anaconda-ks.cfg  bin  -d  file  file.gpg  install.log  install.log.syslog   #file文件已經(jīng)生成
[root@CentOS6.9 ~]#cat file                                                 #查看file文件的內(nèi)容
Symmetric encryption                                                        #解密成功

2. 非對(duì)稱加密

1. 特點(diǎn),采用公鑰和私鑰加密和解密

1. 公鑰:公開給所有人
2. 私鑰:自己留存,必須保證其私密性
3. 用公鑰加密數(shù)據(jù),只能使用與之配對(duì)的私鑰解密;反之亦然

2. 功能:

1. 數(shù)字簽名:主要在于讓接收方確認(rèn)發(fā)送方身份
2. 對(duì)稱密鑰交換:發(fā)送方用對(duì)方的公鑰加密一個(gè)對(duì)稱密鑰后發(fā)送給對(duì)方
3. 數(shù)據(jù)加密:適合加密較小數(shù)據(jù)

3. 缺點(diǎn):密鑰長, 加密解密效率低下

4. 算法:

1. RSA     :RSA是目前最有影響力的公鑰加密算法,安全性依賴于大數(shù)分解。(數(shù)據(jù)加密,數(shù)字簽名) 
2. DSA     :是Schnorr和ElGamal簽名算法的變種,基于整數(shù)有限域離散對(duì)數(shù)難題,一個(gè)重要特點(diǎn)是兩個(gè)素?cái)?shù)
             公開,這樣,當(dāng)使用別人的p和q時(shí),即使不知道私鑰,你也能確認(rèn)它們是否是隨機(jī)產(chǎn)生的,還是
             作了手腳,RSA算法卻做不到。(數(shù)字簽名)
3. ELGamal : 公鑰密碼體制和橢圓曲線加密體,其安全性依賴于計(jì)算有限域上離散對(duì)數(shù)。(數(shù)據(jù)加密,數(shù)字簽)

5. 示例,使用gpg工具

  1. 創(chuàng)建密鑰
請(qǐng)選擇您要使用的密鑰種類:                                   #選擇算法
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (僅用于簽名)
   (4) RSA (僅用于簽名)
您的選擇? 1                                                 #選擇默認(rèn)的RSA算法
RSA 密鑰長度應(yīng)在 1024 位與 4096 位之間。                     #提示密鑰的長度
您想要用多大的密鑰尺寸?(2048)1024                           #為了實(shí)驗(yàn)快速生成,這里選擇最短的1024
您所要求的密鑰尺寸是 1024 位
請(qǐng)?jiān)O(shè)定這把密鑰的有效期限。                                   #選擇密鑰有效期
         0 = 密鑰永不過期
      <n>  = 密鑰在 n 天后過期
      <n>w = 密鑰在 n 周后過期
      <n>m = 密鑰在 n 月后過期
      <n>y = 密鑰在 n 年后過期
密鑰的有效期限是?(0) 1w                                     #這里選擇了1周
密鑰于 2017年07月24日 星期一 19時(shí)32分25秒 CST 過期           #提示密鑰過期時(shí)間
以上正確嗎?(y/n)y                                           #Y確定設(shè)置
 
真實(shí)姓名:admin                                              #設(shè)置密鑰的名稱為admin
電子郵件地址:
注釋:
您選定了這個(gè)用戶標(biāo)識(shí):                                     
    “admin”

更改姓名(N)、注釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?o  #選擇“O”確定
您需要一個(gè)密碼來保護(hù)您的私鑰。                             #提示設(shè)置密鑰的密碼,可以不設(shè)置。

can't connect to `/root/.gnupg/S.gpg-agent': 拒絕連接
我們需要生成大量的隨機(jī)字節(jié)。這個(gè)時(shí)候您可以多做些瑣事(像是敲打鍵盤、移動(dòng)     #提示做一些動(dòng)作來生成隨機(jī)字節(jié)。
鼠標(biāo)、讀寫硬盤之類的),這會(huì)讓隨機(jī)數(shù)字發(fā)生器有更好的機(jī)會(huì)獲得足夠的熵?cái)?shù)。

我們需要生成大量的隨機(jī)字節(jié)。這個(gè)時(shí)候您可以多做些瑣事(像是敲打鍵盤、移動(dòng)                            
鼠標(biāo)、讀寫硬盤之類的),這會(huì)讓隨機(jī)數(shù)字發(fā)生器有更好的機(jī)會(huì)獲得足夠的熵?cái)?shù)。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度數(shù)據(jù)庫
gpg: 密鑰 FAEEA205 被標(biāo)記為絕對(duì)信任
公鑰和私鑰已經(jīng)生成并經(jīng)簽名。

gpg: 正在檢查信任度數(shù)據(jù)庫                                                 
gpg: 需要 3 份勉強(qiáng)信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已簽名:  0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度數(shù)據(jù)庫檢查將于 2017-07-24 進(jìn)行
pub   1024R/FAEEA205 2017-07-17 [有效至:2017-07-24]               
密鑰指紋 = 81D0 2DB4 CEF7 CCCF 15FD  0743 FA42 CDF3 FAEE A205         #密鑰指紋
uid                  admin                                            #密鑰ID
sub   1024R/9486732F 2017-07-17 [有效至:2017-07-24]                  #有效期
  1. 查看密鑰
[root@CentOS6.9 ~]#gpg --list-keys                              #查看密鑰            
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/FAEEA205 2017-07-17 [有效至:2017-07-24]            #公鑰
uid                  admin                                     #密鑰名
sub   1024R/9486732F 2017-07-17 [有效至:2017-07-24]            #私鑰
[root@CentOS6.9 ~]#ls .gnupg/         #生成的公鑰和是私鑰都存放在用戶家目錄的隱藏目錄.gnupg下。
gpg.conf           pubring.gpg   random_seed  S.gpg-agent           #公鑰文件pubring.gpg
private-keys-v1.d  pubring.gpg~  secring.gpg  trustdb.gpg           #私鑰文件secring.gpg
[root@CentOS6.9 ~]#
  1. 發(fā)布公鑰
[root@CentOS6.9 ~]#gpg --export -a -o admin.pubkey                  #導(dǎo)出公鑰到admin.pubkey文件中
[root@CentOS6.9 ~]#cat admin.pubkey                                 #查看導(dǎo)出的公鑰
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.14 (GNU/Linux)

mI0EWWe1EwEEAL1zIy9aO6RL0q8IoxAOWPyjYsX3Kjwj2eVM6RlBmyhuUt+pKp+D
tFW+LWO4EcfvVzqwowkzZNykZBLHAR+2jS5R7AZjH6K8KordEGfeOiY2gfL/4+yA
D2bJXtjNj3/eS+0Z8RVjnKraxCe4Md3nMV0TjcrF37/EuRC13R07U6fpABEBAAG0
BWFkbWluiL4EEwECACgFAllntRMCGwMFCQAJOoAGCwkIBwMCBhUIAgkKCwQWAgMB
Ah4BAheAAAoJEKcVxo/ZTeqPyMcEAJlDJbMVnp+nIBSancDWLwvnsnF6uCouAfOs
6p7TcI+YATIVeRnIagNl+Uj7AasIDvnlxf9dnG3I78lTCjUC66rvG8a4TB7FTwSE
FSJc5G0WfgRRps/dK+JsLsDSC7BV3UTuxMVDXoiOXrPjEQzNcgCNxD6JFlVL2hS+
kM0B9oJjuI0EWWe1EwEEAN0CB8+nhSjbel+vdDz/ivWbIE3PhWKJddA0iPaFhE85
Rm5KrHBv+pe9nYnQ9vjP7c0p/wt+zU6gD2uw11ZQuTPIhJDCnI0Wyat41AY8lidI
DBkOGHf6mFynG0b15X38EcHxcitv4KNjEW0M2BXNvX6hgOJGC4Ojy9p0bIJj+Z95
ABEBAAGIpQQYAQIADwUCWWe1EwIbDAUJAAk6gAAKCRCnFcaP2U3qj+WpA/4qFXi3
rHGEIVATq7lOYdOyVm2+IL+Cb0eWZ+Nyohrim/KEVVsBo41wZpzSSIf61AMTyQAm
Be7MKPi7837rZsVuyITXcaZjcPKGqyAO1SnPhSpfButdF2wGcZVZjVpBH3/SOI4d
zl3MxSuSCTsPWOm36AkDOut39SB1g8BccMXL5Q==
=DFw4
-----END PGP PUBLIC KEY BLOCK-----
[root@CentOS6.9 ~]#scp admin.pubkey root@“主機(jī)ip地址”:/root  #把導(dǎo)出的公鑰文件發(fā)送到另外的一個(gè)主機(jī)上

[root@CentOS7.3 ~]#gpg --import admin.pubkey                 #在另外一臺(tái)主機(jī)上導(dǎo)入公鑰文件
gpg: key D94DEA8F: public key "admin" imported
gpg: Total number processed: 1 
gpg:               imported: 1  (RSA: 1)
[root@CentOS7.3 ~]#gpg -k                                    #查看主機(jī)上所有的密鑰
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/8E5F9DE1 2017-07-17 [expires: 2017-07-24]
uid                  Centos
sub   1024R/55B15E4F 2017-07-17 [expires: 2017-07-24]

pub   1024R/D94DEA8F 2017-07-13 [expires: 2017-07-20]
uid                  admin                                   #導(dǎo)入完成
sub   1024R/3C424201 2017-07-13 [expires: 2017-07-20]

[root@CentOS7.3 ~]#echo "Encryption test" > test             #創(chuàng)建一個(gè)test文件
[root@CentOS7.3 ~]#gpg -r admin -e test   #使用admin的公鑰加密test文件,會(huì)生成一個(gè)后綴為.gpg同名文件
gpg: 3C424201: There is no assurance this key belongs to the named user      

pub  1024R/3C424201 2017-07-13 admin
 Primary key fingerprint: F44F 56A3 E401 F49E C7AB  1ECD A715 C68F D94D EA8F
      Subkey fingerprint: 38C2 6698 2632 E244 903F  4F7C 0122 D29F 3C42 4201
[root@CentOS7.3 ~]#cat test.gpg                           #查看test.gpg文件的內(nèi)容
:?>?£?XQ????^-3R+?5亳Gs$?BtX9?b??q+y|?¢u*B<jR???<.?tnr£b&嬜+??V¥?A1????]^tk?nˉv^??L?W/?ъN{3?*QkN?`*E?[root@CentOS7.3 ~]#gpg -r admin -d test.gpg                     #用admin的公鑰解密文件
gpg: encrypted with 1024-bit RSA key, ID 3C424201, created 2017-07-13
      "admin"
gpg: decryption failed: No secret key                     #無法解密,提示沒有密碼
  
  #把文件從另一臺(tái)主機(jī)上發(fā)送回來
[root@CentOS6.9 ~]#cat test.gpg                          #來查看test.gpg文件的內(nèi)容
:?>?£?XQ????^-3R+?5亳Gs$?BtX9?b??q+y|?¢u*B<jR???<.?tnr£b&嬜+??V¥?A1????]^tk?nˉv^??L?W/?ъN{3?*QkN?`*E
[root@CentOS6.9 ~]#gpg -o test -d test.gpg               #解密test.gpg文件,并把輸出寫入test文件中
您需要輸入密碼,才能解開這個(gè)用戶的私鑰:“admin”
1024 位的 RSA 密鑰,鑰匙號(hào) 3C424201,建立于 2017-07-13 (主鑰匙號(hào) D94DEA8F)
can't connect to `/root/.gnupg/S.gpg-agent': 沒有那個(gè)文件或目錄
gpg: 由 1024 位的 RSA 密鑰加密,鑰匙號(hào)為 3C424201、生成于 2017-07-13
      “admin”
[root@CentOS6.9 ~]#ls                                   #解密完成
admin.pubkey  anaconda-ks.cfg  bin  install.log  install.log.syslog  test  test.gpg
[root@CentOS6.9 ~]#cat test                             #查看一下內(nèi)容
Encryption test

3. 單向散列Hash

1. 特性

1. 將任意數(shù)據(jù)縮小成固定大小的數(shù)值
2. 任意輸入長度的數(shù)據(jù)。
3. 輸出固定長度是加密數(shù)值。
4. 若修改數(shù)據(jù),生成的數(shù)值也會(huì)改變,不會(huì)和原來的數(shù)值產(chǎn)生沖突。
5. 無法從數(shù)值中推算生成數(shù)據(jù),不可逆。

2. 功能

1. 驗(yàn)證數(shù)據(jù)完整性
2. 提高數(shù)字簽名的有效性

3. 常見算法

1. md5    : 把不同長度的數(shù)據(jù)塊進(jìn)行暗碼運(yùn)算成一個(gè)128位的數(shù)值
2. sha1   : 對(duì)任意長度的數(shù)據(jù)運(yùn)算生成一個(gè)160位的數(shù)值
3. sha224 : 對(duì)任意長度的數(shù)據(jù)運(yùn)算生成一個(gè)224位的數(shù)值
4. sha256 : 對(duì)任意長度的數(shù)據(jù)運(yùn)算生成一個(gè)256位的數(shù)值
5. sha384 : 對(duì)任意長度的數(shù)據(jù)運(yùn)算生成一個(gè)384位的數(shù)值
6. sha512 : 對(duì)任意長度的數(shù)據(jù)運(yùn)算生成一個(gè)512位的數(shù)值
7. MAC    :是一種使用密鑰的單向函數(shù),可以用它們?cè)谙到y(tǒng)上或用戶之間認(rèn)證文件或消息,
            常見的是HMAC(用于消息認(rèn)證的密鑰散列)。

4. Linux中的常用工具

1. md5sum 
2. sha1sum  file、sha1sum --check file 
3. openssl
4. gpg

5. 示例

[root@CentOS6.9 ~]#echo "test" > hash              #生成一個(gè)文件
[root@CentOS6.9 ~]#ls                              #查看
admin.pubkey  anaconda-ks.cfg  bin  hash  install.log  install.log.syslog  test  test.gpg
[root@CentOS6.9 ~]#md5sum hash                     #md5運(yùn)算產(chǎn)生hash值
d8e8fca2dc0f896fd7cb4cb0031ba249  hash             #hash值
[root@CentOS6.9 ~]#echo "123" >> hash              #在文件的中加一行123
[root@CentOS6.9 ~]#md5sum hash                     #再用md5運(yùn)算產(chǎn)生hash值
4145c486d60a3d078fc57ac0e7de44bd  hash             #hash值和原來的已經(jīng)不同了
[root@CentOS6.9 ~]#echo "test" > hash              #把文件重置
[root@CentOS6.9 ~]#md5sum hash                     #再次運(yùn)算
d8e8fca2dc0f896fd7cb4cb0031ba249  hash             #hash值和原來的相同
[root@CentOS6.9 ~]#md5sum hash > hash.key          #hash運(yùn)算并把hash值寫入hash.key文件中
[root@CentOS6.9 ~]#md5sum -c hash.key              #用這個(gè)文件判斷原文件的數(shù)據(jù)有沒有改變
hash: 確定                                          
[root@CentOS6.9 ~]#echo "123" >> hash              #把123追加到hash文件
[root@CentOS6.9 ~]#md5sum -c hash.key              #再次判斷
hash: 失敗
md5sum: 警告:1/1 生成的校驗(yàn)和不匹配
[root@CentOS6.9 ~]#

4. 安全認(rèn)證之?dāng)?shù)字證書

數(shù)字證書為實(shí)現(xiàn)雙方安全通信提供了電子認(rèn)證。在因特網(wǎng)、公司內(nèi)部網(wǎng)或外部網(wǎng)中,使用數(shù)字證書實(shí)現(xiàn)身份識(shí)別和電子信息加密。數(shù)字證書中含有密鑰對(duì)(公鑰和私鑰)所有者的識(shí)別信息,通過驗(yàn)證識(shí)別信息的真?zhèn)螌?shí)現(xiàn)對(duì)證書持有者身份的認(rèn)證。目前,證書的格式和驗(yàn)證方法普遍遵循X.509國際標(biāo)準(zhǔn)。

1. 簽發(fā)機(jī)構(gòu)和證書的內(nèi)容

1. 簽證機(jī)構(gòu) :CA
2. 注冊(cè)機(jī)構(gòu) :RA
3. 證書吊銷列表 :CRL
4. X.509:定義了證書的結(jié)構(gòu)以及認(rèn)證協(xié)議標(biāo)準(zhǔn)
    - 版本號(hào)
    - 序列號(hào)
    - 簽名算法
    - 頒發(fā)者
    - 有效期限
    - 主體名稱
    - 主體公鑰
    - CRL分發(fā)點(diǎn)
    - 擴(kuò)展信息
    - 發(fā)行者簽名

2. 功能

1. 保密性     : 只有收件人才能閱讀信息。
2. 認(rèn)證性     : 確認(rèn)信息發(fā)送者的身份。
3. 完整性     : 信息在傳遞過程中不會(huì)被篡改。
4. 不可抵賴性 : 發(fā)送者不能否認(rèn)已發(fā)送的信息。
5. 保證請(qǐng)求者與服務(wù)者的數(shù)據(jù)交換的安全性

3. 示例,使用openssl

OpenSSL是一個(gè)開源項(xiàng)目,為傳輸層安全(TLS)和安全套接字層(SSL)協(xié)議提供了強(qiáng)大的商業(yè)級(jí)和全功能工具包
1. OpenSSL的配置文件etc/pki/tls/openssl.cnf,下面有一些重要的配置,里面的一下目錄和文件需要手動(dòng)創(chuàng)建

name_opt        = ca_default            # Subject Name options      主題名稱選項(xiàng)默認(rèn)ca_default               
cert_opt        = ca_default            # Certificate field options 證書字段選項(xiàng)默認(rèn)ca_default 
[ CA_default ]                                                      #默認(rèn)配置

dir             = /etc/pki/CA           # Where everything is kept  #默認(rèn)文件存放的目錄,定義的一個(gè)dir變量
certs           = $dir/certs            # Where the issued certs are kept #簽發(fā)的證書存放位置
crl_dir         = $dir/crl              # Where the issued crl are kept   #吊銷的證書存放文件
database        = $dir/index.txt        # database index file.            #頒發(fā)過的證書索引文件
#unique_subject = no                    # Set to 'no' to allow creation of #能不能設(shè)置相同的證書,默認(rèn)被注釋
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.     #新證書默認(rèn)存放的目錄

certificate     = $dir/cacert.pem       # The CA certificate               #CA的自簽證書的名字和存放目錄
serial          = $dir/serial           # The current serial number        #指明證書序列號(hào),只第一次需要指定  
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL #吊銷證書的序列號(hào),第一次需要指定
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       #偽隨機(jī)數(shù)文件

x509_extensions = usr_cert              # The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default            # Subject Name options
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   #證書的默認(rèn)有效期
default_crl_days= 30                    # how long before next CRL  # 吊銷證書默認(rèn)聲明有效期
default_md      = sha256                # use SHA-256 by default    #默認(rèn)的生成算法
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                                     #指定默認(rèn)的CA屬性

# For the CA policy  
[ policy_match ]
countryName             = match     #證書申請(qǐng)時(shí)填寫的國家,參數(shù)match必須CA同一個(gè)國家
stateOrProvinceName     = match     #客戶機(jī)申請(qǐng)時(shí)填寫省份
organizationName        = match     #機(jī)構(gòu)名稱
organizationalUnitName  = optional  #部門,參數(shù)optional可以和CA不同
commonName              = supplied  #通用名稱
emailAddress            = optional  #郵箱

# For the 'anything' policy                           #另外一套CA屬性,規(guī)則比較寬松
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]                     
countryName             = optional                                #允許跨國家、地區(qū)申請(qǐng)證書
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ req ]                                                    #向CA證書簽署發(fā)起注冊(cè)請(qǐng)求相關(guān)屬性
default_bits            = 2048
default_md              = sha256
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert

2. 創(chuàng)建自簽證書
   1. 創(chuàng)建私鑰
[root@CentOS7.3 ~]#(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem )
Generating RSA private key, 1024 bit long modulus          #密鑰默認(rèn)是1024位加密,也可以在命令尾部指定
.............++++++
........++++++
e is 65537 (0x10001)
[root@CentOS7.3 ~]#touch /etc/pki/CA/index.txt       #創(chuàng)建證書索引文件
[root@CentOS7.3 ~]#echo 01 > /etc/pki/CA/serial      #指定證書頒發(fā)的序號(hào),序號(hào)必須是兩位16進(jìn)制數(shù)
[root@CentOS7.3 ~]#echo 01 > /etc/pki/CA/crlnumber   #指定證書吊銷的序號(hào)
[root@CentOS7.3 ~]#touch /etc/pki/CA/private/.rand   #創(chuàng)建偽隨機(jī)數(shù)文件
[root@CentOS7.3 ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem       
#創(chuàng)建自簽證書 -new:生成新證書簽署請(qǐng)求;-x509:生成自簽格式證書,專用于創(chuàng)建私有CA時(shí);-key:生成請(qǐng)求時(shí)用到的私有文件路徑
# -out:生成的請(qǐng)求文件路徑;如果自簽操作將直接生成簽署過的證書;-days:證書的有效時(shí)長,單位是day;
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                         #填寫CA所在的國家,格式為國家代碼
State or Province Name (full name) []:xxxxxx                 #填寫所在的州或省
Locality Name (eg, city) [Default City]:xxxxxx               #填寫所在的城市
Organization Name (eg, company) [Default Company Ltd]:CentOS #機(jī)構(gòu)名稱
Organizational Unit Name (eg, section) []:CA                 #部門名稱
Common Name (eg, your name or your server's hostname) []:    #通用名稱,服務(wù)器的主機(jī)名
Email Address []:                                            #郵箱地址

[root@CentOS7.3 ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text     #查看生成的證書,信息有省略
Certificate:  
    Data: 
        Version: 3 (0x2)
        Serial Number: 11088094993200996766 (0x99e0d3a62988619e)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com    #頒發(fā)機(jī)構(gòu)的信息
        Validity
            Not Before: Jul 17 14:50:30 2017 GMT
            Not After : Jul 12 14:50:30 2037 GMT
        Subject: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com   #申請(qǐng)者的信息
  1. 給客戶端頒發(fā)證書
[root@CentOS6.9 ~]#(umask 077;openssl genrsa -out /etc/pki/tls/private/test.key)    #在客戶端生成私鑰
Generating RSA private key, 1024 bit long modulus
..............................++++++
.......++++++
e is 65537 (0x10001)
[root@CentOS6.9 ~]#openssl req -new -key /etc/pki/tls/private/test.key   -out /etc/pki/tls/test.pem   #生成證書申請(qǐng)文件
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                            #國家,必須和CA相同
State or Province Name (full name) []:HeNan                     #州或者省份,必須和CA相同
Locality Name (eg, city) [Default City]:zz                      #城市,可以自定義
Organization Name (eg, company) [Default Company Ltd]:CAServer  #機(jī)構(gòu)名必須和CA相同
Organizational Unit Name (eg, section) []:test                  #部門名稱,可以自定義
Common Name (eg, your name or your server's hostname) []:test.com     #服務(wù)器名稱
Email Address []:                                                  #郵箱地址可以忽略
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin                                   #設(shè)置密碼加密
An optional company name []:admin
[root@CentOS6.9 ~]#scp /etc/pki/tls/test.pem root@192.168.166.130:/etc/pki/CA   #把他發(fā)送到CA服務(wù)器上
  
[root@CentOS7.3 CA]#openssl ca -in test.pem -out certs/test.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jul 17 16:14:46 2017 GMT
            Not After : Jul 17 16:14:46 2018 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HeNan
            organizationName          = CAServer
            organizationalUnitName    = test
            commonName                = test.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                3B:F1:1B:6B:88:C2:17:35:19:2E:35:90:C6:22:6E:69:10:FF:B4:02
            X509v3 Authority Key Identifier: 
                keyid:60:3C:95:CB:A1:63:DC:0C:FC:1B:85:22:B3:4D:FD:FB:3B:5E:A4:B8

Certificate is to be certified until Jul 17 16:14:46 2018 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@CentOS7.3 CA]#cat serial
02
[root@CentOS7.3 CA]#cat index.txt
V   180717161446Z       01  unknown /C=CN/ST=HeNan/O=CAServer/OU=test/CN=test.com
[root@CentOS7.3 CA]#scp certs/test.crt root@192.168.166.129:/etc/pki/tls/certs/
[root@CentOS6.9 certs]#openssl x509 -in test.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com
        Validity
            Not Before: Jul 17 16:14:46 2017 GMT
            Not After : Jul 17 16:14:46 2018 GMT
        Subject: C=CN, ST=HeNan, O=CAServer, OU=test, CN=test.com
        Subject Public Key Info:
  1. 吊銷證書
[root@CentOS6.9 certs]#openssl x509 -in /etc/pki/tls/certs/test.crt -noout -serial -subject     #在客戶主機(jī)上面查詢證書的編號(hào)和信息,提供給CA
serial=01
subject= /C=CN/ST=HeNan/O=CAServer/OU=test/CN=test.com 

[root@CentOS7.3 CA]#cat index.txt                           #CA查看索引文件確認(rèn)
R   180717161446Z   170717162332Z   01  unknown /C=CN/ST=HeNan/O=CAServer/OU=test/CN=test.com
[root@CentOS7.3 CA]#ll /etc/pki/CA/newcerts/01.pem                      #
-rw-r--r--. 1 root root 3077 Jul 18 00:14 /etc/pki/CA/newcerts/01.pem     #在簽發(fā)證書之后會(huì)在/newcerts生成一個(gè)證書編號(hào).pem文件
[root@CentOS7.3 CA]#cat /etc/pki/CA/newcerts/01.pem      #里面是證書的信息和申請(qǐng)者的公鑰,下面的信息有省略
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com
        Validity
            Not Before: Jul 17 16:14:46 2017 GMT
            Not After : Jul 17 16:14:46 2018 GMT
        Subject: C=CN, ST=HeNan, O=CAServer, OU=test, CN=test.com
[root@CentOS7.3 CA]#openssl -revoke /etc/pki/CA/newcerts/01.pem 
openssl:Error: '-revoke' is an invalid command.

[root@CentOS7.3 CA]#openssl ca -revoke /etc/pki/CA/newcerts/01.pem          #吊銷證書
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[root@CentOS7.3 CA]#openssl ca -gencrl -out crl/test.crl                      #更新證書吊銷列表
Using configuration from /etc/pki/tls/openssl.cnf
[root@CentOS7.3 CA]#openssl crl -in crl/test.crl -noout -text                  #查看證書吊銷列表
Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /C=CN/ST=HeNan/L=ZhengZhou/O=CAServer/OU=CA/CN=www.CAServer.com   #CA的信息
        Last Update: Jul 17 16:24:37 2017 GMT
        Next Update: Aug 16 16:24:37 2017 GMT
        CRL extensions:
            X509v3 CRL Number: 
                2                                                         
Revoked Certificates:
    Serial Number: 01                                                  #證書編號(hào)
        Revocation Date: Jul 17 16:23:32 2017 GMT

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容