1、加密算法和协议类型:
对称加密:任意加密数据块和流的内容,加密和解密用同一个密码。
通常明文(clear text)通过算法和密钥生成密文,再由接受者用相同的密钥和算法解密获取明文。
算法:(DES、3DES、AES现在使用比较广、Blowfish、Twofish、IDEA、RC6、CAST5)
特性:加密、解密使用同一口令。将明文分隔成固定大小的块,逐个进行加密
缺陷:密钥过多、密钥传输不安全、密钥交换、身份验证。
公钥加密:非对称加密,加密解密用不同密码分公钥和私钥,公钥是从私钥中提取,公钥可以�o别人,私钥保密。
密钥:公钥和私钥是成对出现的。公钥包含在私钥中,公钥称为public key、私钥为secret key,由发起者对接受者索要公钥,用公钥加密数据后发送给接受者。接受者用算法和私钥解密。运用场景:身份认证(认证协议)、密钥交换(DH算法)。
缺陷:加密、解密时间过长一般不用于简单通信,大致是对称加密的1000倍
单项加密:数据完整性算法,抽取数据特征码并且在二次抽取后跟此前特征码做比较以确保数据没有被窜改。
单项机密也叫数据完整性校验,定长输出、雪崩效应。单项加密有这几种方式:MD5、SHA1、SHA256、SHA384、SHA512
认证协议:用来确定通信方的真实性。
发起者用单项算法计算数据的特征码,用自己的私钥计算特征码附加在数据后面,在用对称密钥对整个包(数据和加特征码)进行加密,并用接受者的公钥加密对称加密密码,附加在整个包中一并发给对方。接受者用自己的私钥解密获取对称加密密码,得到密码后解密整个包获得数据和特征码,在用相同的算法计算特征码,用对方的公钥解密数据验证对方身份,用对方计算结果(特征码)和解析结果(特征码)进行对比,来验证数据的完整性。
2、ca最新版证书,x.509: 定义了证书结构和认证协议标准;证书格式大概保函(版本号、证书的序列号、算法和参数、发行者名称、有效期限、主体名称(此证书的拥有者)、公钥、发行者id、主体id、ca签名)
PKI:公开密钥基础设施(Public Key Infrastructure),是现在互联网安全基础规范
ssl:安全套接字层(Secure Socket Layer)目前使用lssv3版本。浏览器与Web服务器之间的身份认证和加密数据传输。 (应用层、传输层、网络层、链路层、物理层)工作在传输层和各应用层之间,用户可以选择是否使用ssl进行传输。如果http使用ssl协议将调用ssl函数库端口也会发生变化。http(80/tcp) --> ssl --> https(443/tcp)
1.鉴定证书是否合法、2、验证证书的完整性、3、验证主机的名称和申请者名称是否相同、4、检查证书的有效期、5、检查证书是否已经被吊销,这些步骤就称为PKI
ssl会话建立模型。在基于tcp/ip协议建立3次握手后,服务端会把ca证书发送给客户端,客户端得到证书后通过ca公钥进行解密ca签名,能解密证明该证书是可信任的、把解密出来的数据和重新计算出来的特征码对比对确保完整性、验证主机的名称和申请者名称是否相同,验证通过后客户端会取得服务器端公钥信息,客户端用公钥生成个一次性的对称加密密码发给服务器端。服务器端获取密码后加密网页数据发给客户端。
Linux:gpg, (pgp); openssl
openssl:
openssl: 多用途命令行工具,各功能分别使用子命令实现
libcrypto: 公共加密库
libssl: ssl协议的实现
对称加密工具:gpg、openssl enc
算法:DES, 3DES, AES, Blowfish, Twofish, RC6, idea, CAST5
openssl命令选项:
enc:对称加密程序
-e:指定为加密,可以不写默认为加密。
-des3:指定算法算法
-salt:默认设置,可以不写。生成一段字符串放在密码最前面进行加密,提高解密难度。
-a:基于base64处理数据。加密结果进行base64编码处理
-in:读取那个文件进行加密
-out:输出到那里
-d:指定为解密
加密文件: openssl enc -e -des3 -a -salt -in test.sh -out ./test.txt
解密文件:openssl enc -d -des3 -a -salt -in test.txt -out ./test.sh
单项加密:单向的(One-Way)、没有冲突的(Collison-free)
算法:md5: 128bits、sha1: 160bits、sha256、sha384、sha512
工具:md5sum, sha1sum, openssl dgst,
openssl dgst:实现单项加密
-md5:用md5方式加密
-sha1:sha1方式加密
-out:加密后密码保存到那里
示例:openssl dgst [-md5|-sha1] [-out /path/to/filename] /path/from/somefile
openssl dgst -md5 test.sh 或openssl dgst -md5 -out ./123a test.sh
md5sum test.sh或openssl dgst -sha1 test.sh
openssl:MAC:消息摘要码,单向加密的一种延伸类的应用,用于实现在网络通信中保证所传输的数据的完整性
用户密码:openssl passwd
-1:md5加密、
-salt:自己指定附加信息。
例如:openssl passwd -1 -salt asdqwezx 123456:123456为密码,asdqwezx 为-salt附加信息
生成随机数:openssl rand -base64 4或者openssl rand -hex 4。根据指定编码生成8位随机数。指定4就是8位
例如:openssl passwd -1 -salt `openssl rand -base64 4` 123456 随机生成密码串。
公钥加密:
算法:RSA, EIGamal
工具:gpg, openssl rsautl
生成密钥:
(umask 077; openssl genrsa -out /path/to/keyfile NUMBEROFBITS )
(umask 077;openssl genrsa -out ./mykey 2048)生成一个只有当前用户可以读取的2048字节mkkey私钥文件
提出公钥:
openssl rsa -in ./mykey -pubout,-pubout表示提取公钥信息,以上面私钥文件生成公钥
3、openssl建立私有CA:配置文件在:/etc/pki/tls/openssl.cnf
生成密钥、自签证书、
节点:生成密钥对儿、生成证书签署请求、把请求发送给CA
CA:验正请求者信息、签署证书、把签好的证书发送给请求者
建立CA服务器:
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)生成私钥,文件名根据配置文件中命名
自签证书:
req: 生成证书签署请求
-news: 新请求
-key /path/to/keyfile: 指定私钥文件
-out /path/to/somefile:输出文件到那里
-x509: 生成自签署证书
-days n: 有效天数
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
初始化工作环境:
touch /etc/pki/CA/{index.txt,serial}
echo 01 > /etc/pki/CA/serial
节点申请证书:
生成密钥对儿:(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。在填写详细信息是需要和服务器建立的详细信息一致。
把签署请求文件发送给CA服务:scp
CA签署证书:
验正证书中的信息:
签署证书:openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
发送给请求者:
吊销证书:
申请吊销证书的节点,获取证书号:openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject
CA:
根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致
吊销证书:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
生成吊销证书的编号(如果是第一次吊销需创建文件):echo 00 > /etc/pki/CA/crlnumber
更新证书吊销列表:openssl ca -gencrl -out /etc/pki/CA/crl/thisca.crl
如果需要,查看crl文件的内容:openssl crl -in /path/to/crlfile.crl -noout -text
博客作业:加密、解密图文并茂说明白;openssl自建CA的详细过程
4、telnet & ssh
早期远程连接计算机都是用telnet方式,它工作在tcp23端口上,因为没有考虑到安全,所以在连接时所有通讯都以明文方式实现。它禁止管理直接登录。它的安装包有telnet客户端和telnet-server端,进程被超级进程xinetd管理
ssh(secure shell)出现是为了弥补telnet不安全连接,它工作在tcp22端口上,现在我们使用的都为sshv2版本。
sshv2基于双方主机的协商选择使用最安全的MAC方式:
加密机制及MAC机制由双方协商选定
基于DH实现密钥交换,基于RSA或DSA实现身份认证
客户端通过检查服务器端的主机密钥来判断是否能够继续通信
OpenSSH: 是一组用于安全地访问远程计算机的连接工具,它会利用一个密钥指纹系统来验证服务器的真实性,在第一次连接时, 用户会被要求确认连接主机信息,之后连接会验证预先保存下来的密钥指纹,指纹保存在 ~/.ssh/known_hosts 中, openssl是c/s架构,服务端为sshd监听在22号端口上,客户端用随机端口进行连接。
openssh的客户端组件:
ssh: 配置/etc/ssh/ssh_config,如ssh登录不指定用户,默认为本机已登录用户进行连接
ssh [username@]host [COMMAND]例如:ssh [email protected]
ssh -l username host [COMMAND]例如:ssh -l xj 192.168.146.137 'ls /opt'
-p:指定端口:例如:ssh -p 5122 -l xj192.168.146.137
scp:利用ssh协议在主机之间实现安全文件传输的工具
源文件在本机,目标为远程
scp /etc/fstab 192.168.146.137:/tmp
源文件在远程,本地为目标
scp 192.168.146.137:/etc/fstab /tmp
-r: 复制目录时使用
-p: 保持源文件的元数据信息
-q: 静默模式不显示传输过程
-p PORT: 指定ssh协议监听的端口
sftp:基于ssh的ftp服务
sftp USERNAME@HOST例如:sftp [email protected]
openssh的服务器端:sshd
配置文件:/etc/ssh/sshd_config
服务脚本:/etc/rc.d/init.d/sshd
脚本配置文件:/etc/sysconfig/sshd
sshd认证方式:
基于口令的认证。
基于密钥的认证:
ssh-keygen -t rsa。以rsa方式生成密钥。保存在当前用户家目录下的.ssh目录下私钥名:id_rsa、公钥为:id_rsa.pub,把公钥传送到想无需密码登录的服务器上。
-f /path/to/somefile: 密钥文件保存位置和密码名称
-P '': 在执行 ssh-keygen -t rsa时说明不用再私钥上添加任何密码
例如:ssh-keygen -t rsa -f /root/.ssh/id_rsa1 -P ''
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys。把公钥信息追加到authorized_keys文件中,之后登录就无需密码 或者使用:ssh-copy-id -i id_rsa.pub [email protected]。用一个命令完成公钥传送到另外一台主机上并自动生成authorized_keys文件。-i:指定读取公钥,不指定用户默认为当前登录用户
ssh最佳实践:
不要使用默认的22号端口
不要使用protocol 1
限制可登录的用户(黑白名单选用一个即可)
白名单:AllowUsers user1
AllowGroups grp1
黑名单:
DenyUsers
DenyGroups
设定空闲会话超时时长
ClientAliveInterval 300
ClientAliveCountMax 0
利用防火墙设置ssh访问策略
仅监听在特定的IP地址,而非本机所有的IP地址
使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs lastb:可以查看登录失败用户的信息。
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度
做好日志,经常分析