Linux学习日志(十五)

时间:2022-12-13 15:34:04

加密解密及CA

加密方式:

对称加密、公钥加密、单向加密
加密、解密
明文:plaintext,cleartext -->密文 -->

对称加密:

   加密算法+口令
明文 --> 密文

字典攻击
加密方,解密方使用同一个口令
DES(56bits):数据加密标准
3DES
AES(128bits):高级加密标准
Blowfish
Twofish
IDEA
RC6
CAST5
Serpent
特性:
1.加密/解密使用统一口令
2.将原文分割成固定大小的数据块,对这些块进行加密
ECB,CBC

1.口令传输
2.密钥太多

密钥交换:
用户认证:
数据完整性:

密钥交换(IKE:Inernet Key Exchange):DH算法

非对称加密

  加密算法:RSA,EIGmal,DSA
1.密钥交换
2.用户身份认证
单向加密:
抽取数据特征码:
MD5,SHA1,SHA512,CRC-32(循环冗余校验码)
1.完整性,

消息认证算法:MAC(Message Authenntication Codes)
CBC-MAC
HMAC

雪崩效应
定长输出:

PKI:Pubile key Infrastucture 公钥基础设施

openssl gpg

openssl:套件,开源软件

 libcrypto:通用功能的加密库
libssl:用于实现TLX/SSL的功能
openssl: 多功能命令工具
生成密钥,创建数字证书,手动加密解密数据

加密解密技术常用的功能及算法:

对称加密:

 工具:gpg openssl enc
加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher -out 文件

单向加密:

 特性:One-Way
Collision-free:
算法
md5:128bits
sha1:160bits
sha512:512bits
工具:sha1sum,md5sum,openssl dgst
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile

MAC:信息摘要码,单向加密的延伸应用

   应用:用于实现在网络通信中保证所传输的数据完整性
机制:
CBC-MAC
HMAC:使用md5和sha1算法
用户认证:
工具:passwd openssl passwd

公钥加密:公钥加密,私钥解密
密钥对:
公钥:pkey
私钥:skey

算法:RSA,EIGamal

工具:gpg openssl rsautl

数字签名:私钥加密,公钥解密

算法:RSA,EIGamal,DSA

DSA:Digital Signature Algorithm
DSS: Digital Signature standard

密钥交换:IKE
算法:DH(Diffie-Hellman),公钥加密


数字证书:
第三方机构使用一种安全的方式把公钥分发出去
证书格式:x509,pkcs家族
x509格式:
公钥和有效期限:
持有者的个人合法身份信息;(主机名)
证书的使用方式
CA的信息
CA的数字签名

谁给CA发证:自签署证书

用openssl实现私有CA

服务器端:

1.配置文件/etc/pki/tls/openssl.cnf

   (centos 5 需要更改)

2.生成密钥对儿:

        # (umask 077; openssl genrsa -out private/cakey.pem 2048)
如果想查看公钥:
# openssl rsa -in private/cakey.pem -pubout -text -noout

3.生成自签证书

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

4.创建需要的文件:

        # touch index.txt serial crlnumber

5.接收到客户端的信息后

1)CA签署证书

签署:# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days DAYS

2) 将证书传回请求者


##吊销证书:

# openssl ca -revoke /path/to/somefile.crt
客户端端:

用openssl实现证书申请:
1.在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:

        # mkdir /etc/httpd/ssl
# cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024)

2.生成证书签署请求:
# openssl req -new -key httpd.key -out httpd.csr

3.将请求文件发往CA;

openssl补充材料:

openssl中有如下后缀名的文件

    .key格式:私有的密钥
.crt格式:证书文件,certificate的缩写
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

常用证书协议

    x509v3: IETF的证书标准
x.500:目录的标准
SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
PKCS#7: 是封装数据的标准,可以放置证书和一些请求信息
PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

ssh:Secure SHell

 监听tcp协议的22号端口
/etc/services 解析库,进程<->端口
ssh文本协议:字符通信

sshv1,sshv2

由于sshv1是居于CRC-32做MAC,因此,不安全,建议勿用
sshv2 基于双发主机协商选择最安全的MAC实现机制
加密机制和MAC机制是双方协商选定
基于DH实现密钥交换,基于RSA或DAS实现身份认证
客户端通过检查服务端的主机密钥来判断是否与其进一步通信

