telnet、openssh、openssl

一般端口号小于1023的进程只有管理员有权限运行,因为很多都是与外部程序进行通信的进程,这类进程很容易收到网络攻击。所以这类程序一般都是由管理启动,再切换给普通用户;或者使用chroot给其显示权限和活动范围。
OpenSSH:

ssh:secure shell,protocol (协议),	监听于tcp/22,提供安全的远程登录功能。
openssh:ssh协议的开源实现。

服务器端进程构建C/S架构终端,服务器端能够接受客户端基于网络发来的数据包。
早期使用telnet实现,
telnet:服务器端运行telnet server,客户端运行telnet程序。二者可以基于telnet协议进行通信。tcp/23。telnet没有加密功能,意味着我们登录程序时输入的帐号和密码都是明文发送的。
后来使用ssh协议实现

如何再linux主机上使用telnet:
服务器端程序:
[root@server1 ~]# yum install telnet-server
启动telnet
[root@server1 ~]# chkconfig telnet on
[root@server1 ~]# /etc/init.d/xinetd restart

在这里插入图片描述

使用chkconfig --list 可以看到如下内容
在这里插入图片描述
xinetd是超级守护进程,其它为瞬时守护进程。

客户端程序
[root@server2 ~]# yum install telnet
使用客户端去连接服务端
[root@server2 ~]# telnet 172.25.44.1 这里会让我们使用户和密码进行登录,由于telnet是明文的,不能加密,所以不可以使用管理员身份去登录
在这里插入图片描述

所以我们在服务端创建以个普通用户gentoo

[root@server1 ~]# useradd gentoo
[root@server1 ~]# passwd gentoo

在客户端使用此普通用户身份去登录就可以成功登录了
在这里插入图片描述

SSH协议:

客户端生成一对密钥,将生成的公钥放在要登录用户的家目录下的.ssh目录下,客户端要登录,它把公钥拿出来看客户端能不能解密,能解密,则身份通过认证,不发送密码直接就登录了。
由两种用户认证方式:基于password、基于key。
OPenssh:
C/S
C:linux:ssh,scp,sftp。
windows客户端:xshell,putty
S:sshd
客户端组件:ssh,配置文件:/etc/ssh/ssh_config
服务端组件:sshd 配置文件:/etc/ssh/sshd_config
格式:ssh [user@] host [COMMAND] 或 ssh [-l user] host [COMMAND]
-p port

省略用户表示以当前系统所处用户身份去登录。
例如我们修改sshd监听端口为1234
[root@server2 ~]# vim /etc/ssh/sshd_config
Port 1234
重启服务使其生效
然后再使用客户端连接时就要指明端口了
在这里插入图片描述

客户端如何生成一对密钥:
ssh-keygen:会交互
不使用交互
-t rsa 使用rsa这种加密方式
-P ‘ ‘ 密码为空
-f ‘/path ‘将生成的密钥保存在哪
在这里插入图片描述
将公钥传输至远程服务器对应用户的家目录
你想要登录对方的哪个用户后面就跟哪个用户
公钥保存在.ssh/authorized_keys里
在这里插入图片描述scp 常用选项:
-r:递归复制
-p:保持源文件的属性信息
-q:静默模式
-P port:指明remote host的端口

sftp命令:
sftp [user@]host
在这里插入图片描述
在这里插入图片描述

服务端:
sshd:配置文件 /etc/ssh/sshd_config

常用参数:
	Port #;
	ListenAddress ip:监听哪些地址
	PereitRootLogin 

限制可登陆用户:AllowUsers ,AllowGroups
ssh服务的最佳实践:
1、不要使用默认端口
2、禁止使用protocol version 1:
3、限制可登陆用户
4、设置空闲会话超时时长
5、利用防火墙设置ssh的访问策略
6、仅监听特定ip地址
7、基于口令认证,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8、使用基于密钥的认证
9、禁止使用空密码
10、禁止root用户直接登录
11、显示ssh访问频度和并发在线数
12、做好日志,经常分析

OpenSSL:ssl协议的实现

