加密、密钥、CA和证书、SSH客户端、SCP、rsync、pssh介绍、SSH端口转发、SSH服务器

对称加密:

明文数据---->用KEY1加密---->加密数据----->用KEY2解密---->明文数据
KEY1=KEY2就是对称加密

对称加密算法:
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5

特性:
1、加密、解密使用同一个密钥,效率高
2、将原始数据分割成固定大小的块,逐个进行加密

缺陷:
1、密钥过多
2、密钥分发
3、数据来源无法确认

非对称加密:

非对称加密分为公钥和私钥
A有公钥a1,私钥a2
B有公钥b1,私钥b2
公钥是公开的,私钥是保密的,公钥和私钥必须成对使用,a1加密的数据只能用a2解开,a2加密的数据只能用a1解开

A给B发数据
明文数据---->A用b1加密---->加密数据---->B用b2解密---->明文数据

公钥加密:密钥是成对出现
公钥:公开给所有人;public key
私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:数字签名:主要在于让接收方确认发送方身份
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
数据加密:适合加密较小数据
缺点:密钥长,加密解密效率低下

算法:
RSA(加密,数字签名)
DSA(数字签名)
ELGamal

数字签名过程

A给B发送数据

A私钥加密
B公钥加密
原文
128bit的数据摘要
数字签名
数字签名+原文
密文

B收到数据后

B私钥解密
A公钥解密
密文
数字签名+原文
原文
128bit数据摘要
数字签名
128bit数据摘要
一致说明没被修改

这个方法通常不用,因为解密数据时间太长了

通常用法:
key:对称秘钥
A给B发数据

A私钥加密
key加密
B公钥加密
原文
128bit的数据摘要
数字签名
数字签名+原文
密文
key
加密的key
加密的key+密文
发送给B

B收到数据

KEY解密密文
A公钥解密签名
收到加密KEY和密文
B私钥解密KEY
数字签名和原文
128bit数据摘要
对原文取128bit数据摘要
两个数据摘要一致则没问题

密钥传输容易遭到到中间人攻击
中间人攻击

客户端 中间人 服务器 请求公钥 请求公钥 真公钥 收到中间人 给的假密钥 假公钥 假公钥加密的内容:xxxx 用密钥串改 数据给服务器 真公钥加密的内容:AAAA 真公钥加密的内容:BBBB 假密钥加密的内容:CCCC 客户端 中间人 服务器

CA和证书

PKI: Public Key Infrastructure
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:

X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法
颁发者
有效期限
主体名称

证书类型:
证书授权机构的证书
服务器
用户证书

获取证书两种方法:

  1. 使用证书授权机构
    生成证书请求(csr)
    将证书请求csr发送给CA
    CA签名颁发证书
  2. 自签名的证书
    自已签发自己的公钥

HTTPS工作过程
客户端事先已信任CA
CA给服务器颁发了证书

客户端 服务器 https请求 CA颁发给服务器的证书 收到证书后用 CA公钥解密验证 并得到服务器公钥 生成对称密钥用服务器公钥加密 用自己私钥解 密得到对称密钥 用对称密钥通信 客户端 服务器

CA私有搭建

使用openssl搭建CA
openssl的配置文件:/etc/pki/tls/openssl.cnf

三种策略:match匹配、optional可选、supplied提供
match:要求申请填写的信息跟CA设置信息必须一致
optional:可有可无,跟CA设置信息可不一致
supplied:必须填写这项申请信息

创建所需要的文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

生成私钥
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)
cakey.pem是配置文件中规定的文件名
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem

-new:生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days n:证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径

证书申请

先生成服务使用的私钥
(umask 066; openssl genrsa –out /data/servie.key 2048)
生成证书申请文件
openssl req -new -key /data/servie.key -out /data/servie.csr
然后将申请文件传给CA
CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/servie.csr –out /etc/pki/CA/certs/servie.crt -days 100
默认要求 国家,省,公司名称三项必须和CA一致

证书管理

查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
openssl ca -status SERIAL 查看指定编号的证书状态

吊销证书
在客户端获取要吊销的证书的serial
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致
吊销证书:
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行
echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem

查看crl文件:
openssl crl -in /etc/pki/CA/crl.pem -noout -text

