网络通信安全基础、openssl、openssh

数据安全分为:

保密性:数据保密性、隐私性

完整性:数据完整性、系统完整性

可用性:数据有效性

 

安全攻击分为:

被动攻击:窃听

主动攻击:伪装、重放、消息篡改、拒绝服务

 

安全机制:

加密、数字签名、访问控制、数据完整性、认证交换机制、流量填充、路由控制、公证

 

安全服务:

认证:

访问控制:

数据保密性:连接、无连接、选择域、流量

数据完整性:

不可否认性:

 

 

linux系统:openssl、gpg(pgp协议)

常见密码算法和协议:

对称加密:加密数据流

算法:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CASTS

特点:1、加密和解密使用同一个密钥;2、将原始数据分隔成固定大小的块,逐个进行加密;

缺陷:1、密钥过多;2、密钥分发;

 

公钥加密:密钥是成对儿出现

算法:RSA、DSA、ELGamal

公钥:公开给所有人;public key

私钥:自己留存,必须保证其私密性;secret key

用途:数字签名(主要在于让接收方确认发送方的身份。)、密钥交换(发送方用对方的公钥加密一个对称密钥,并发送给对方。)、数据加密;

特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;

 

单向加密:只能加密,不能解密;提取数据指纹;保证数据的完整性。

算法:md5(128bit)、sha1(160bit)、sha224、sha256、sha384、sha512

特性:1、定长输出;2、雪崩效应;

 

密钥交换:IKE

1、公钥加密:缺陷:密钥在网络传输。

2、DH(Diffie-Hellman):密钥无需在网络传输。

 

 

PKI:公钥基础设施

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库:

 

X.509:定义了证书的结构以及认证协议标准;组成格式如下

版本号

序列号

签名算法ID

发行者名称

有效期限

主体名称

主体公钥

发行者唯一标识

主体的唯一标识

扩展

发行者签名

 

SSL:安全的套接字层

TLS:传输层安全

 

openssl:开源项目;三个组件

openssl:多用途的命令行工具;

libcrypto:公共加密库;

libssl:库,实现了ssl及tls;

 

openssl命令:

openssl version:程序版本号

对称加密:

工具:enc、gpg

算法:3des、aes、blowfish、twofish

enc命令:

加密:# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

解密:# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

 

单向加密:

工具:md5sum、sha1sum、sha256sum、…openssl dgst

# md5sum    /PATH/TO/SOMEFILE

# openssl   dgst   -md5    /PATH/TO/SOMEFILE

 

生成用户密码:

openssl passwd -1 -salt SALT

 

生成随机数:

openssl rand -base64|-hex NUM

NUM:表示字节数;-hex时,每个字符为4位,出现的字符数为NUM*2

 

随机数生成器:

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;

 

生成密钥对儿:

openssl genrsa -out /path/to/privatekey.file NUM_BITS                                  生成私钥

openssl rsa -in /path/to/privatekey.file -pubout > /path/to/publickey.file     提取公钥

例子:

# (umask 077;openssl genrsa -out rsa.private 2048)         生成私钥

# openssl rsa -in rsa.private -pubout >    rsa.public             从私钥提取出公钥

 

 

openssl:开源项目;三个组件

openssl:多用途的命令行工具;

libcrypto:公共加密库;

libssl:库,实现了ssl及tls;

 

PKI:公钥基础设施

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库:

 

建立私有CA:

OpenCA

openssl

 

证书申请及签署步骤:

1、生成申请请求;

2、RA(注册机构)核验

3、CA(签证机构)签署

4、获取证书

 

创建私有CA:openssl的配置文件:/etc/pki/tls/openssl.cnf

(1)创建所需的文件

# touch index.txt

# echo 01 > serial

 

(2)CA自签证书(即生成私钥,签署证书时自动生成公钥,公钥封装为证书)

# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

-new:生成新证书签署请求

-x509:专用于CA生成自签证书

-key:生成请求时用到的私钥文件

-days n:证书的有效期限

-out:证书的保存路径

 

(3)发证

(a)用到证书的主机生成证书请求;

# (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

(b)把请求文件传输给CA;

# scp

(c)CA校验及签署,并将证书发还给请求者;

# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

# scp

 

(4)吊销证书

(a)获取要吊销的证书的serial

# openssl x509 -in /PATH/FROM/CERT_FILE  -noout -serial   -subject

(b)CA先根据客户提交的serial和subject信息来验正与index.txt文件中的信息是否一致

吊销证书:

# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

(c)生成吊销证书的编号(如果是第一次吊销);

# echo 01 > /etc/pki/CA/crlnumber

(d)更新证书的吊销列表文件

# openssl ca -gencrl -out thisca.crl

如果需要,查看crl文件的内容:
# openssl crl -in /path/to/crlfile.crl -noout -text

 

查看证书信息:

# openssl x509 -in /PATH/FROM/CERT_FILE  -noout -text|-subject|-serial

 

 

ssh:secure shell,protocol

openssh:ssh协议的开源实现

dropbear:另一个ssh协议的开源实现

ssh协议版本:

v1:基于CRC-32做mac,不安全,man-in-middle

v2:双方主机协议选择安全的mac方式,基于dh算法做密钥交换,基于rsa或dsa算法实现身份认证;

用户登录认证的两种方式:基于password,基于key。

 

openssh:C/S

C:ssh,scp,sftp

Windows客户端:xshell,putty,securecrt

S:sshd

客户端组件:

ssh,配置文件:/etc/ssh/ssh_config

ssh  [-p port]   [user@]host   [command]

-X:开启x11转发

-Y:支持信任的x11转发

 

linux下基于密钥的认证:

(1)在客户端生成密钥对

# ssh-keygen      -t   rsa     [-P ”]    [-f output_keyfile]

(2)把公钥传输至远程服务器对应用户的家目录

# ssh-copy-id         [-i [identity_file]]       [-p port]      [user@]hostname

(3)测试

windows下基于密钥的认证(xshell):

(1)生成客户端密钥对;

工具—》新建用户密钥生成向导—》生成私钥文件

(2)自行将公钥信息,复制到服务器端的对应用户的.ssh/authorized_keys文件中(该文件权限为600);

 

scp命令:

PULL:scp [options]   [user@]host:/PATH/FROM/SOMEFILE   /PATH/TO/SOMEWHERE

PUSH:scp [options]  /PATH/FROM/SOMEFILE    [user@]host:/PATH/TO/SOMEWHERE

常用option:

-r:递归复制

-p:保持源文件的属性信息

-q:静默模式

-P PORT:指明remote host的监听端口

 

sftp命令:

sftp [user@]host

sftp> help

 

服务器端组件:

sshd,配置文件:/etc/ssh/sshd_config

具体参考# man sshd_config

限制可登陆用户的办法:用户和组名空格分隔

AllowUsers user1 user2 …:用户白名单

AllowGroups:组白名单

DenyUsers:用户黑名单

DenyGroups:组黑名单

 

ssh服务的最佳实践:

1、不要使用默认端口;

2、禁止使用protocol version 1;

3、限制可登陆用户;

4、设定空闲会话超时时长;ClientAliveInterval

5、利用防火墙设置ssh的访问策略;

6、仅监听特定的IP地址;

7、基于口令认证时,使用强密码策略;最好基于密钥认证;

8、禁止使用空密码;

9、禁止root用户直接登录;PermitRootLogin no

10、限制ssh的访问频度和并发在线数;     MaxAuthTries           MaxSessions

11、做好日志,经常分析;

 

ssh协议的另一个实现方式:dropbear

1、# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key

2、# dropbear -p 172.20.120.4:22022 -F -E

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89571

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班