密码算法和协议:

  • 对称加密:加密时使用的密钥与解密是所用的密钥相同。

    特性:
    	1、加密解密使用同一密钥;
    	2、将原始数据分割成固定大小的块逐个进行加密;
    缺陷:
    	1、密钥过多
    	2、密钥分发过程中可能会被截获
    
  • 公钥加密:密钥成对出现。

      公钥:公开给所有人 ,pubkey
      私钥:自己留存,必须保证其私密性,secret key
      特性:使用公钥加密的数据,只能使用与之配对的私钥解密;反之,使用私钥加密的也只能使用与之配对的公钥进行解密。
      用途:
        数字签名:主要用于接收方认证发送方的身份。(A给B发数据,为了让B确信这个数据确实是A发的,而不是其它人)
      		  A向B发数据,将自己的公钥给B,B拿到公钥能解密则就确信这时来自于A的主句,但公钥在发送途中可能会被C截获,C再做一个伪装,将自己的公钥给B。这是极其不安全的。CA:证书颁发机构。证书里面有公钥。
      	密钥交换:A给B发数据,A用B的公钥加密一个对称密钥,并发送给B
      	数据加密
    
    • 单向加密:只能加密,不能解密;提取数据特征码

        特性:定长输出、雪崩效应
        算法:md5 128bits,shal 160bits等
        功能:保证数据完整性
      
    • 认证协议

整个发送过程

A想给B发邮件,A使用单向加密算法提取此邮件数据的特征码,用自己的私钥密码此特征码并附加再文件后面,A再使用对称加密算法加密整个数据。然后A再使用B的公钥加密这个对称密钥。
然后将整个数据发送给B
A使用自己私钥解密数据,然后再借助于解密算法解密对称加密,然后就得到加密特征码和明文数据,然后用A的公钥解密的特征码,然后再用同样的算法计算这个明文数据的特征码。
用A的公钥能解密特征码证明确实是A发送的,如果B自己计算出来的特征码与A发过来的特征码相同,则证明文件是完整的,在传输途中没有变动过。

密钥交换:IKE

公钥加密:
DH(Deffie-Hellman)

PKI:Public Key Infrastructure

签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库	

X.509:定义了证书结构以及认证协议标准
	版本号:
	序列号:
	签署算法ID
	发行者名称
	有效期限
	主体名称
	主体公钥
	发行者唯一标识
	主体唯一标识
	扩展信息
	发行者签名

web服务器支持https访问,为了建立https会话,服务器会发证书给客户端。

SSL:Secure Socket Layer

其内部使用分层实现:
1、最底层:基础算法原语的实现,aes,rsa,md5
2、向上一层:各种算法的实现
3、再向上一层:组合算法实现的半成品
4、用各种组件拼装而成的种种成品密码学协议软件;
		tls,ssh

Linux系统:Openssl,gpg
gpg是pgp协议的实现

三个组件:
openssl:多用途的命令行工具
libcrypto:加密解密库
libssl:库,真正实现了ssl及tsl

SSL会话的建立:

双方建立tcp会话(三次握手),然后建立ssl的握手认证:服务器发送认证给客户端,客户端验证证书(1、用自己本地的发行者的公钥去解密证书,能解密就证明确实是发行者的证书 2、检查证书的主体名称访问的网站名称是否一致3、检查证书的完整性4、检查证书是否在吊销列表中)。做密钥交换。服务器端再用客户端发送的一次性密钥加密响应报文响应给客户端。

openssl命令:

查看openssl的版本号 openssl version
在这里插入图片描述

对称加密:

[root@server1 mnt]# man enc
工具:openssl enc,gpg
算法:3des,aes,blowfish,twofish
加密:
-e 算法   -a salt:加点杂质  -in file:对哪个文件加密  -out file:加密后的文件保存在哪
[root@server1 mnt]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:
[root@server1 mnt]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

在这里插入图片描述

在这里插入图片描述
单向加密:

对当前目录下的fstab文件计算特征码
[root@server1 mnt]# openssl dgst -md5 fstab

不同的工具对同一文件使用同一算法得到的结果是一样的
在这里插入图片描述
生成用户密码
[root@server1 mnt]# openssl dgst -md5 fstab
在这里插入图片描述
生成随机数

openssl rand -base64|-hex # 
	#:表示字节数
	-hex时每个字符4位,出现的字符数为#*2

在这里插入图片描述

公钥加密:

加密:
	算法:RSA,ELGamal
	工具:gpg,openssl rsault
数字签名:
	算法:RSA,DSA,ELGamal
密钥交换:
	算法:DH

生成密钥对:

创建密钥,120位

在这里插入图片描述

