一.CA和證書
(一)概念:
(1)PKI: Public Key Infrastructure
(2)簽證機構:CA(Certificate Authority)
(3)注冊機構:
RA 證書吊銷列表:
CRL 證書存取庫: ?
X.509:定義了證書的結構以及認證協議標準
版本號 序列號 簽名算法 頒發者 有效期限 主體名稱 主體公鑰 CRL分發點 擴展信息 發行者簽名
(二)證書的獲取
證書類型: 證書授權機構的證書 服務器 用戶證書 ?
獲取證書兩種方法:
? 使用證書授權機構 生成簽名請求(csr) 將csr發送給CA 從CA處接收簽名
? 自簽名的證書 自已簽發自己的公鑰
實驗:搭建ca
首先CA路徑為/etc/pki/CA,對應的配置文件為 /etc/pki/tls/openssl.cnf,根據配置文件的格式進行創建
image.png
image.png
步驟:在centos7中搭建證書
(1)首先要創建
touch /etc/pki/CA/index.txt——必須先創建此文件,內容可以為空,但是必須有這個文件
touch /etc/pki/CA/serial ——創建第一個序列號,內容不能為空 echo 99(或01,序號隨便設置)> /etc/pki/CA/serial
(2)先生成私鑰 (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 1024)——該格式是根據配置文件的格式設置的,要求私鑰的目錄在private下,并且以.pem后綴。安全起見將文件權限設置為600,通過數字簽名加密算法對文件簽名,生成的私鑰才對稱的加密算法生成。
(3)生成自簽名證書(用私鑰匙生成證書)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days -7300 -out /etc/pki/CA/cacert.pem——申請生成自簽名證書,設置默認有效期為兩年
image.png
此時在centos7中自簽名證書已搭建好,將文件導入windows中,查看image.png
此時,點擊安裝證書,點擊下一步,選擇證書安裝路徑,然后選擇證書存儲為如圖
image.png
然后按照提示選擇即可
(4)頒發證書
在centos6中生成私鑰,它需要被頒發證書
(umask 066; openssl genrsa -out /etc/pki/tls/private/app.key -des3 -1024)
申請生成文件證書:
openssl req -new -key /etc/pki/tls/private/app.key -days 3650 -out /etc/pki/tls/app.csr
該文件需要發給centos7進行審核,所以需要些申請文件,申請時間可以不寫,因為需要centos7來確定有效時間
注意事項:
countryName = 寫的國家名字必須和centos7中的寫的一樣
stateOrProvinceName = 省市必須相同
organizationName = 公司名必須一樣
(5)將文件發給centos7審核 scp app.csr 192.168.136.170:/etc/pki/CA
(6)CA簽署證書,并將證書發給申請者
openssl ca -in /etc/pki/CA/app.csr /etc/pki/CA/certs/app.crt -days 3650
給申請的文件頒發證書,并人為指定有效期為十年
(7)將生成的證書文件發給centos6
scp /etc/pki/CA/certs/app.crt 192.168.136.134:/etc/pki/tls/certs
將申請的證書導出到windows,查看
(8)查看證書信息
openssl x509 -in app.crt -noout -text:查看所有信息
openssl ca -status serial:查看序列號狀態
實驗2:生成一個子根證書
步驟:
(1)在centos6中,同樣先創建
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
(2)生成私鑰
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 1024)
(3)申請證書文件
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/subca.csr
(4)發給centos7進行審核
scp subca.csr 192.168.136.170:/etc/pki/CA
(5)在centos7上,進行審核并頒發證書
openssl ca -in subca.csr -out /etc/pki/CA/certs/subca.crt -days 3650
(6)生成后,scp subca.crt 192.168.136.134:/etc/pki/CA/cacert.pem
(7)sz該證書到windows中來查看image.png
image.png
實驗3:
當不想要這些證書時,刪除證書的步驟
(1)首先創建吊銷文件序列號
echo 01 > /etc/pki/CA/crlnumber
(2)openssl ca -revoke /etc/pki/CA/newcerts/99.pem——序列號
(3)更新證書吊銷列表
openssl ca -in /etc/pki/CA/crl/crl.pem
(4)最后通過查看吊銷列表來確定是否刪除成功
openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
二.ssh應用
ssh:安全遠程登錄 使用的默認的端口為22
(一)具體的軟件實現:
OpenSSH: ssh協議的開源實現,CentOS默認安裝
dropbear:另一個開源實現 ?
(二)SSH協議版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:雙方主機協議選擇安全的MAC方式
基于DH算法做密鑰交換,基于RSA或DSA實現身份認證 ?
ssh的配置文件分為客戶端配置文件和服務端配置文件
客戶端:/etc/ssh/ssh_config
服務端:/etc/ssh/sshd_config
(三)ssh的用法
ssh -p:指定端口連接
ssh -b :指定以某ip地址來連接遠程ip:ssh -b 192.168.136.178 192.168.136.177——用178的地址來連接其他ip(針對客戶端主機上一個網卡設置兩個ip地址的情況)
(四)登錄方式:
基于用戶登錄口令實現
基于KEY的實現
(1)基于用戶登錄
需要輸入口令
實現原理
1 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶 ?
2 用戶會根據服務器發來的公鑰對密碼進行加密 ?
3 加密后的信息回傳給服務器,服務器用自己的私鑰解密, 如果密碼正確,則用戶登錄成功,不正確則要重新驗證
(2)基于key的驗證
步驟
1 在客戶端生成密鑰對
ssh-keygen -t rsa -p ' '(表示不加密) -f——后跟路徑,可以不寫默認路徑為~/.ssh/id_rsa
2 把公鑰文件傳輸到要連接的服務器的家目錄
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.136.134
3 對私鑰加密 ssh-keygen -p
設置成功后以后再連接其他遠程主機的時候只需要輸入私鑰密碼即可
image.png
4 如果私鑰密碼也不想輸入,可以臨時開啟一個代理,只需要第一次連接后輸入一次私鑰密碼,以后連接就不需要了
ssh-agent bash
ssh-addimage.png
實驗在xshell中實現基于key的方式登錄
1打開x-shell軟件的工具選項,選擇如圖
image.png
2 選擇秘鑰類型image.png
3 自動生成隨機數后,點擊下一步image.png
4 設置加密口令,和用戶名稱并保存文件到桌面上
image.png
5 通過rz命令將文件導入x-shell 通過cp id_rsa_1024_用戶名 .ssh/autorized_keys
6選擇用戶登錄方式
image.png
基于ssh端口轉發的應用
(一)ssh的作用:
5此時‘隧道建立成功’,centos6可以通過redhat5突破防火墻的設置與7進行連接
SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。 但是,SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發 ,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道” (tunneling),這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通 道來進行傳輸而得名。例如,Telnet,SMTP,LDAP 這些 TCP 應用均 能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此 同時,如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊 ?
SSH 端口轉發能夠提供兩大功能: ?
加密 SSH Client 端至 SSH Server 端之間的通訊數據 ?
突破防火墻的限制完成一些之前無法建立的 TCP 連接
(1)遠程轉發
設計拓撲關系,以三個主機為例子,主機分為A,B,C。其中A主機為外部主機,B作為跳轉機,C為目標主機
實驗目的:
假設B與C在同一個局域網中,中間有防火墻作為保護,而A屬于外網中的一個主機,它無法直接連接C機器,所以通過SSH策略來實現
實現步驟:
1 首先選擇3個虛擬機,centos7,centos6,redhat5
2 檢查三個主機之間的聯通,centos6為外部主機,在centos7中對centos6開啟防火墻策略:iptables -A INPUT -s 192.168.25.188 -j REJECT
3 確認redhat5沒有9527端口打開,此時在該虛擬機上執行
ssh -R 9527:192.168.25.199:25 -Nf 192.168.25.188
此時9527端口會在centos6中打開,而不是在本機上打開
4 在centos6中執行telnet 127.0.0.1 9527
image.png
image.png
(2)本地轉發
以centos7作為外部主機,以redhat5作為中間跳轉機
1 首先在centos6上對centos7設置防火墻策略
iptables -A INPUT -s 192.168.25.199 -j REJECT
此時centos6無法直接和centos7連接
2 在centos7本機上執行ssh -L 9527:192.168.25.188:23 -Nf 192.168.25.80
3 telnet 127.0.0.1 9527image.png
(3)動態端口轉發:
實現功能:當用firefox訪問internet時,本機的1080端口做為代理服務 器,firefox的訪問請求被轉發到sshserver上,由sshserver 替之訪問internet
1 在centos7對centos6設置防火墻策略,使6無法連接
2 在6上執行 ssh -D 1080(端口) 192.168.25.80(redhat5)
3 執行 curl --socks5 127.0.0.1 http://192.168.25.199