本章內容
v 1、安全機制 2、對稱加密 3、不對稱加密 4、散列算法 5、PKI 和CA
v 在互聯網數據傳輸的過程的,數據的安全私密性是及其重要的,所以就有數據的加密和解密的過程。
數據加密,是一門歷史悠久的技術,指通過加密算法和加密密鑰將明文轉變為密文,而解密則是通過解密算法和解密密鑰將密文恢復為明文。它的核心是密碼學。
數據加密目前仍是計算機系統對信息進行保護的一種最可靠的辦法。它利用密碼技術對信息進行加密,實現信息隱蔽,從而起到保護信息的安全的作用。
一、為什么要加密
1.1 不加密流量的易受攻擊性
密碼/數據嗅探
數據操作
驗證操作
相當于郵寄明信片
1.2 不安全的傳統協議
telnet、FTP、POP3等等;不安全密碼
http、smtp、NFS等等;不安全信息
Ldap、NIS、rsh等等;不安全驗證
1.3 示例:利用telnet協議偽造郵件
vim /etc/postfix/main.cf 修改郵件的配置文件
/interface inet_interfaces = localhost 變為all 把接件人設為所有人
systemctl restart postfix
冒充別人給指定的人發郵件centos7 lyx;telnet
發送方:紅色的為操作步驟
[lv@centos7 ~]$ telnet 127.0.0.1 25
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is '^]'.
220 centos7.localdomain ESMTP Postfix
helo m.com
250 centos7.localdomain
mail from:Boss@work.com
250 2.1.0 Ok
rcpt to:lyx
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject:work
Come to the office
.
250 2.0.0 Ok: queued as 722632668DD
quit
221 2.0.0 Bye
Connection closed by foreign host.
接收方:
[lyx@centos7 ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/lisi": 1 message 1 new
>N 1 Boss@work.com Mon Nov 21 21:10 14/447 "work"
& 1
Message 1:
From Boss@work.com Mon Nov 21 21:10:09 2016
Return-Path: <Boss@work.com>
X-Original-To: lyx
Delivered-To: lyx@centos7.localdomain
subject:work
Date: Mon, 21 Nov 2016 21:08:51 +0800 (CST)
From: Boss@work.com
Status: R
Come to the office
&
由此可見,不安全的傳統協議是多么的“不靠譜”,所以加密的重要性就無可厚非了,關于密碼的定制也是具有一定能夠的規格和屬性的。
二、安全機制
NIST(美國國家標準與技術研究院)定義的安全屬性
1.保密性:數據保密性、隱私性
2.完整性:不可篡改、數據完整性、系統完整性
3.可用性
安全攻擊:STRIDE
Spoofing(假冒)、Tampering(篡改)、Repudiation(否認)、Information Disclosure(信息泄露)
Denial of Service(拒絕服務)和Elevation of Privilege(提升權限)
安全機制的方式:
加密、數字簽名、訪問控制、數據完整性、認證交換、流量填充、路由控制、公正
安全服務:
認證:ca
訪問控制:sudo權限
數據保密性:
連接保密性:vpn
無連接保密性:tcp udp
選擇保密性:如工資條的工資
流量保密性:百度推送廣告
數據完整性:不可丟包
不可否認性
關于安全機制和安全服務的類別,做了簡單的列舉,我們在設置安全規則的時候要注意一定的安全基本原則。
設計基本原則
使用成熟的安全系統、“以小人之心度君子之腹”、外部系統都是不安全的!
減少外部接口、最小授權、缺省使用安全模式、安全不是似是而非
從入口處檢查、從管理上保護好你的系統、安全算法
常用安全技術:認證、授權、安全通信、審計
密碼算法和協議:對稱加密、公鑰加密、單向加密、認證協議
三、對稱加密
對稱加密即為加密和解密使用同一個密碼– 明文加密(data plain text), 密文加密(cipher text)
加密與解密過程
注:key1=key2
如:A—–B(A傳數據給B)
data plain text 代表明文 ; data ‘ cipher text 代表密文
data — 加密 (算法,密鑰key1)—-data’(算法,密鑰key2)—data key1==key2 對稱
3.1 加密算法:
DES (數據加密標準,56bits)
3DES(三重數據加密算法,相當于每個數據塊使用三次DES加密算法)
AES (高級加密標準,128bits)
Blowfish,Twofish
IDEA(類似于三重DES)
特性:
加密、解密使用同一個密鑰,效率高
將原始數據分割成固定大小的塊,逐個進行加密
缺陷:
密鑰過多、密鑰分發困難、數據來源無法確認
四、非對稱加密
非對稱加密:基于一對公鑰/密鑰對,用密鑰對中的一個加密,另一個解密。
公鑰加密:密鑰成對出現
公鑰(public key):公開給所有人、私鑰(secret key):自己留存,必須保證其私密性;
特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然。
功能:
數字簽名:主要在于讓接收方確認發送方身份
對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰后發送給對方
數據加密:適合加密較小數據
缺點:密鑰長,加密解密效率底下
算法:
RSA(加密,數字簽名)
DSA(數字簽名)
ELGamal
4.1 實現加密
接收者:生成公鑰/密鑰對:P和S;公開公鑰P,保密私鑰S
發送者:使用接收者的公鑰來加密消息M,將P(M)發送給接收者
接收者:使用密鑰S來解密:M=S(P(M))
示例: cat /root/.ssh/known_key:ssh遠程鏈接的公鑰
cat /etc/ssh/ssh_host_rsa_key:ssh遠程鏈接的私鑰
data — 加密 (算法,密鑰key1)—-data’(算法,密鑰key2)—data key1!=key2 非對稱
A——B(主機A加密數據傳給主機B)
A:public key,Pa ;secret key Sa :生成A的公鑰私鑰
B:public key,Sa ;secret key Sb :生成B的公鑰私鑰
public key 加密,只能用對應的另一把secret key 解密,反之,一樣
即:對于A:Pa加密 ,對于B:只能拿Sa解密; 對于B:Sa加密,對于A:只能拿Pa解密
A——-B(A手中有B的公鑰或者私鑰) Sa——-Sb Public b(data)=data’
A加密郵件傳給B;A只有B的公鑰,只能加密,但是不能解密
4.2 實現數字簽名
發送者:生成公鑰/密鑰對:P和S;公開公鑰P,保密密鑰S,使用密鑰S來加密消息M,發送給接收者S(M)
接收者:使用發送者的公鑰來解密M=P(S(M)),結合簽名和加密,分離簽名獲得消息。
數字簽名,拿A的私鑰加密,B,C,D…都只能拿A的公鑰解密,這樣也確定了是A發送的加密信息
比如:Sa(data)=data’=Pa(dara)拿A的私鑰給data加密,即 數字簽名
非對稱式加密效率太低,因而不太適合加密大量的數據
示例:A—-B:要求傳送過程不被人截獲,也不能破解 1k的數據
A加密:Pb[Sa(data)]:先拿A的私鑰給data加密,實現數字簽名,再那B的公鑰加密
B解密:Sb{Pa[Pb[Sa(data)]]}:先用B的私鑰加密得到A的私鑰加密的數據,再拿A的公鑰解密
這樣也就知道數據是A 那兒傳輸過來的
五、散列算法(單項散列)
散列算法:哈希算法(對數據進行加密成固定的字符串)
將任意數據大小縮減成固定大小的“指紋”或者摘要 (digest)
特性:任意長度輸入、固定長度輸出
若修改數據,指紋(摘要)也會改變、無法從指紋中重新生成;數據內容不變,對應的指紋(摘要)不會變動。
md5sum f3 > f3.md5 cat f3.md5 md5sum –check f3.md5(查看數據是否改變)
無法從指紋中重新生成數據(“單向”)即得到摘要,不可反推原數據
功能:保證數據完整性
常見算式
md5: 128bits 、sha1: 160bits 、sha224 、sha256 、sha384 、sha512
5.1 md5sum檢查完整性
md5sum | sha1sum [ –check ] file :檢查數據的完整性;hash值是否一樣
rpm -V package :比對下載的軟件是否為正版
openssl、gpg
示例 :若修改數據,指紋也會改變
[root@centos7 testdir]# ll
總用量 8
-rw-r–r– 1 root root 6 11月 23 23:39 f1
-rw-r–r– 1 root root 3 11月 23 23:39 f2
[root@centos7 testdir]# md5sum f1 f2
b1946ac92492d2347c6235b4d2611184 f1
764efa883dda1e11db47671c4a3bbd9e f2
[root@centos7 testdir]# echo >> f1
[root@centos7 testdir]# md5sum f1 f2
14e273e6f416c4b90a071f59ac01206a f1
764efa883dda1e11db47671c4a3bbd9e f2
可發現向f1文件中追加一個換行符,f1的“指紋”就發生了改變,f2未改動則“指紋不變”
校驗:
[root@centos7 testdir]# md5sum f1 > f1.md5
[root@centos7 testdir]# md5sum –check f1.md5
f1: 確定
[root@centos7 testdir]# echo ' ' >> f1
[root@centos7 testdir]# md5sum –check f1.md5
f1: 失敗
md5sum: 警告:1 個校驗和不匹配
5.2 hash加密示例
A—-B:要求傳送過程不被人截獲,也不能破解 100M的數據
A加密:Pb{100Mdata+Sa[hash(data)]} 設:{100Mdata+Sa[hash(data)]}==x
先對100Mdata進行hash算法,在用A的私鑰加密,即數字簽名,隨后附加到100M的數據后面,
再用B的公鑰進行加密,就相當于只用B的公鑰加密了一次
B解密:Sb x –> 100Mdata+Sa[hash(data1)] Pa{Sa[hash(data)} —>hash(data1) hash(100Mdata)?==hash(data1)
B先用私鑰進行加密,就能得到100M和附加之后A的私鑰簽名以及數據的hash至,再用A的公鑰解 密得到A的簽名(知道是A的簽名);再用同一種hash運算加密100M數據,用md5sum | sha1sum [ –check ] file,來檢驗hash值是否一樣,md5sum 100Mdata;cat hash(data1)從而保證數據的完整性。
上述是非對稱式加密相當于只加密一次(用Sb解密Pb)
更進加密方式:
A加密:key{100Mdata+Sa[hash(data)]}+Pb(key)
此為對稱式加密和非對稱式加密結合,速度快,效率高;先用B的公鑰加密key(對稱式加密的密碼),再用對稱式加密key加密數據。
5.3 密鑰交換算法
密鑰交換:IKE( Internet Key Exchange)解決對稱式密鑰的交換,即公用一個key
公鑰加密:DH (Deffie-Hellman)
DH:
A:a,p協商生成公開的整數a,大素數p; B:a,p
A:生成隱私數據:x (x<p ),計算得出a^x%p,發送給B;
B:生成隱私數據:y,計算得出a^y%p,發送給A
A:計算得出(ay%p)x = a^xy%p,生成為密鑰;
B:計算得出(ax%p)y = a^xy%p, 生成為密鑰;
這樣A、B得到的密鑰都為a^xy%p,就能實現數據加密
六、PKI和CA證書
6.1 PKI;CA基本概念
PKI: 公鑰基礎設施(Public Key Infrastructure);是一種遵循標準的利用公鑰加密技為電子商務的開展提供一套安全基礎平臺的技術和規范。PKI體系結構采用證書管理公鑰,通過第三方的可信機構CA,把用戶的公鑰和用戶的其他標識信息捆綁在一起,在Internet網上驗證用戶的身份,PKI體系結構把公鑰密碼和對稱密碼結合起來,在Internet網上實現密鑰的自動管理,保證網上數據的機密性、完整性。
CA: CA(Certificate Authority),是負責發放和管理數字證書的權威機構,并作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。
簽證機構:CA(Certificate Authority)
注冊機構:RA
證書吊銷列表:CRL
X.509:定義了證書的結構以及認證協議標準;
包含有:版本號、序列號、簽名算法、頒發者、有效期限、主題名稱、主體公鑰、CRL分發點、擴展信息
發行者簽名、證書獲取
證書類型:證書授權機構的證書、服務器、用戶證書
獲取證書的兩種方法:
1、使用證書授權機構
生成簽名請求(csr) 、將csr發送給CA 、從CA處接收簽名
2、自簽名的證書:即自己簽發自己的公鑰
證書申請驗證過程:
申請證書方申請證書時,需要按規定填寫申請表以及生成密鑰提交申請,CA簽署后發回給申請者;CA的證書是屬于自簽證書。 在互相得到了證書后,到CA獲取公鑰進行解密,解密成功可證實對方身份,之前還需要進行核實證書的有效期限和是否被吊銷等信息。
6.2 安全協議SSL/TLS
SSL:Secure Socket Layer 安全套接層
TLS:Transport Layer Security 傳輸層安全:對數據進行加密
RFC:最新最全的網絡細節
功能:機密性,認證,完整性,重放保護(被截獲的數據重新發送)
兩階段的協議,分為握手階段和應用階段:
握手階段(協商階段): 客戶端和服務器端認證對方身份(依賴PKI體系,利用數字證書進行身份認證),并協商通信中使用的安全參數、密碼套件以及主密鑰。后續通信使用的所有密鑰都是通過MasterSecret 生成。
應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信。
兩階段的協議又包括:
Handshake 協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換
ChangeCipherSpec 協議:一條消息表明握手協議已經完成
Alert協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning 兩個級別,fatal 類型錯誤會直接中斷SSL 鏈接,而warning 級別的錯誤SSL 鏈接仍可繼續,只是會給出錯誤警告。
Record 協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等
HTTPS 協議:就是“HTTP協議”和“SSL/TLS協議”的組合。HTTP over SSL”或“HTTP over TLS”,對http 協 議的文本數據進行加密處理后,成為二進制形式傳輸。
6.3 openssl
openssl命令:OpenSSL是一個強大的安全套接字層密碼庫;開源項目,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。
三個組件:
openssl:多用途的命令行工具
libcrypto:加密算法庫
libssl: 加密模塊應用庫,實現ssl及tls
兩種運行模式:交互模式和批處理模式
直接輸入openssl回車進入交互模式
輸入帶命令選項的openssl進入批處理模式。
6.3.1對稱加密算法
OpenSSL一共提供了8種對稱加密算法,其中7種是分組加密算法,僅有的一種流加密算法是RC4。 這7種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持電子密碼本模式(ECB)、加密分組鏈接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種常用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它算法使用的則是64位。事實上,DES算法里面不僅僅是常用的DES算法,還支持三個密鑰和兩個密鑰3DES算法。
工具: openssl enc, gpg
加密:
[root@centos7 testdir]# openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
enter des-ede3-cbc encryption password:
Verifying – enter des-ede3-cbc encryption password:
解密:
[root@centos7 testdir]# openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile1
enter des-ede3-cbc decryption password:
6.3.2 非對稱加密算法
OpenSSL一共實現了4種非對稱加密算法,包括DH算法、RSA算法、DSA算法和橢圓曲線算法(EC)。DH算法一般用戶密鑰交換。RSA算法既可以用于密鑰交換,也可以用于數字簽名,當然,如果你能夠忍受其緩慢的速度,那么也可以用于數據加密。DSA算法則一般只用于數字簽名。
信息摘要算法 OpenSSL實現了5種信息摘要算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事實上包括了SHA和SHA1兩種信息摘要算法,此外,OpenSSL還實現了DSS標準中規定的兩種信息摘要算法DSS和DSS1。
工具:md5sum, sha1sum,sha224sum.sha256sum… openssl dgst
用SHA1算法計算文件file.txt的哈希值,輸出到stdout:
# openssl dgst -sha1 file.txt
用SHA1算法計算文件file.txt的哈希值,輸出到文件digest.txt:
# openssl sha1 -out digest.txt file.txt
6.3.4生成用戶密碼
openssl passwd -1 -salt SALT(最多8位)
passwd命令:man sslpasswd
[root@centos7 ~]# openssl passwd -1 -salt lyx
Password:
$1$centos$Sm4Goo.NmvaS9rG86gpF01
6.3.5生成隨機數(man sslrand)
openssl rand -base64 | -hex NUM
NUM: 表示字節數;-hex 時,每個字符4 位,出現的字符數為NUM*2
tr -dc A-Za-z0-9_ < /dev/urandom|head -c 20|xargs
6.3.6 生成密鑰對(man genrsa)
openssl rsa -in PRIVATEKEYFLE -pubout -out PUBLICKEYFILE
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
生成密鑰
[root@centos7 ~]# (umask 077; openssl genrsa -out key.pem -passout pass:centos -des 2048 )
Generating RSA private key, 2048 bit long modulus
………+++
……………………………………….+++
e is 65537 (0x10001)
從私鑰中提取公鑰
[root@centos7 ~]# openssl rsa -in key.pem -passin pass:centos -pubout -out pubkey.pem
writing RSA key
隨機數生成器:偽隨機數字
鍵盤和鼠標、塊設備中斷
/dev/random:僅從熵池返回隨即誰;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞
6.4 證書管理
證書申請及簽署步驟:
1、生成申請請求 2、RA核驗 3、CA簽署 4、獲取證書 5、創建CA和申請證書
6.4創建私有CA
openssl的配置文件:/etc/pki/tls/openssl.cnf
[root@centos7 ~]# vim /etc/pki/tls/openssl.cnf
[ CA_default ]
dir = /etc/pki/CA # 工作目錄
certs = $dir/certs # 簽署文件證書目錄
crl_dir = $dir/crl # 吊銷列表
database = $dir/index.txt # 數據庫索引文件
#unique_subject = no #
#
new_certs_dir = $dir/newcerts # 當前簽署的證書目錄
certificate = $dir/cacert.pem # CA自身的證書
serial = $dir/serial # 當前簽署的證書編號
crlnumber = $dir/crlnumber # 吊銷列表編號
#
crl = $dir/crl.pem # 當前使用的crl
private_key = $dir/private/cakey.pem # CA的私有KEY
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
配置文件中可以看到定義CA的默認屬性;了解屬性后即可配置CA
6.4.1創建所需要的文件
[root@centos7 ~]# cd /etc/pki/CA/
[root@centos7 CA]# touch index.txt
[root@centos7 CA]# echo 01 > serial (生成序列號)
6.4.2 CA自簽證書
6.4.2.1生成私鑰
#cd /etc/pki/CA/
[root@centos7 CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
……………+++
……………………………………..+++
e is 65537 (0x10001)
注意()表示里面修改的umask值,只對括號里面的私鑰文件有效
#cd /etc/pki/CA/private
#ll cakey.pem ;cat cakey.pem(查看生成的私鑰)
6.4.2.2生成自簽證書
[root@centos7 CA]# openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem
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 #國家名稱(2字母代碼)
State or Province Name (full name) []:beijing #州或省名稱(全名)
Locality Name (eg, city) [Default City]:haidian #地區名稱(如城市)(默認城市)
Organization Name (eg, company) [Default Company Ltd]:linux #組織名稱(如公司)(默認有限公司)
Organizational Unit Name (eg, section) []:centos #組織單元名稱(例如,部門)
Common Name (eg, your name or your server's hostname) []:ca.linux.com #常見的名字(例如你的名字或你 的服務器的主機名)
Email Address []:ca@linux.com #郵件地址
注:命令選項釋義
-new: 生成新證書簽署請求
-x509: 專用于CA生成自簽證書
-key: 生成請求時用到的私鑰文件
-days n:證書的有效期限
-out /PATH/TO/SOMECERTFILE: 證書的保存路徑
6.4.3頒發證書
在需要使用證書的主機生成證書請求;
示例:HTTPS的實現
1.給web服務器生成私鑰
[root@lv-6 ~]# mkdir /etc/httpd/ssl
[root@lv-6 ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
…………………………………………………….+++
………………………………..+++
e is 65537 (0x10001)
[root@lv-6 ~]# ll /etc/httpd/ssl/
總用量 4
-rw——- 1 root root 1675 11月 24 15:47 httpd.key
2.生成證書申請文件
[root@lv-6 ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
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
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:haidian
Organization Name (eg, company) [Default Company Ltd]:linux
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:lv.linux.com
Email Address []:lv@linux.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#與CA上證書生成是差不多的,區別在于主機名和多了個密碼,密碼這里留空
#由于是內部使用,注意:默認國家,省,公司名稱必須和CA一致
3.將證書請求文件傳輸給CA
#在CA主機上/etc/pki/下創建用于存儲審核文件的目錄
[root@centos7 CA]# mkdir /etc/pki/sign
[root@centos7 CA]# cd /etc/pki/sign
#將文件傳輸給CA
[root@lv-6 ~]# scp /etc/httpd/ssl/httpd.csr 172.16.254.254:/etc/pki/sign
root@172.16.254.254's password:
httpd.csr 100% 1045 1.0KB/s 00:00
CA簽署證書,并將證書頒發給請求者;
[root@centos7 sign]# openssl ca -in httpd.csr -out httpd.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: Nov 24 08:08:11 2016 GMT
Not After : Nov 24 08:08:11 2017 GMT
Subject:
countryName = CN
stateOrProvinceName = Beijing
organizationName = linux
organizationalUnitName = centos
commonName = lv.linux.com
emailAddress = lv@linux.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
45:BE:5E:35:36:07:2D:6F:F5:1B:84:7B:A0:49:D4:2F:C3:08:63:0C
X509v3 Authority Key Identifier:
keyid:6F:BD:95:95:1C:69:CF:C5:D4:9B:09:39:83:7F:F9:AD:21:C3:3A:B5
Certificate is to be certified until Nov 24 08:08:11 2017 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 sign]# scp httpd.crt 172.16.54.54:/etc/httpd/ssl/
The authenticity of host '172.16.54.54 (172.16.54.54)' can't be established.
ECDSA key fingerprint is cc:6d:c9:4a:8f:78:7a:b7:87:01:6d:c8:2d:28:cd:26.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.54.54' (ECDSA) to the list of known hosts.
root@172.16.254.254's password:
httpd.crt 100% 4593 4.5KB/s 00:00
[root@lv-6 ~]# ls /etc/httpd/ssl/
httpd.crt httpd.csr httpd.key
#請求主機收到證書
查看證書中的信息
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|subject|serial|dates
4、驗證
#1.安裝mod_ssl模塊
[root@lv-6 ~]# yum -y install mod_ssl
#2.編輯ssl的配置文件,定義虛擬主機
[root@lv-6 ~]# vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName lv.linux.com:443
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
#3.啟動http服務
[root@lv-6 ~]# systemctl start httpd.service
[root@lv-6 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::443 :::*
#4.訪問測試
– 需將CA的證書導入到客戶端主機,否則CA將不會被信任。
[root@centos7 ~]# cp /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/
[root@centos7 ~]# update-ca-trust
[root@centos7 ~]# curl https://lv.linux.com
Hello,I'm lv
至此一個簡單的CA以及申請和簽署步驟已完成。這種CA一般應用于內部局域網,如大范圍使用或專業使用,建議使用OpenCA或者購買專業公司提供的。
6.2.4吊銷證書
證書吊銷需要在用戶申請或者用戶未付款的情況下。正常狀態下是不能操作的。
在客戶端獲取要吊銷的證書的serial
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
吊銷證書
生成吊銷證書的編號(第一次吊銷一個證書時才需要執行)
echo 01 > /etc/pki/CA/crlnumber
更新證書吊銷列表
openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看crl文件:
openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
原創文章,作者:lyx,如若轉載,請注明出處:http://www.www58058.com/62440
文章內容詳細,理論與實踐完好的結合了起來,行間隔緊湊一點會不會更好看呢?