openssl
-
傳輸層協議:TCP,UDP,SCTP
port:進程地址,進程向內核注冊使用某端口(獨占)- 同一主機上的進程間通信:IPC, message queue, shm, semerphor
-
不同主上的進程間通信:socket
cip:port <– –> sip:port
cip:55673 <– –> sip:80
-
安全的目標:
保密性:confidentiality
完整性:integrity
可用性:availability -
攻擊類型:
威脅保密性的攻擊:竊聽、通信量分析;
威脅完整性的攻擊:更改、偽裝、重放、否認
威脅可用性的攻擊:拒絕服務(DoS) -
解決方案:
技術(加密和解密)、服務(用于抵御攻擊的服務,也即是為了上述安全目標而特地設計的安全服務)-
加密和解密:
傳統加密方法:替代加密方法、置換加密方法
現代加密方法:現代塊加密方法 -
服務:
認證機制
訪問控制機制
-
加密和解密:
密鑰算法和協議
-
對稱加密
公鑰加密
單向加密
認證協議 -
對稱加密:加密和解密使用同一個密鑰;
DES:Data Encryption Standard;
3DES:Triple DES;
AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits)
Blowfish
Twofish
IDEA
RC6
CAST5-
特性:
1、加密、解密使用同一個密鑰;
2、將原始數據分割成為固定大小的塊,逐個進行加密; -
缺陷:
1、密鑰過多;
2、密鑰分發困難;
-
-
公鑰加密:密鑰分為公鑰與私鑰
- 公鑰:從私鑰中提取產生;可公開給所有人;public key
-
私鑰:通過工具創建,使用者自己留存,必須保證其私密性;secret key;
-
特點:用公鑰加密的數據,只能使用與之配對兒的私鑰解密;反之亦然;
-
用途:
數字簽名:主要在于讓接收方確認發送方的身份;
密鑰交換:發送方用對方公鑰加密一個對稱密鑰,并發送給對方;
數據加密 -
算法:RSA, DSA, ELGamal
DSS: Digital Signature Standard
DSA:Digital Signature Algorithm
-
單向加密:即提出數據指紋;只能加密,不能解密;
- 特性:定長輸出、雪崩效應;
- 功能:完整性;
-
算法:
md5:Message Digest 5, 128bits
sha1:Secure Hash Algorithm 1, 160bits
sha224, sha256, sha384, sha512
-
密鑰交換: IKE(Internet Key Exchange)
-
公鑰加密
-
加密和發送過程:
1、發送方使用單向加密的算法,計算出數據的特征碼
2、發送方用自己的私鑰加密這段特征碼,并將結果附加到數據后面;
3、發送方生成一個臨時的對稱密鑰,并使用對稱密鑰加密這整段數據
4、發送方獲取到接收方的公鑰,并使用對方的公鑰加密剛才生成的臨時的對稱密鑰,并附加到整個數據后面;
5、把整個數據發送給接收方; -
解密過程:
1、接收方先使用自己的私鑰解密這段加密了的對稱密鑰
2、用對稱密鑰解密這整段加密的內容
3、用發送方的公鑰去解密數據內的特征碼,能解密說明發送方的身份得到驗證
4、接收方再用同樣的對稱加密算法,去計算這段數據的特征碼,并與解密出來的特征碼進行比較;如果相同,數據的完整性的到驗證;否則,說明數據出現了問題
5、所以,保密性、完整性同時完成了身份驗證; -
此加密解密的過程過程仍然有漏洞,因為接受和發送雙方都不知道對方,會產生中間人攻擊;
漏洞:雙方無法可靠獲取對方的公鑰;因此,產生了雙方公認的第三方可靠機構CA;
-
-
DH(Deffie-Hellman)
A:p, g B:p, g A: x --> p^x%g ==> B A: (p^y%g)^x=p^yx%g B: y --> p^y%g ==> A B: (p^x%g)^y=p^xy%g
-
PKI:Public Key Infrastructure
-
公鑰基礎設施:
簽證機構:CA
注冊機構:RA
證書吊銷列表:CRL
證書存取庫: -
X.509v3:定義了證書的結構以及認證協議標準
版本號
序列號
簽名算法ID
發行者名稱
有效期限
主體名稱
主體公鑰
發行者的惟一標識
主體的惟一標識
擴展
發行者的簽名 -
公鑰加密中的驗證證書的內容:
證書的簽發者
證書的內容
證書在有效期內
證書內的名字和要通信的主機的名字要保持一致
證書沒有被吊銷
SSL:Secure sockets Layer
Netscape: 1994
V1.0, V2.0, V3.0
-
SSL會話主要三步:
客戶端向服務器端索要并驗正證書;
雙方協商生成“會話密鑰”;
雙方采用“會話密鑰”進行加密通信;-
第一階段:ClientHello:
支持的協議版本,比如tls 1.2;
客戶端生成一個隨機數,稍后用戶生成“會話密鑰”
支持的加密算法,比如AES、3DES、RSA;
支持的壓縮算法; -
第二階段:ServerHello
確認使用的加密通信協議版本,比如tls 1.2;
服務器端生成一個隨機數,稍后用于生成“會話密鑰”
確認使用的加密方法;
服務器證書; -
第三階段:
驗正服務器證書,在確認無誤后取出其公鑰;(發證機構、證書完整性、證書持有者、證書有效期、吊銷列表)
發送以下信息給服務器端:
一個隨機數;
編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送;
客戶端握手結束通知; -
第四階段:
收到客戶端發來的第三個隨機數pre-master-key后,計算生成本次會話所有到的“會話密鑰”;
向客戶端發送如下信息:
編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送;
服務端握手結束通知;
-
TLS: Transport Layer Security
IETF: 1999
V1.0, V1.1, V1.2, V1.3
-
分層設計:
1、最底層:基礎算法原語的實現,aes, rsa, md5
2、向上一層:各種算法的實現;
3、再向上一層:組合算法實現的半成品;
4、用各種組件拼裝而成的各種成品密碼學協議軟件;
協議的開源實現:OpenSSL
-
OpenSSL由三部分組成:
libencrypto庫
libssl庫
openssl多用途命令行工具
libcrypto, libssl主要由開發者使用;
openssl:多用途命令行工具; -
許多子命令,分為三類:
標準命令
消息摘要命令(dgst子命令)
加密命令(enc子命令)-
標準命令: enc, ca, req, genrsa, …
-
對稱加密:
工具:openssl enc, gpg
支持的算法:3des, aes, blowfish, towfish-
enc命令:
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
-
enc命令:
-
單向加密:
工具:openssl dgst, md5sum, sha1sum, sha224sum, …dgst命令:
~]# openssl dgst -md5 /PATH/TO/SOMEFILE -
生成用戶密碼:
工具:passwd, openssl passwdopenssl passwd -1 -salt SALT
-
生成隨機數(SALT):
工具:openssl rand~]# openssl rand -hex NUM
~]# openssl rand -base NUM
-
-
公鑰加密:
-
加密解密:
算法:RSA,ELGamal
工具:openssl rsautl, gpg -
數字簽名:
算法:RSA, DSA, ELGamal
工具:openssl rsautl, gpg -
密鑰交換:
算法:DH -
生成密鑰:
- 生成私鑰: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
- 提出公鑰: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
-
加密解密:
-
-
Linux系統上的隨機數生成器:
-
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞;
-
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞;偽隨機數不安全;
-
熵池中隨機數的來源:
硬盤IO中斷時間間隔;可利用拷貝數據增加隨機數;
鍵盤IO中斷時間間隔;可連續敲擊鍵盤增加隨機數;
-
CA
-
建立私有CA:
openssl
OpenCA(從openssl發展而來) -
openssl命令:
配置文件:/etc/pki/tls/openssl.cnf -
在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可;
步驟:-
生成私鑰;
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
-
生成自簽證書;
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 -new:生成新證書簽署請求; -x509:生成自簽格式證書,專用于創建私有CA時; -key:生成請求時用到的私有文件路徑; -out:生成的請求文件路徑;如果自簽操作將直接生成簽署過的證書; -days:證書的有效時長,單位是day;
-
為CA提供所需的目錄及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} (centos 6上使用,7上自己生成) ~]# touch /etc/pki/CA/{serial,index.txt} ~]# echo 01 > /etc/pki/CA/serial
-
生成私鑰;
-
要用到證書進行安全通信的服務器,需要向CA請求簽署證書:
步驟:(以httpd為例)-
用到證書的主機生成私鑰;
~]# mkdir /etc/httpd/ssl ~]# cd /etc/httpd/ssl ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
-
生成證書簽署請求
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
證書簽署請求中主要是個人信息;密碼可以不用設置,主要是保護個人信息,如設置則需將密碼交給CA機構;
將請求通過可靠方式發送給CA主機;
-
在CA主機上簽署證書;
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
查看證書中的信息:
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
-
用到證書的主機生成私鑰;
-
吊銷證書:
步驟:-
客戶端獲取要吊銷的證書的serial(在使用證書的主機執行):
~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject -
CA主機吊銷證書
先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致;
吊銷:
~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
其中的SERIAL要換成證書真正的序列號; -
生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
~]# echo 01 > /etc/pki/CA/crlnumber -
更新證書吊銷列表
~]# openssl ca -gencrl -out thisca.crl
查看crl文件:
~]# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
-
客戶端獲取要吊銷的證書的serial(在使用證書的主機執行):
Openssh
telnet:
-
C/S,23/tcp
telnet的登錄,使用普通用戶登錄;有必要時使用su|sudo切換至root用戶;-
CentOS 6:
Server: telnet-server
Client: telnet
服務進程有兩種類型: - 獨立守護進程:自我管理;
-
超級守護進程:xinetd,服務器托管者,用于托管其它瞬時守護進程;自己是獨立守護進程;
瞬時守護進程:非自我管理,而是由“超級守護進程”代為管理;
xinetd配置文件:/etc/xinetd.conf, /etc/xinetd.d/* -
CentOS 7:(telnet由systemd托管)
Server: telnet-server
Client: telnet
-
CentOS 6:
ssh
-
ssh:Secure SHell,
C/S: 22/tcp,安全地遠程登錄-
Server:OpenSSH(sshd)
Client:OpenSSH(ssh, scp),- Windows: xshell, securecrt, sshsecureshellclient, putty;
-
ssh protocol version:
V1:不安全, man-in-middle
V2: -
主機認證:需要用到主機認證密鑰;由服務器端維護和提供;
用戶認證:-
基于口令的認證;
基于密鑰的認證;
用戶提供一對兒密鑰,私鑰保留在客戶端,公鑰保留于遠程服務器端的用戶家目錄下;
-
基于口令的認證;
-
OpenSSH:
-
sshd:配置文件 /etc/ssh/sshd_config
ssh: 配置文件 /etc/ssh/ssh_config -
客戶端程序:
ssh [options] [user@]host [COMMAND]
ssh [-l user] [options] host [COMMAND]-
省略用戶名:使用本地用戶名作為遠程登錄的用戶名;
-
常用選項:
-l user:以指定的用戶登錄遠程主機;
-p port:用于指明遠程服務器的端口;
-X:支持X11轉發;
-Y:支持信任的X11轉發;-
X:協議; x-window, C/S
X11轉發的作用:在本地顯示遠程主機上的圖形窗口;前提:本地是X圖形界面,或者提供了x service;
-o StrictHostKeyChecking=no
-
X:協議; x-window, C/S
-
接收的所有認可的服務器列表:
~/.ssh/known_hosts -
ssh遠程連接服務器時的配置選項,定義在/etc/ssh/ssh_config配置文件中;HOST patttern
-
ssh支持的用戶認證方式:
-
基于口令的認證;
基于密鑰的認證;-
在本地主機生成一對兒密鑰:
ssh-keygen [-q] [-b bits] [-t type] [-f output_keyfile] [-P passphrase]
-t {rsa|ecdsa|dsa}:公鑰加密算法類型;
-b bits:指明密鑰長度;
-P passphrase:私鑰加密密碼;
-f output_keyfile:生成密鑰的保存位置; -
在本地主機上,將公鑰復制到要登錄的遠程主機的某用戶的家目錄下的特定文件中(~/.ssh/authorized_keys)
ssh-copy-id [-i [identity_file]] [-p port] [-o ssh_option] [user@]hostname -
測試
ssh user@host
-
-
-
-
scp命令: 基于ssh連接完成復制
scp [options] SRC… DEST/
scp [options] SRC DEST-
存在兩種使用情形:
PULL: scp [options] [user@]host:/PATH/TO/SOMEFILE /PATH/TO/SOMEFILE
PUSH: scp [options] /PATH/TO/SOMEFILE [user@]host:/PATH/TO/SOMEFILE-
常用選項:
-r:遞歸復制;
-p:保持原文件的權限信息;
-q:靜默模式;
-P PORT:指明遠程主機ssh協議監聽的端口;
-
常用選項:
-
存在兩種使用情形:
-
sftp命令:
ftp:file transfer protocol,是一種明文傳輸;-
安全的文件傳輸機制:
ftps: ftp over ssl
sftp: ftp over ssh -
sftp:
C/S架構
S:由sshd服務進程管理,是sshd的一個子系統,在centos系統上的openssh上,默認為啟動狀態; /usr/libexec/openssh/sftp-server
C:即sftp; - 連接至遠程主機: sftp user@host
-
安全的文件傳輸機制:
-
sshd(服務器端):
-
配置文件:/etc/ssh/sshd_config
-
格式:配置指令 值
常用指令:
Port 22
ListenAddress 0.0.0.0
Protocol 2
PermitRootLogin yes
UseDNS no -
手冊頁:
man sshd_config
man sshd
man ssh_config
man ssh -
限制可登錄的用戶(配置文件):
AllowUsers user1 user2 user3 …
AllowGroups grp1 grp2 …
DenyUsers user1 user2 …
DenyGroups grp1 grp2 …
-
-
CentOS 6:
服務腳本:/etc/rc.d/init.d/sshd -
CentOS 7:
Systemd Unit File:/usr/lib/systemd/system/sshd.service
-
-
并行的客戶端工具:
pssh: epel
pssh
pscp -
ssh協議的另一個實現:dropbear
輕量化的實現方案,多用于嵌入式環境中;-
常用工具:
-
dbclient:ssh協議客戶端程序
dbclient [options] [user@]host[/port][,[user@]host/port],…] [command] -
dropbearkey:主機密鑰生成工具
dropbearkey -t -f [-s bits]
/etc/dropbear/
-
dbclient:ssh協議客戶端程序
-
常用工具:
-
服務端程序:
dropbear
-p [IP:]PORT
-F: 前臺
-E:將日志發往錯誤輸出 -
ssh服務的使用:
1、不要使用默認端口; 2、禁止使用protocol version 1; 3、限制可登錄的用戶; 4、設定空閑會話超時時長; 5、利用防火墻設置ssh訪問策略; 6、僅監聽特定的IP地址; 7、基于口令認證時,使用強密碼策略; # tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs 8、使用基于密鑰的認證; 9、禁止使用空密碼; 10、禁止root用戶直接登錄; 11、限制ssh的訪問頻度和并發在線數; 12、做好日志,經常分析; /var/log/secure
原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/77269