一、创建私有CA并进行证书申请。
前提条件:
(1)证书的(主要)格式参考文件:/etc/pki/tls/openssl.cnf
[ CA_default ]
60
61 dir = /etc/pki/CA # Where everything is kept 所有东西都放在那里
62 certs = $dir/certs # Where the issued certs are kept 已发出的证书存放于何处
63 crl_dir = $dir/crl # Where the issued crl are kept 发布的crl保存在何处
64 database = $dir/index.txt # database index file. 数据库索引文件。
65 #unique_subject = no # Set to 'no' to allow creation of 设置为'no'以允许创建
66 # several certs with same subject. 同一科目的几张证书。
67 new_certs_dir = $dir/newcerts # default place for new certs. 新证书的默认位置
68
69 certificate = $dir/cacert.pem #The CA certificate CA证书
70 serial = $dir/serial # The current serial number 当前序列号
71 crlnumber = $dir/crlnumber # the current crl number 当前CRL编号
72 # must be commented out to leave a V1 CRL必须注释掉以保留V1 CRL
73 crl = $dir/crl.pem # The current CRL 当前CRL
74 private_key = $dir/private/cakey.pem # The private key
75 RANDFILE = $dir/private/.rand # private random number file 私有随机数文件
91 default_days = 365 # how long to certify for
92 default_crl_days= 30 # how long before next CRL
93 default_md = sha256 # use SHA-256 by default
94 preserve = no # keep passed DN ordering
...
99 policy = policy_match
100
101 # For the CA policy
102 [ policy_match ]
103 countryName = match #match:要求申请填写的信息跟CA设置信息必须一致
104 stateOrProvinceName = match #match:要求申请填写的信息跟CA设置信息必须一致
105 organizationName = match #match:要求申请填写的信息跟CA设置信息必须一致
106 organizationalUnitName = optional
107 commonName = supplied #supplied:必须填写这项申请信息
108 emailAddress = optional
109
110 # For the 'anything' policy
111 # At this point in time, you must list all acceptable 'object'
112 # types.
113 [ policy_anything ]
114 countryName = optional #optional:可有可无,跟CA设置信息可不一致
115 stateOrProvinceName = optional
116 localityName = optional
117 organizationName = optional
118 organizationalUnitName = optional
119 commonName = supplied #supplied:必须填写这项申请信息
120 emailAddress = optional
(2)证书申请的步骤:
1、生成证书申请请求
2、RA核验
3、CA签署
4、获取证书
1.创建私有CA:(CentOS8)
CentOS8 上默认没有/etc/pki/CA目录,参考CentOS7建立该目录:
方法一:(CentOS7上执行)
scp -r /etc/pki/CA root@10.0.8.8:/etc/pki/CA
方法二:(CentOS8上执行)
mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
(1)创建CA所需的文件(只需创建即可)
#生成证书索引数据库文件
touch /etc/pki/CA/index.txt
#指定第一个证书颁发的证书序列号
echo 01 > /etc/pki/CA/serial
(2)生成CA私钥
cd /etc/pku/CA
(umask 066; openssl genrsa -out private/cakey.pem 2048) #()不开启子进程
(3)生成CA自签名证书
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: 证书的保存路径
(4)在Windows上查看证书
sz /etc/pki/CA/cacert.pem #把自签名证书传到Windows上。修改后缀名为.crt
2.证书申请:
[10:16:20 root@CS8-VM8-10 data][#mkdir ./app2
#生成私钥文件
[10:16:30 root@CS8-VM8-10 data][#(umask 066; openssl genrsa -out /data/app2/app2.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
...................+++++
............................................................................+++++
e is 65537 (0x010001)
#生成证书申请文件
[10:17:39 root@CS8-VM8-10 data][#openssl req -new -key /data/app2/app2.key -out /data/app2/app2.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
....
注:
countryName = match #match:要求申请填写的信息跟CA设置信息必须一致 stateOrProvinceName = match #match:要求申请填写的信息跟CA设置信息必须一致
organizationName = match #match:要求申请填写的信息跟CA设置信息必须一致
commonName = supplied #supplied:必须填写这项申请信息
3.补充:
#证书颁发
[10:19:52 root@CS8-VM8-10 data][#openssl ca -in /data/app2/app2.csr -out /etc/pki/CA/certs/app2.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 2 (0x2)
Validity
Not Before: Apr 30 02:21:26 2022 GMT
Not After : Apr 30 02:21:26 2023 GMT
...
#证书查看
[10:29:32 root@CS8-VM8-10 ~][#cat /etc/pki/CA/certs/app2.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: sha256WithRSAEncryption
Validity
Not Before: Apr 30 02:21:26 2022 GMT
Not After : Apr 30 02:21:26 2023 GMT
[10:29:56 root@CS8-VM8-10 ~][#openssl x509 -in /etc/pki/CA/certs/app2.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
...
openssl x509 -in /etc/pki/CA/certs/app2.crt -noout -issuer/-subject/-dates/-serial
二、总结ssh常用参数、用法
ssh命令是ssh客户端,允许实现对远程系统经验证地加密安全访问。
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub文件中的公钥到客户机的~/.ssh/know_hosts中。下次连接时,会自动匹配相对应的私钥,不能匹配,将拒绝连接。
一、ssh基于客户端的用法和参数
ssh客户端配置文件: /etc/ssh/ssh_config
...
# StrictHostKeyChecking ask
StrictHostKeyChecking no #首次登录不显示检查提示
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# IdentityFile ~/.ssh/id_ecdsa
# IdentityFile ~/.ssh/id_ed25519
# Port 22
....
格式:
ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
常见选项:
-p port #远程服务器监听的端口
-b #指定连接的源IP
-v #调试模式
-C #压缩方式
-X #支持x11转发 (图形:在字符界面中打开firefox)
-t #强制伪tty分配,如:ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3
(例:ssh -t 10.0.0.8 ssh -t 10.0.0.7 ssh 10.0.0.6,要知道各自密码。8不能直接连接6,通过7间接连接。)
-o option 如:-o StrictHostKeyChecking=no
-i <file> #指定私钥文件路径,实现基于key验证,默认使用文件: ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519,~/.ssh/id_rsa等
远程执行命令 :
ssh 10.0.0.8 /bin/bash < test.sh #远程执行脚本
二、ssh实心基于密钥的登录方式:
#在客户端生成密钥对
[15:53:37 root@CS7-VM8-10 ~]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #回车,接受默认值
Enter passphrase (empty for no passphrase): #回车,接受默认值,空密码
Enter same passphrase again: #回车,接受默认值
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:9ddpaca/BXoyiNGNBUCvrvXFEnB4HBXHS2xUrHU4D5I root@CS7-VM8-10.0.8.7
The key's randomart image is:
+---[RSA 2048]----+
| .o.o.o*o+.|
.....
[15:54:22 root@CS7-VM8-10 ~]#ll .ssh
total 12
-rw-------. 1 root root 1675 Apr 30 15:54 id_rsa
-rw-r--r--. 1 root root 403 Apr 30 15:54 id_rsa.pub
#把公钥文件传输至远程服务器对应用户的家目录
[15:54:46 root@CS7-VM8-10 ~]#ssh-copy-id -i .ssh/id_rsa.pub 10.0.8.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempt...
...
[15:56:51 root@CS8-VM8-10 .ssh][#ll
total 8
-rw-------. 1 root root 403 Apr 30 15:55 authorized_keys
[15:58:13 root@CS7-VM8-10 ~]#ssh 10.0.8.8
静以修身,俭以养德。
淡泊明志,宁静致远。
自强不息,厚德载物。
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Sat Apr 30 15:53:24 2022 from 10.0.8.7
[15:58:41 root@CS8-VM8-10 ~][#
二、ssh基于客户端的工具
(1)scp
scp [options] SRC... DEST/
方式:
scp [options] [user@]host:/sourcefile /destpath
scp [options] /sourcefile [user@]host:/destpath
scp [options] [user@]host1:/sourcetpath [user@]host2:/destpath
选项:
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口
例:
scp a.txt 10.0.8.8:/data #当前目录下的文件a.txt,复制到远程主机10.0.8.8的/date目录下
scp -r /data 10.0.8.123:/test # #当前文件夹/data,复制到远程主机10.0.8.8的/test目录下
(2)rsync
rsync工具可以基于ssh和rsync协议实现高效率的远程系统之间复制文件,使用安全的shell连接做为传输方式,比scp更快,基于增量数据同步,即只复制两方不同的文件,此工具来自于rsync包.
注意:通信两端主机都需要安装 rsync 软件
rsync -av /etc server1:/tmp #复制目录和目录下文件
rsync -av /etc/ server1:/tmp #只复制目录下文
支持的选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留修改时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-u 如果接收者的文件比发送者的文件较新,将忽略同步
-z 压缩,节约网络带宽
-a 存档,相当于-rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
--delete 源数据删除,目标数据也自动同步删除
(3)sftp(略)
交互式文件传输工具,用法和传统的ftp工具相似,利用ssh服务实现安全的文件上传和下载
三、总结sshd服务常用参数。
一、ssh高级应用:
(1)ssh本地端口转发
(2)ssh远程端口转发
(3)ssh动态端口转发
二、ssh服务器配置:
服务器端:sshd
服务器端的配置文件: /etc/ssh/sshd_config
服务器端的配置文件帮助:man 5 sshd_config
常用参数:
port #生产建议修改
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes #默认ubuntu不允许root远程ssh登录
StrictModes yes #检查.ssh/文件的所有者,权限等
MaxAuthTries 6 #pecifies the maximum number of authentication
attempts permitted per connection. Once the number of failures reaches half this
value, additional failures are logged. The default is 6.
MaxSessions 10 #同一个连接最大会话
PubkeyAuthentication yes #基于key验证
PermitEmptyPasswords no #空密码连接
PasswordAuthentication yes #基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 #单位:秒
ClientAliveCountMax 3 #默认3
UseDNS yes #提高速度可改为no
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups #未认证连接最大值,默认值10
Banner /path/file
ssh服务:
建议使用非默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12|
xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
经常分析日志
四、搭建dhcp服务,实现ip地址申请分发
首先要关闭虚拟机内自带的dhcp服务,避免与实验冲突。
服务器端的配置:(CentOS8)
1.安装dhcp服务:yum install -y dhcp-server
dhcp(CentOS 7 之前版本) 或 dhcp-server(CentOS 8 中的包名)
2.安装成功后直接启动服务会失败,要修改配置文件。
[16:02:32 root@CS8-VM8-10 dhcpd][#rpm -ql dhcp-server
...
/etc/dhcp
/etc/dhcp/dhcpd.conf
/usr/lib/systemd/system/dhcpd.service
/usr/share/doc/dhcp-server/dhcpd.conf.example
...
3.修改配置文件/etc/dhcp/dhcpd.conf ,参照文件/usr/share/doc/dhcp-server/dhcpd.conf.example的格式。
修改的部分:
option domain-name-servers 8.8.8.8, 180.76.76.76; #dns域名解析
default-lease-time 86400; #默认有效期(以秒为 单位)
max-lease-time 107200;
subnet 10.0.8.0 netmask 255.255.255.0 { #网段和子网掩码
range 10.0.8.100 10.0.8.200; #划分ip的地址范围
option routers 10.0.8.2; #网关
}
host testhost { #固定地址的分发
hardware ethernet 00:0c:29:2d:4d:18; #客户端的网卡地址00:0c:29:2d:4d:18
fixed-address 10.0.8.123; #将客户端的对应的网卡地址划分固定ip地址10.0.8.123
}
4.启动服务
systemctl restart dhcpd
客户端(1)的配置:划分固定地址
2022-05-05 15:25:56 cd /etc/sysconfig/network-scripts/
342 2022-05-05 15:25:57 ll
343 2022-05-05 15:25:59 cat ifcfg-eth0
344 2022-05-05 15:26:23 vim ifcfg-eth0
345 2022-05-05 15:26:43 cat ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
346 2022-05-05 15:26:52 nmcli con
347 2022-05-05 15:27:00 nmcli con reload
348 2022-05-05 15:27:30 nmcli con up "System eth0"
[16:18:21 root@CS8-VM8-10 network-scripts][#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:2d:4d:18 brd ff:ff:ff:ff:ff:ff
inet 10.0.8.123/24 brd 10.0.8.255 scope global dynamic noprefixroute eth0
valid_lft 84692sec preferred_lft 84692sec
inet6 fe80::20c:29ff:fe2d:4d18/64 scope link
valid_lft forever preferred_lft forever
客户端(2)的配置:划分随机地址(在地址范围内)
431 2022-05-05 15:36:57 nmcli con
432 2022-05-05 15:37:02 nmcli con reload
433 2022-05-05 15:37:15 nmcli con up "eth0"
434 2022-05-05 15:37:20 ip a
[16:31:29 root@CS7-VM8-10 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:0b:70:49 brd ff:ff:ff:ff:ff:ff
#这是以前固定有的ip地址
inet 10.0.8.7/24 brd 10.0.8.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
#这是搭建好dhcp服务后划分的ip地址
inet 10.0.8.102/24 brd 10.0.8.255 scope global secondary dynamic eth0
valid_lft 83252sec preferred_lft 83252sec
inet6 fe80::20c:29ff:fe0b:7049/64 scope link
valid_lft forever preferred_lft forever
[16:31:30 root@CS7-VM8-10 ~]#