??在互聯(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工具
- 創(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] #有效期
- 查看密鑰
[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 ~]#
- 發(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)者的信息
- 給客戶端頒發(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:
- 吊銷證書
[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