安全協議
SSL:secure socket layer
TLS:transport layer security
功能:機密性,認證,完整性,重放保護
兩階段協議:分為握手階段和應用階段
握手階段(協商階段):客戶端和服務端認證對方身份(依賴于PKI體系,利用數字證書進行身份認證),并協商通信中使用的安全參數、密碼套件以及主密鑰。后續通信使用的所有密鑰都是通過MAstersecret生成。
應用階段:在握手階段完成后進入與,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信
在實現通訊的時候,加密過程怎么來實現的,
客戶端,發一個hello消息,我要和你通訊,服務器端也打聲招呼hello,我收到你的消息了,雙方開始一些數據交換,其中最重要的就是把服務器的證書發給他,證書包括CA簽過名的公鑰,一般來講客戶端信任CA,即客戶端拿到了CA的公鑰,服務器發過來的證書包括CA頒發給服務器的證書,即私鑰簽過名服務器的證書,客戶端就可以拿CA的公鑰把證書里面的簽過名的私鑰的信息解密,解密之后得到服務器的公鑰,
京東向CA申請證書,證書包括,Sca(Pa)+CA+A+expire
客戶端想訪問京東,京東先把證書傳給客戶,客戶端拿到證書,由于客戶信任CA,即客戶端拿到了京東的公鑰Pca,
CA的公鑰拿到了,我們就可以把CA簽過名的私鑰簽名的東西給解開,就得到了A的公鑰,
之后,客戶端在自己的瀏覽器自動生成一把對稱的密鑰,用京東的公鑰加密,再發回給京東,
Pjd(key)—–>jd.com ??京東的公鑰是證書里面包的,解開之后得到的, ?京東有自己的私鑰,就可以解開,拿到客戶端的對稱密鑰,雙方都有了對稱密鑰,以后就可以用對稱數據加密傳輸
Key(data)—->
<—–key(data) ??雙方都有密鑰,就可以通訊,
訪問HTTPS網站的原理
https:
1 client hello—> server???客戶端發消息連一下
2 server cert:Sca(Pserver)—>client???服務器把自己的證書傳給客戶端
3 client Pca[Sca(Pserver)]=Pserver?客戶端事先有ca的公鑰,就可以解開,得到服務器的公鑰
4 client key??隨機生成,對稱公鑰
5 client Pserver(key)—>server?用剛才解密出來的服務器公鑰加密,
6 server Sserver[Pserver(key)]=key?服務器用自己的私鑰解密,得到key
7 client<—key(data)—>server
CA證書 格式
PKI:
X.509:定義了證書的結構以及認證協議標準
支持ssl的功能的開源項目:openssl
三個組件:OpenSSL:多用途的命令行工具
Libcrypto:加密算法庫,包openssl-libs
Libssl:加密模塊應用庫,實現了ssl及tls。包nss
Openssl命令:
兩種運行模式:交互式模式和批處理模式
Openssl version:程序版本號
標準命令、消息摘要命令、加密命令
標準命令:enc,ca,req
查看幫助,man dgst
Man enc
Openssl命令實現對稱密鑰加密
[root@centos7 app]# openssl enc -e -des3 -a -salt -in fstab ?-out fstab.des3
Enc對稱密鑰加密,-e表示要加密,-des3加密算法,-in表示對哪個文件操作-out輸出文件名,
-a是一種格式,base64 編碼 ??A-Za-z0-9+/ ?共64個 ?000000-111111
[root@centos7 app]# scp fstab.des3 192.168.27.120:/app/ ??傳到另一個主機
[root@Centos6 app]# openssl enc -d -des3 -a -salt -in fstab.des3 ???解密
Hash運算 支持hash運算 ?和md5運算一樣
[root@centos7 app]# openssl dgst -md5 fstab
MD5(fstab)= 5ee6b24e978dd663a191a50d7b36eb81
[root@centos7 app]# md5sum fstab
5ee6b24e978dd663a191a50d7b36eb81 ?fstab
生成用戶密碼:passwd命令
幫助:man sslpasswd
[root@centos7 app]# openssl passwd -1 -salt
生成隨機數
幫助:man sslrand
Openssl rand -base64|-hex NUM
NUM:表示字節數;-hex時,每個字符為十六進制,相當于4位二進制,出現的字符數為num*2
[root@centos7 app]# openssl rand -base64 10
0sVbokguIMl55g==
[root@centos7 app]# openssl rand -hex 2 ?兩個字節
f1ef ?兩個字節占四位十六進制數,一個十六進制數相當于四位,
打包?tar jcvf script27.tar.xz /home/wang
Sz script27.tar.xz
Rz
公鑰加密
算法:RSA. ?ELGamal
工具:gpg,openssl ??rsautl(man rsautl)
數據簽名:
算法:RSA,DSA,ELGamal
密鑰交換
算法:df
DSA
DSS
RSA
生成密鑰對:man genrsa
生成私鑰
[root@centos7 app]# openssl genrsa -out centos6.key 1024 ?私鑰文件不安全
[root@centos7 app]# (umask 066;openssl ?genrsa -out centos6.key 1024) ?066對文件最大權限666,減去066,600都是偶數也不用加1
[root@centos7 app]# (umask 066;openssl ?genrsa -out centos6.key2?-des3?4096) ?對稱加密,即加上密碼(只有root權限)
[root@centos7 app]# openssl rsa -in ?centos6.key2 -out centos6.key2.out ?將加密key解密
從私鑰文件中,把公鑰提取出來
[root@centos7 app]# openssl rsa -in ?centos6.key -pubout -out centos6.key.pub
[root@centos7 app]# openssl rsa -in ?centos6.key2 -pubout -out centos6.key.pub2
隨機數生成器:
鍵盤和鼠標,塊設備中斷
/dev/random 僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數非阻塞
[root@centos7 ~]# cat /dev/urandom |tr -dc ‘[:alnum:]’ |head -c 10
[root@centos7 ~]# openssl rand -base64 12 |head -c 10
Head 用于顯示文件的開頭的內容,-c 指定顯示頭部內容的字符數
Tr用來自標準輸入的字符進行替換、壓縮和刪除、
-c 取代所有不屬于第一字符集的字符(即取補集)
-d 刪除所有屬于第一字符集中的字符
PKI: Public Key Infrastructure ?公共密鑰架構
CA 證書的頒發機構
RA 證書的申請機構
CRL 證書吊銷列表
證書的存取庫
建立私有CA
OpenCA
Openssl
證書申請及簽署步驟
- 生成申請請求
- RA核驗
- CA核驗
- 獲取證書
搭建CA
搭建ca時,需要自己建立私鑰,需要有根ca,第一個ca,就相當于根ca,根ca的證書是自己給自己頒發的,自簽名的證書,建立公鑰私鑰對,通過私鑰來自己向自己頒發證書,,,第一步,建立自己的ca,客戶端向ca申請證書,
生成文件,填寫必要信息,國家,省,域;RA檢查信息,收集請求,沒問題之后;CA簽署,客戶端獲取證書后就
可以使用了,可以放在web服務器上將來實現web https的應用程序加密
創建私有CA
Openssl的配置文件:/etc/pki/tls/openssl.cnf
Centos7 ?改ip地址
看ip地址,nmcli connection
改ip地址,nmcli connection modify ens33 ipv4.addresses 192.168.27.7 /24
讓該地址生效,nmcli connection up ens33
三種策略:匹配、支持和可選
匹配指要求填寫的信息跟CA設置信息必須一致,支持指必須填寫這項申請信息,可選指可有可無
1創建所需要的文件
touch ?/etc/pki/CA/index.txt ?生成證書索引數據庫文件
echo 01 > /etc/pki/CA/serial ??指定第一個頒發證書的序列號
2CA自簽證書
生成私鑰
cd /etc/pki/CA ?CA工作的主目錄
(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) ????私鑰文件/private/cakey.pem
生成自簽名證書,從私鑰下生成自簽名證書
[root@centos7 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
(證書里面是放公鑰的)
Openssl req -new -x509 -key
/etc/pki/CA/private/cakey.pem -days ?7300 ?-out ???????????7300有效期
/etc/pki/CA/cacert.pem
-new 生成新證書簽署請求
-x509 專用于CA生成自簽證書
-key 生成請求時用到的私鑰文件
-days n 證書的有效期限
-out 證書的保存路徑
-x509 加這個,表示自己給自己頒發證書 ???不加,表示向CA申請證書,
查看證書信息
[root@centos7 CA]# openssl x509 -in cacert.pem -noout -text
客戶端centos6向centos7申請證書
第一步,自己有私鑰,比如將來給http服務用的,我們要生成私鑰文件,利用私鑰文件生成證書申請,也是一個文件,拷貝到centos7上,CA頒發證書,也生成一個文件,復制回到centos6,意味著centos6有三個文件,私鑰文件,請求文件,最終的證書文件, ??其中搭建http的加密應用,需要用到兩個文件,私鑰文件和證書文件
第一步,生成私鑰文件
(umask 066;openssl genrsa -out app.key 1024)
第二步,利用私鑰文件生成證書申請請求
[root@Centos6 ~]# openssl req -new -key app.key -out app.pem ??生成證書申請文件
[root@Centos6 ~]# mv app.pem app.csr ???????改名字
[root@Centos6 ~]# scp app.csr 192.168.27.8:/etc/pki/CA ?????傳遞給centos7 證書申請,等待頒發
[root@centos7 CA]# openssl ca -in app.csr -out certs/app.crt -days 730 ?對申請,頒發證書,,對申請生成證書文件
[root@centos7 CA]# touch index.txt
[root@centos7 CA]# echo ?0F > /etc/pki/CA/serial ?序列號
[root@centos7 CA]# openssl ca -in app.csr -out certs/app.crt -days 730
[root@centos7 CA]# ?scp certs/app.crt 192.168.27.120:/app ??導入centos6
在客戶端查看證書
[root@Centos6 app]# openssl x509 -in /app/app.crt -noout -text
吊銷證書
Openssl ca -revoke newcerts/11.pem
生成證書吊銷列表
第一步Echo 0F > /etc/pki/CA/crlnumber 生成相關文件
第二步Openssl ca -gencrl -out crl.pem ?生成證書吊銷列表
?
總結創建CA
搭建根CA ,根CA的創建有兩步
第一步,建立兩個必要的文件,
第二步,生成私鑰給自己簽名 ;生成私鑰文件,生成自簽名文件
在另外一臺機器上,生成私鑰, 向CA申請證書,填寫信息 生成請求文件csr,復制到CA,然后CA頒發證書
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90993