SSH客户端

配置文件
/etc/ssh/ssh_config
首次登陆不显示检查提示修改StrictHostKeyChecking no

格式:ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
如果后面跟命令,则只登陆执行命令就自动退出

常见选项
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X:支持x11转发
-t:强制伪tty分配

基于密钥的认证
每次登陆都要验证用户名密码比较麻烦,可以使用基于密钥的认证
1.在客户端生成密钥

ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
-t指定加密算法,不指定默认rsa
-P密钥口令
-f密钥存放路径,默认家目录中

2.复制公钥文件到对方用户家目录中

ssh-copy-id [-i file] [user@]host

在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到
需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh
主机上执行:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

验证代理(authentication agent)
当密钥有口令时,每次连接都要输入密钥的口令,开启代理后密钥口令就只需要输入一次
运行ssh-agent bash
然后通过命令把口令添加给代理
ssh-add

SCP

scp命令:
scp [options] 源 目标
可以把远程主机的文件复制到本地,也可以本地文件复制到远程主机,还可以远程主机A复制到远程主机B

常用选项:
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口

rsync

基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
rsync -av /etc server1:/tmp 复制目录和目录下文件
rsync -av /etc/ server1:/tmp 只复制目录下文件
比scp更快,只复制不同的文件

常用选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)

pssh工具

pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制

选项:
–version:查看版本
-h:主机文件列表,内容格式”[user@]host[:port]”
-H:主机字符串,内容格式”[user@]host[:port]”
-A:手动输入密码模式
-i:每个服务器内部处理信息输出
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-P:打印出服务器返回信息
-v:详细模式

批量发送指令
pssh -H root@192.168.1.10 -i hostname

不支持ssh的key认证时,通过 -A选项,使用密码认证批量执行指令
pssh -H wang@192.168.1.10 -A -i hostname

将标准错误和标准正确重定向都保存至/app目录下
pssh -H 192.168.1.10 -o /log1 -e /log2 -i “hostname”

pscp.pssh命令
pscp.pssh功能是将本地文件批量复制到远程主机

pscp-pssh选项
-v 显示复制过程
-r 递归复制目录

将本地curl.sh 复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/test/a.txt /app/
pscp.pssh -h host.txt /root/test/a.txt/app/

将本地多个文件批量复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/a.txt /root/b.txt /app/

将本地目录批量复制到/app/目录
pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

pslurp命令
pslurp功能是将远程主机的文件批量复制到本地

remote local(本地名)
pslurp选项
-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
-r 递归复制目录

批量下载目标服务器的passwd文件至/app下,并更名为user
pslurp -H 192.168.1.10 -L /app /etc/passwd user

SSH端口转发

SSH端口转发
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。
这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,
LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。
与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯。

选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能

示例
ssh –L 8765:telnetsrv:23 -Nfg sshsrv
telnet 127.0.0.1 8765
当访问本机的8765的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发
到telnetsrv:23

远程转发:
ssh –R 8765:telnetsrv:23 –Nf sshsrv
让sshsrv侦听8765端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23

动态端口转发:
请求被转发到sshserver上,由sshserver替之访问internet
ssh -D 8765 root@sshserver -fNg
使用同一台机子作为网关则
ssh -Dg 8765 本机IP -fNg

X协议也可以转发,加上-X

SSH服务器

服务器端:sshd, 配置文件: /etc/ssh/sshd_config
常用参数:
Port
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes 允许root登录
StrictModes yes 检查.ssh/文件的所有者,权限等
MaxAuthTries 6 允许验证次数
MaxSessions 10 同一个连接最大会话
PubkeyAuthentication yes 允许密钥验证
PermitEmptyPasswords no 允许空密码
PasswordAuthentication yes 允许密码验证
GatewayPorts no 网关功能
ClientAliveInterval 单位:秒 检测非活动连接间隔
ClientAliveCountMax 默认3 检测到几次非活动连接就断开
UseDNS yes 把IP解析成名字改no提升连接速度
GSSAPIAuthentication yes 提高速度可改为no
MaxStartups 未认证连接最大值,默认值10
Banner /path/file 连接提示

限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups

SSH服务推荐设置
建议使用非默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
经常分析日志

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值