一、知识整理
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.178linux.com/49811