从私钥中提取公钥

在这里插入图片描述

私钥一般只允许自己可读,所以要修改权限

在这里插入图片描述

也可以在创建这样做:

在这里插入图片描述
()表示只对子shell(当前命令)生效。可以看到shell环境的umask值依然为0022
在这里插入图片描述

随机数生成器:

熵池
/dev/random:仅从熵池中返回随机数,随机数用尽,阻塞
/dev/urandom:从熵池返回随机数,随机数用尽,则利用软件生成伪随机数,非阻塞。

自己私下使用时建立私有CA
在这里插入图片描述
OpenCA
Openssl
证书申请及签署步骤

1、生成申请请求;
2、RA核验
3、CA签署
4、获取证书

如何建立私有CA

openssl配置文件:/etc/pki/tls/openssl.cnf
工作目录:
/etc/pki/CA/certs/:存放已签署的CA
/etc/pki/CA/crl/:证书吊销列表
 $dir/index.txt:证书索引文件	
 new_certs_dir   = $dir/newcerts:刚签完的证书存放位置
 certificate = $dir/cacert.pem  :CA自己的证书
 private_key = $dir/private/cakey.pem# The private key:CA的私钥
证书都是具有序列号的
 serial      = $dir/serial       # The current serial number #已经了第几个序列号了
 crlnumber   = $dir/crlnumber  :吊销的证书序列号
(1)创建所需要的文件
	[root@server1 CA]# touch index.txt
	[root@server1 CA]# echo 01 > serial
(2)CA自签证书
生成私钥文件
2048表示私钥长度。
[root@server1 CA]# (umask 007; openssl genrsa > private/cakey.pem 2048)
从私钥中抽取公钥,
-new:生成新证书签署请求
-x509:表示自签,签一般证书时则不需要加此选项,因为除CA外自己给自己签署的证书都是无效的
-key:生成请求时用到的私钥文件
[root@server1 CA]# openssl req -new -x509 -key private/cakey.pem -days 3650 > /etc/pki/CA/cacert.pem

在这里插入图片描述
Common Name (eg, your name or your server's hostname) []:server1此处一定要与服务器dns解析的名字保持一致。
(3)发证书

	a、用到证书的主机生成证书请求
	b、把请求文件传输给CA
	c、CA签署证书,并将证书发回给请求者。

假如server3需要生成证书

(1)[root@server3 ~]# mkdir /etc/httpd/ssl
(2)[root@server3 ~]# cd /etc/httpd/ssl/
生成私钥
[root@server3 ssl]# (uamsk 007; openssl genrsa > httpd.key 1024)
从私钥中抽取公钥并生成证书签署请求请求,生成的文件为.csr文件
[root@server3 ssl]# openssl req -new -key httpd.key -days 365 > httpd.csr
注意:因为这里使用私有CA签发证书,所以这里的Country Name, State or Province Name等都要与私有CA保持一致,否则不被认可。

在这里插入图片描述

完成后会生成http.csr文件,http.csr文件为证书签发请求文件
在这里插入图片描述

传送证书签发请求文件到私有CA所在服务器
root@server3 ssl]# scp httpd.csr 172.25.44.1:/mnt
核验并签署证书,生成的证书为http.crt
[root@server1 CA]# openssl ca -in /mnt/httpd.csr > /mnt/httpd.crt -days 365

在这里插入图片描述
在这里插入图片描述
index.txt文件已经生成,在newcerts目录下也生成了证书,其内容与httpd,crt文件一致
在这里插入图片描述

将证书发还给客户端
[root@server1 CA]# scp  /mnt/httpd.crt server3:/etc/httpd/ssl

在这里插入图片描述

查看证书信息

openssl x509 -in httpd.crt  -noout -subjice | -text | -serial

在这里插入图片描述

吊销证书:
(1)客户端获取要吊销的证书的serial
[root@server3 ssl]# openssl x509 -in httpd.crt  -noout -serial
(2)CA端
先根据客户端提交的serial与subject信息,对比检验是否与index.text的信息一致;
吊销证书:
[root@server1 CA]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem 
生成吊销证书的编号(CA第一次吊销一个证书时需要这么做) 
[root@server1 CA]# echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表	
[root@server1 CA]# openssl ca -gencrl > thisca.crl
查看crl文件:	
[root@server1 CA]# openssl crl -in thisca.crl -noout -text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值