您的位置:首页 > 运维架构 > Linux

Linux学习日志(十五)

2016-05-16 02:25 681 查看

加密解密及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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: