前提条件:
(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#指定私钥文件路径,实现基于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服务实现安全的文件上传和下载
一、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: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: 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: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: 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 ~]#