OpenSSH(C/S)

   Server:监听tcp22
Client:程序
windows客户端:xmanager(xshell)、SecureCRT、putty、sshshellcilent

openssh客户端组件:

ssh
ssh Username@HOST [command]
ssh -l Username HOST [command]
-p port:指定要连入端口

ssh认证机制:
基于口令
基于密钥
客户端在本地生成一对密钥
客户端将公钥复制到服务器,要登陆的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2中
配置过程:
1.生成密钥对,客户端
ssh-key -t rsa
生成的密钥默认保存至当前家目录下的.ssh下的id_rsa,公钥在id_rsa.pub
文件中
2.复制密钥至远程主机:
ssh-copy-id -i 公钥文件 登陆用户@远程ip地址

相关配置文件:

   配置文件 /etc/ssh/sshd_config
服务脚本 /etc/rc.d/init.d/sshd
脚本配置文件:/etc/sysconfig/sshd

查看config文件的帮助

   man sshd_config
ListernAddress 当前主机的监听地址
Protocol 协议版本
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
验证主机的公钥
#KeyRegenerationInterval 1h 密钥的使用时间
#ServerKeyBits 1024 密钥长度
#LogLevel INFO 日志级别
#LoginGraceTime 2m 登陆宽限期
#PermitRootLogin yes root是否可以登录
#StrictModes yes 严格模式,家目录 属主 属组
#MaxAuthTries 6 最多可以承受的次数
#MaxSessions 10
最大的连接数
PasswordAuthentication yes 是否使用用户名和密码的方式
Kerberos集中认证管理
X11Forwarding yes 是否转发图形窗口
AllowUsers user1 user2
用户白名单
Allowgroups 组白名单
DenyUser 用户黑名单

###使用ssh的最佳实践

    1)only use ssh protocol 2
2)limit users SSh access
Allowusers root vivek jerry
白名单
denyUser saroj anjali foo
黑名单
3)configure Idle Log out timeout Interval 配置空闲超时长。
ClientAliveCountMax 300
ClientAliveInterval 0
4)Firwall SSH Port # 22
使用iptables设置ssh服务安全访问策略
5)change ssh port and Limit IP binding
port 300
Listaddress 192.168.1.5
ListenAddress 202.54.1.5
勿使用默认22端口

6)use Strong SSH passwords and passphrase
genpasswd(){
local 1=$1
[ "$1" == "" ]&& 1=20
tr -dc A-Za-z0-9_</dev/urandom | head -c ${1} | xargs
}
使用足够长足够复杂的密码,且定期更换。

7)use Public key Based AUthentication
使用公钥认证。

8)disable Empty password

9)thwart ssh crakers (Brute Force attack)
google:ssh best practice

10)rate-limit incoming port # 22 COnnections
限制ssh访问频度

11)use log analyzer
记录好日志,经常做日志分析。

scp:类cp命令,基于ssh协议跨主机复制

scp SRC1 SRC2 …. DEST

分两种情况:

 1.源文件在本机,目标为远程

scp /path/to/somefile .... Username@HOST:/path/to/somewhere

2.源文件在远程,目标在本机

scp Username@HOST:/path/to/somefile /path/to/somewhere

-r:当源文件为目录,以实现递归复制
-p:保留源文件的复制及修改时间戳,以及权限
-q:静默模式
-P PORT:指定服务器端口

sftp:是基于ssh的ftp协议

 只要OpenSSH的服务器端有以下项,则代表支持sftp
Subsystem sftp /usr/libexec/openssh/sftp-server

用法: sftp[username@]HOST

用户登录信息获取

 /var/log/wtmp:显示用户最近一次的登录信息,成功的 last
/var/log/btmp:显示用户登录的信息,并尝试失败的 lastb

lastlog:每个用户最近一次成功登陆的信息

bash编程的信号捕获

  trap 陷阱
trap ‘command’ signal
kill -l
KILL无法捕捉

信号捕捉用于:在中途中止时做一些清理操作
使用失列
#!/bin/bash
#
Clean(){
echo "quit"
return 5
}
tarp 'echo "quit"; eixt 5' IN

for i in {1..254};do
if ping -w 1 -c 1 172.16.254.$i $> /dev/null;then
echo "172.16.254.$i is up"
else
echo "172.16.254.$i is down"
fi

done