一、知識整理
1、不安全的傳統協議:
telnet、FTP、POP3等:不安全的密碼;
http、smtp、NFS等:不安全信息;
Ldap、NIS、rsh等:不安全驗證。
設計基本原則:
使用成熟的安全系統;
以小人之心度輸入數據;
外部系統是不安全的;
最小授權;
減少外部接口;
缺省使用安全模式;
在入口處檢查;
安全不是似是而非;
從管理上保護好系統。
2、對稱加密算法:加密和解密使用同一個密鑰:
非對稱加密算法:密鑰成對出現,公鑰和私鑰;
功能:數字簽名:主要用于讓接收方確認發送方身份;
對稱密鑰交換:發送方用對方公鑰加密一個對稱密鑰后發送給對方;
數據加密:適合加密較小數據。
單向加密:即提出數據指紋;只能加密不能解密。
常見算式:md5:128位;sha1:160位;sha224;sha256;sha384;sha512。
3、PKI:public key infrastructure公鑰基礎設施;
簽證機構:CA
注冊機構:RA
證書吊銷列表:CRL
證書存取庫
X.509:定義了證書的機構以及認證協議標準;
版本號;序列號;簽名算法;頒發者;有效期限;主體名稱;主體公鑰;CRL分發點;擴展信息;發行者簽名。
4、TCP/IP模型中的SSL/TLS協議:
Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換。
ChangeCipherSpec協議:一條消息表明握手協議已經完成。
Alert協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning兩個級別,fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續,只是會給出錯誤警告。
Record協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等。
HTTPS協議:就是HTTP協議和SSL/TLS協議的組合。HTTP over SSL或HTTP over TLS,對http協議的文本數據進行加密處理后,成為二進制形式傳輸。
5、命令行中~再按兩下tab鍵可以列出當前系統所有用戶。
[root@centos68 CA]# ~ ~abrt/ ~bin/ ~games/ ~halt/ ~nfsnobody/ ~oprofile ~rpcuser/ ~adm ~daemon/ ~gejingyi/ ~lp/ ~nobody/ ~apache/ ~dbus/ ~gopher ~mail/ ~ntp/ ~avahi-autoipd ~ftp ~haldaemon/ ~mysql/
6、ssh連接:基于非對稱加密算法認證:
[root@localhost ~]# cd .ssh/ [root@localhost .ssh]# cat known_hosts 10.1.252.134 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtFw7wor7A6UqsfoOnfbsbyQ9ibKAz8IHkloNYkFmPiQCFFVcic461vPyu5S5rPDIgZIhEsox7jr21WH3TvPblnBtJby4FZ4QptCt/+rdQrN2Z/fvAyrVgxbvgFe/sa/xLsPhcm/IYJYa1d4pBq3nzKb2oac9ZWMEJL9sHD3kmlTl5ff3AUG+5e8E1PQ+8Bf3e/mLsEreory6ZBuOgz/OA1uzXn+xzATD3XIE3cN5kBzvHLVK7haBhDIBspP1aGWwf3PZDydLNepLsnhZITFyCH9GxX86IXdsmI9XwJpOSYoyRTWTf3ucReEt9+g9kXG3Tv9+MBDtD850QXkKvXgPMw==
若此IP的主機更改,便警告并無法連接。當將文件中之前保留的ssh連接公鑰記錄刪除,便可繼續連接。
[root@localhost .ssh]# ssh 10.1.252.134 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the RSA key sent by the remote host is e4:17:b3:40:d1:75:78:27:2b:d5:51:eb:2a:5a:f4:0e. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending RSA key in /root/.ssh/known_hosts:1 RSA host key for 10.1.252.134 has changed and you have requested strict checking. Host key verification failed.
當有人將服務器端的/etc/ssh/ssh_host_rsa_key的私鑰竊取并放入相同目錄,再更改IP后,便可冒充客戶端。
7、gpg實現對稱加密:
對稱加密file文件:gpg -c file
[root@centos68 ~]# ls f1.gpg f1.gpg
在另一臺主機上解密file:gpg -o file -d file.gpg,然后輸入密碼解密
[root@localhost tmp]# gpg -o f1 -d f1.gpg gpg: 已創建目錄‘/root/.gnupg’ gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立 gpg: 警告:在‘/root/.gnupg/gpg.conf’里的選項于此次運行期間未被使用 gpg: 鑰匙環‘/root/.gnupg/secring.gpg’已建立 gpg: 鑰匙環‘/root/.gnupg/pubring.gpg’已建立 gpg: 3DES 加密過的數據 Passphrase **************** [root@localhost tmp]# cat f1 123654789987745321
gpg實現公鑰加密:在B主機上用公鑰加密,在A主機上解密:
在A主機上生成密鑰對:
[root@localhost tmp]# gpg --gen-key gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
在A主機上查看公鑰:
[root@localhost tmp]# gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 1024R/EBC6624E 2016-09-22 [有效至:2017-09-21] uid gejinigyi (ge) sub 1024R/83B9FD09 2016-09-22 [有效至:2017-09-21]
在A主機上導出公鑰ge.pubkey:
[root@localhost tmp]# gpg -a --export -o ge.pubkey [root@localhost tmp]# ls ge.pubkey
從A主機上復制到B主機:
在B主機上生成密鑰對(不生成也可以):
[root@localhost tmp]# gpg --gen-key [root@localhost tmp]# gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 2048R/689BEA48 2016-09-21 [expires: 2017-09-21] uid gejingyi (ge) sub 2048R/589D02E0 2016-09-21 [expires: 2017-09-21]
在B主機上導入公鑰(注意:時間必須同步,否則報錯):
[root@localhost tmp]# gpg --import ge.pubkey gpg: key EBC6624E: public key "gejinigyi (ge)" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) [root@localhost tmp]# gpg --list-key /root/.gnupg/pubring.gpg ------------------------ pub 2048R/689BEA48 2016-09-21 [expires: 2017-09-21] uid gejingyi (ge) sub 2048R/589D02E0 2016-09-21 [expires: 2017-09-21] pub 1024R/EBC6624E 2016-09-22 [expires: 2017-09-21] uid gejinigyi (ge) sub 1024R/83B9FD09 2016-09-22 [expires: 2017-09-21]
加密文件,命令選項中-r之后使用公鑰名稱:
[root@localhost tmp]# gpg -e -r gejinigyi f1 gpg: 83B9FD09: There is no assurance this key belongs to the named user pub 1024R/83B9FD09 2016-09-22 gejinigyi (ge) Primary key fingerprint: 61AC 5A47 FF21 D5DE 02D6 6DAD 2381 6C42 EBC6 624E Subkey fingerprint: BEE9 31F4 9001 184E 6CE2 F573 BD9E 9681 83B9 FD09 It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. Use this key anyway? (y/N) y [root@localhost tmp]# ls f1 f1.gpg ge.pubkey [root@localhost tmp]# file f1.gpg f1.gpg: data
解密文件:復制文件到A主機:
[root@localhost tmp]# gpg -d f1.gpg
輸入密碼;
[root@localhost tmp]# gpg -o f1 -d f1.gpg [root@localhost tmp]# ls f1 f1.gpg ge.pubkey
刪除公鑰和私鑰:先刪除私鑰再刪除公鑰
[root@localhost tmp]# gpg --delete-secret-keys gejinigyi [root@localhost tmp]# gpg --delete-keys gejinigyi
8、scp命令:會覆蓋同名文件,可雙向傳輸。兩種方式:
scp [] [user@]host:/sourcefile /destpath
scp [] /sourcefile [user@]host:/destpath
-C 壓縮數據流
-r 遞歸復制
-p 保持原文件屬性信息
-q 靜默模式
-p PORT 指明remote host的監聽的端口
9、rsync命令:基于ssh和rsh服務實現高效率的遠程系統之間復制文件;使用安全的shell作為傳輸方式。比scp更快,只復制不同的文件。
rsync -av /etc server1:/tmp 復制目錄和目錄下的文件
rsync -av /etc/ server1:/tmp 復制目錄下的所有文件。
-n 模擬復制過程
-v 顯示詳細過程
-r 遞歸復制目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 把符號鏈接文件作為符號文件進行復制,也就是只復制鏈接文件
-L 把軟鏈接文件指向文件復制
-a 存檔模式,相當于-rlptgoD,但不保留ACL(-A)和SELinux(-X)屬性。
將etc目錄復制到250主機的tmp目錄下:
[root@centos68 tmp]# rsync -av /etc 10.1.54.250:/tmp
10、軟件包文件:GPG公鑰簽名:
[root@centos68 serts]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [root@centos68 serts]# rpm -K /media/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm /media/cdrom/Packages/httpd-2.2.15-53.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
11、DMZ:demilitarized zone的縮寫:隔離區;非軍事化區;是為了解決安裝防火墻后外部網絡的訪問用戶不能訪問內部網絡服務器的問題,而設立的一個非安全系統與安全系統之間的緩沖區。該緩沖區位于企業內部網絡和外部網絡之間的小網絡區域內。在這個小網絡區域可以放置一些必須公開的服務器設施,如web服務器、ftp服務器等,另一方面,通過這樣一個DMZ區域,更加有效地保護了內部網絡。
二、命令詳解及事例
1、沒有CA情況下基本的非對稱加密過程:
發送:用單向加密的算法,計算數據的特征碼;并用自己的私鑰加密特征碼生成數字簽名附加在數據后面;用對稱加密算法生成密鑰加密以上所有數據,用對方的公鑰,加密對稱加密后的數據,附加在最后(加密密碼)。
收到:先用私鑰解密附加數據得到對稱密鑰(密鑰交換);用對稱密鑰解密整段數據;用對方的公鑰解密簽名(特征碼);將同樣的(對稱加密算法)算法提取特征碼,與解密的相對比,若相同則數據沒有變化。
2、加密和解密工具:
對稱加密:openssl enc,gpg
支持的算法:3des,aes,blowfish,towfish
[root@centos68 ~]# echo 123654789987745321 > f1 [root@centos68 ~]# ls anaconda-ks.cfg boot.iso f1 f1.awk f2.awk fstab fstab.ciphertext fun.awk myks.cfg [root@centos68 ~]# openssl enc -e -des3 -a -salt -in f1 -out f1.cipher enter des-ede3-cbc encryption password: Verifying - enter des-ede3-cbc encryption password: [root@centos68 ~]# cat f1.cipher U2FsdGVkX1+46zCVv8Q9TJd5/BuWQHjRQhOlSkRPY00gMZMxpfYBzg== [root@centos68 ~]# openssl enc -d -des3 -a -salt -in f1.cipher -out f1 enter des-ede3-cbc decryption password: [root@centos68 ~]# cat f1 123654789987745321
單向加密:工具:md5sum,sha1sum,sha224sum,sha256sum… ,openssl dgst
[root@centos68 ~]# openssl dgst -md5 f1 MD5(f1)= c0d4f5b14dda7b6fe892b09211db9310 [root@centos68 ~]# md5sum f1 c0d4f5b14dda7b6fe892b09211db9310 f1
MAC:Message Authentication Code,單向加密的一種延伸應用,用于實現網絡通信中保證所傳輸數據的完整性機制。HMAC:使用md5或者sha1算法。
[root@centos68 ~]# openssl passwd -1 -salt centos Password: $1$centos$PRRHdg1EjQzR2loDJwcsq/
生成隨機數:openssl rand -base64|-hex NUM
NUM表示字節數;-hex時,每個字符4位,出現的字符數為NUM*2.
[root@centos68 ~]# openssl rand -base64 10 cBMD2C9vkcmaRA== [root@centos68 ~]# openssl rand -base64 5 2VL8/V8=
3、openssl命令:公鑰加密:算法:RSA,ELGamal;工具:gpg,openssl rsautl
數字簽名:算法:RSA,DSA,ELGamal
密鑰交換:算法:DH,DSA,DSS,RSA
生成密鑰對:genrsa;
生成私鑰:openssl genrsa -out /PATH/PRIVATEKEY.FILE NUM_BITS
[root@centos68 ~]# (umask 077;openssl genrsa -out key.pri -des 1024) Generating RSA private key, 1024 bit long modulus ...........................++++++ .....++++++ e is 65537 (0x10001) Enter pass phrase for key.pri: Verifying - Enter pass phrase for key.pri: [root@centos68 ~]# cat key.pri -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-CBC,8D2FB0013606D166 a/oUvxzROvOoKtbKJ9XWUDv1ILw1lEYxdbevlwMbkKys3Y0G79KID+uunb4slTpX hQBwvQLDctxSNoa50AG0EAMfQPa8hJCwn/GvGQ4C1EKW0kzH9CBOx9exAm2qnQE/ n6Q5RM3vmZ7tx1s7ESbxZND9d65xSAXXg8lY4yPbM9iCV4sUdwPyrpR5nm7PgkwP HdEyHmNGmljP3gpMcMtFB6CZmBeICKs65dCtF44S+l10Uw0GteQG6Pfh1j6rFbJm 5LPMnfHcMzzkIk3oQfQVXEokFIXJUK0dr8tqqIkASazMwAQaqhyFrnPKG3a+pwgc 0pZMtCoQvqGVrvklIu69MYQt0SUmQK7ZUfgfaRnw0BAViOF61hXxscLuhFVQyB19 +j5a3ZZPZw41G2SN5qyRtFjwIxS5XXwiBUEsxBW1rNA0cMuk5c8S2ECQD9UI7pT1 CTWtC4cBtYnphC55xRI0ah0ChiONyd6gt8zKEqlnDH/oaXIeORyKg6cz4g6As/VZ FenubpJNeGpWEKsNctEQw4hzJyquDa46y6QhWPZ1O+MyiTDLul4HwaaYCF3bCoUf +h58JRay55R2macrWdzHvdXg78L2nEnYqlvnHW4SZCyGf9SWycrriZJDY4DJMY63 vNvyRJHr2Vlzv524VGjTx9Wp0tEzJPdZ/d27//vNYpnBqp46wGqh3+Mb13XOUi+H QQCHz7V737hscLy3EovLFOx7lYp7crx5d0Jcx0mkdy+jna5CawVqt27wq3DyBfiF Xt/C1O/m65dRI7Q3zA3dh54w3WxVRwFwYtqUHmncFGQ= -----END RSA PRIVATE KEY-----
從私鑰中提取公鑰:
[root@centos68 ~]# openssl rsa -in key.pri -pubout -out key.pub Enter pass phrase for key.pri: writing RSA key [root@centos68 ~]# cat key.pub -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsq3OZlydFcnpVYswYSzW3a2Fq o3CXfzm75ulDLBYMGJBWa0qLYy5Ch9osjCSt4W8eR+HFUVWyWHnCtyZVwbA9Xpwp 2JRq82rznUBOnI2CuMD7GA7UG4CDe+4dqMEeLIQE2kWLWUDki+0vmqe4S91yMOsN YF2G2DZ/p++5Mvl6MQIDAQAB -----END PUBLIC KEY-----
后續見第二部分
原創文章,作者:SilencePavilion,如若轉載,請注明出處:http://www.www58058.com/49811