一.CA和证书
(一)概念:
(1)PKI: Public Key Infrastructure
(2)签证机构:CA(Certificate Authority)
(3)注册机构:
RA 证书吊销列表:
CRL 证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号 序列号 签名算法 颁发者 有效期限 主体名称 主体公钥 CRL分发点 扩展信息 发行者签名
(二)证书的获取
证书类型: 证书授权机构的证书 服务器 用户证书
获取证书两种方法:
• 使用证书授权机构 生成签名请求(csr) 将csr发送给CA 从CA处接收签名
• 自签名的证书 自已签发自己的公钥
实验:搭建ca
首先CA路径为/etc/pki/CA,对应的配置文件为 /etc/pki/tls/openssl.cnf,根据配置文件的格式进行创建
步骤:在centos7中搭建证书
(1)首先要创建
touch /etc/pki/CA/index.txt——必须先创建此文件,内容可以为空,但是必须有这个文件
touch /etc/pki/CA/serial ——创建第一个序列号,内容不能为空 echo 99(或01,序号随便设置)> /etc/pki/CA/serial
(2)先生成私钥 (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 1024)——该格式是根据配置文件的格式设置的,要求私钥的目录在private下,并且以.pem后缀。安全起见将文件权限设置为600,通过数字签名加密算法对文件签名,生成的私钥才对称的加密算法生成。
(3)生成自签名证书(用私钥匙生成证书)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days -7300 -out /etc/pki/CA/cacert.pem——申请生成自签名证书,设置默认有效期为两年
此时在centos7中自签名证书已搭建好,将文件导入windows中,查看
此时,点击安装证书,点击下一步,选择证书安装路径,然后选择证书存储为如图
然后按照提示选择即可
(4)颁发证书
在centos6中生成私钥,它需要被颁发证书
(umask 066; openssl genrsa -out /etc/pki/tls/private/app.key -des3 -1024)
申请生成文件证书:
openssl req -new -key /etc/pki/tls/private/app.key -days 3650 -out /etc/pki/tls/app.csr
该文件需要发给centos7进行审核,所以需要些申请文件,申请时间可以不写,因为需要centos7来确定有效时间
注意事项:
countryName = 写的国家名字必须和centos7中的写的一样
stateOrProvinceName = 省市必须相同
organizationName = 公司名必须一样
(5)将文件发给centos7审核 scp app.csr 192.168.136.170:/etc/pki/CA
(6)CA签署证书,并将证书发给申请者
openssl ca -in /etc/pki/CA/app.csr /etc/pki/CA/certs/app.crt -days 3650
给申请的文件颁发证书,并人为指定有效期为十年
(7)将生成的证书文件发给centos6
scp /etc/pki/CA/certs/app.crt 192.168.136.134:/etc/pki/tls/certs
将申请的证书导出到windows,查看
(8)查看证书信息
openssl x509 -in app.crt -noout -text:查看所有信息
openssl ca -status serial:查看序列号状态
实验2:生成一个子根证书
步骤:
(1)在centos6中,同样先创建
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial
(2)生成私钥
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 1024)
(3)申请证书文件
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/subca.csr
(4)发给centos7进行审核
scp subca.csr 192.168.136.170:/etc/pki/CA
(5)在centos7上,进行审核并颁发证书
openssl ca -in subca.csr -out /etc/pki/CA/certs/subca.crt -days 3650
(6)生成后,scp subca.crt 192.168.136.134:/etc/pki/CA/cacert.pem
(7)sz该证书到windows中来查看
实验3:
当不想要这些证书时,删除证书的步骤
(1)首先创建吊销文件序列号
echo 01 > /etc/pki/CA/crlnumber
(2)openssl ca -revoke /etc/pki/CA/newcerts/99.pem——序列号
(3)更新证书吊销列表
openssl ca -in /etc/pki/CA/crl/crl.pem
(4)最后通过查看吊销列表来确定是否删除成功
openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
二.ssh应用
ssh:安全远程登录 使用的默认的端口为22
(一)具体的软件实现:
OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
(二)SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
ssh的配置文件分为客户端配置文件和服务端配置文件
客户端:/etc/ssh/ssh_config
服务端:/etc/ssh/sshd_config
(三)ssh的用法
ssh -p:指定端口连接
ssh -b :指定以某ip地址来连接远程ip:ssh -b 192.168.136.178 192.168.136.177——用178的地址来连接其他ip(针对客户端主机上一个网卡设置两个ip地址的情况)
(四)登录方式:
基于用户登录口令实现
基于KEY的实现
(1)基于用户登录
需要输入口令
实现原理
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密, 如果密码正确,则用户登录成功,不正确则要重新验证
(2)基于key的验证
步骤
1 在客户端生成密钥对
ssh-keygen -t rsa -p ' '(表示不加密) -f——后跟路径,可以不写默认路径为~/.ssh/id_rsa
2 把公钥文件传输到要连接的服务器的家目录
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
3 对私钥加密 ssh-keygen -p
设置成功后以后再连接其他远程主机的时候只需要输入私钥密码即可
4 如果私钥密码也不想输入,可以临时开启一个代理,只需要第一次连接后输入一次私钥密码,以后连接就不需要了
ssh-agent bash
ssh-add
实验在xshell中实现基于key的方式登录
1打开x-shell软件的工具选项,选择如图
2 选择秘钥类型
3 自动生成随机数后,点击下一步
4 设置加密口令,和用户名称并保存文件到桌面上
5 通过rz命令将文件导入x-shell 通过cp id_rsa_1024_用户名 .ssh/autorized_keys
6选择用户登录方式
基于ssh端口转发的应用
(一)ssh的作用:
5此时‘隧道建立成功’,centos6可以通过redhat5突破防火墙的设置与7进行连接
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。 但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发 ,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道” (tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通 道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均 能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此 同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
SSH 端口转发能够提供两大功能: •
加密 SSH Client 端至 SSH Server 端之间的通讯数据 •
突破防火墙的限制完成一些之前无法建立的 TCP 连接
(1)远程转发
设计拓扑关系,以三个主机为例子,主机分为A,B,C。其中A主机为外部主机,B作为跳转机,C为目标主机
实验目的:
假设B与C在同一个局域网中,中间有防火墙作为保护,而A属于外网中的一个主机,它无法直接连接C机器,所以通过SSH策略来实现
实现步骤:
1 首先选择3个虚拟机,centos7,centos6,redhat5
2 检查三个主机之间的联通,centos6为外部主机,在centos7中对centos6开启防火墙策略:iptables -A INPUT -s 192.168.25.188 -j REJECT
3 确认redhat5没有9527端口打开,此时在该虚拟机上执行
ssh -R 9527:192.168.25.199:25 -Nf 192.168.25.188
此时9527端口会在centos6中打开,而不是在本机上打开
4 在centos6中执行telnet 127.0.0.1 9527
(2)本地转发
以centos7作为外部主机,以redhat5作为中间跳转机
1 首先在centos6上对centos7设置防火墙策略
iptables -A INPUT -s 192.168.25.199 -j REJECT
此时centos6无法直接和centos7连接
2 在centos7本机上执行ssh -L 9527:192.168.25.188:23 -Nf 192.168.25.80
3 telnet 127.0.0.1 9527
(3)动态端口转发:
实现功能:当用firefox访问internet时,本机的1080端口做为代理服务 器,firefox的访问请求被转发到sshserver上,由sshserver 替之访问internet
1 在centos7对centos6设置防火墙策略,使6无法连接
2 在6上执行 ssh -D 1080(端口) 192.168.25.80(redhat5)
3 执行 curl --socks5 127.0.0.1 http://192.168.25.199