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.178linux.com/77269