SSH (Secure Shell) 的缩写,意为“安全外壳协议”,是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议
OpenSSH是 SSH协议 的免费开源实现
SSL(Secure Sockets Layer)是为网络通信提供安全及数据完整性的一种安全协议,在传输层对网络连接进行加密,
OpenSSL是 SSL协议的免费开源实现,
OpenSSH的加密是通过OpenSSL完成的.
SSH,安全外壳协议(Secure Shell,简称SSH)是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。
SSH由IETF的网络小组(Network Working Group)所制定;SSH 为建立在应用层
基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
以下提到的功能及示例,其实是OpenSSH中的组件ssh,而并非SSH协议。但是也不必区分的那么细致。
- 使用用户名/密码登录;
- 使用密钥对登陆;
- 端口转发:
NAME
ssh — OpenSSH SSH client (remote login program)
SYNOPSIS
ssh args [user@]hostname [command]
DESCRIPTION
ssh (SSH client) is a program for logging into a remote machine and for executing commands on a remote machine. It is intended to provide secure encrypted communications between two untrusted hosts over an insecure network. X11 connections, arbitrary TCP ports and UNIX-domain sockets can also be forwarded over the secure channel.
ssh connects and logs into the specified hostname (with optional user name). The user must prove his/her identity to the remote machine using one of several methods (see below).
ssh安装
apt install ssh -y
<常用>
[root@node1 sbin]# ssh [email protected]
The authenticity of host '192.168.2.150 (192.168.2.150)' can't be established.
ECDSA key fingerprint is SHA256:FE/dZMWs5CwuIEhGa/CCGlqaDDygxzXmUptHCnHjZAo.
ECDSA key fingerprint is MD5:93:7f:b1:ac:fd:20:32:23:9d:9c:04:87:02:30:c7:49.
Are you sure you want to continue connecting (yes/no)?
第一次连接目标主机时,ssh 会让你确认目标主机的真实性。如果你回答的是 NO,SSH 将不会继续连接,只有回答 Yes才会继续。下一次再登陆此主机时,SSH 就不会提示确认消息了
-p
参数[root@node1 sbin]# ssh [email protected] -p 20
ssh: connect to host 192.168.70.183 port 20: Connection refused
此时服务器的ssh端口需要更改:
[root@node1 sbin]# grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
-i
~/.ssh/id_dsa,
~/.ssh/id_ecdsa, /.ssh/id_ed25519,/.ssh/id_rsa等
-f
[root@node1 sbin]# ssh [email protected] -f
Cannot fork into background without a command to execute.
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
Clients端的配置文件:/etc/ssh/ssh_config
Server端的配置文件:/etc/ssh/sshd_config
Server端服务脚本:/etc/rc.d/init.d/sshd
OpenSSH在部分Linux系统中默认是安装并启动的
[root@node1 sbin]# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ctr-cavstest
/usr/libexec/openssh/ssh-keysign
...
[root@node1 sbin]# yum search openssh
...
openssh.x86_64 : An open source implementation of SSH protocol versions 1 and 2
...
Name and summary matches only, use "search all" for everything.
OpenSSH 远程登录客户端,作为 rlogin 和 Telnet 的替代方案。
参考 《2.2 SSH的主要功能》
OpenSSH 安全文件复制,作为 rcp 的替代方案,将文件复制到其他电脑上。
语法:
scp [OPTIONS] SRC...DEST
常用选项:
-r: 递归复制,复制目录及内部文件时使用;
-p: 保存源文件元数据信息中的属主、属组及权限;
-q: 静默模式
-P PORT: 指明远程服务器使用的端口;
两种模式:
PUSH: scp [OPTIONS] /PATH/FROM/SOMEFILE ... user@server:/PATH/TO/DEST
PULL: SCP [OPTIONS] user@server:/PATH/FROM/SOMEFILE /PATH/TO/DEST
示例:
复制当前主机上的/etc/ssh/sshd_config至172.16.66.90主机的/tmp/aa目录下
[root@1inux ~]# scp -p /etc/ssh/sshd_config [email protected]:/root
[email protected]'s password:
sshd_config 100% 3879 3.8KB/s
OpenSSH 安全文件传输,类似于 scp。
参考《CHAPTER 5 文件共享 - FTP/FTPS/SFTP》
语法:
sftp [USER]@server
常用命令:
put/get
OpenSSH 守护进程。
OpenSSH 身份验证密钥实用程序,产生RSA或ECDSA密钥,用来认证用。
语法:
ssh-keygen [OPTIONS]
ssh-keygen — authentication key generation, management and conversion
参数 :
-t {rsa|dsa} :密钥类型 一般使用rsa
-b bits:指明密钥长度
-f output_keyfile:指明密钥文件
-P ’ ':指明加密密钥的密码,表示使用空密码
示例:
[root@1inux ~]# ssh-keygen -t rsa //生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_90 //定义保存的密钥文件名
Enter passphrase (empty for no passphrase): //要求对生成的密钥对加密,也可以不加密 输入两次回车就OK
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_90. //说明已经生成密钥
Your public key has been saved in /root/.ssh/id_90.pub. //说明已经生成公钥
The key fingerprint is:
7a:17:b3:e7:6f:54:a1:30:23:62:7c:04:37:10:52:08 root@1inux
The key's randomart image is:
+--[ RSA 2048]----+
| E..+==+ |
| ..+.o.+ . |
| . o . + . .|
| . .|
| S o . |
| . + . |
| . . o .. |
| . . o . |
| .o. |
+-----------------+
[root@1inux ~]#
[root@1inux ~]# ls .ssh/
id_90 id_90.pub known_hosts
也可以指明秘钥路径及密码
[root@1inux .ssh]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P '' //经测试 名字必须为id_rsa
Generating public/private rsa key pair.
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:
33:c3:f8:f3:2c:ed:88:cc:db:7a:97:5f:d0:de:ce:d9 root@1inux
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| o . |
| . S . . |
| . + o . |
| o. . o .|
| o oo=+ . oo|
| *+o++.. .E|
+-----------------+
[root@1inux ~]# ls .ssh/
id_rsa id_rsa.pub id_www id_www.pub known_hosts
ssh-copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户下。
语法:
ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id — use locally available keys to authorise logins on a remote machine
参数:
-i:指定公钥文件
示例:
[root@1inux ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
OpenSSH 身份验证代理,用于帮助用户不需要每次都要输入密钥密码的工具。
原理:
用户 Bob 使用 ssh-agent 来管理私钥之后。ssh-agent 会启动一个进程在内存里保存这些私钥。之后每次登录时,ssh 客户端都会跟 ssh-agent 请求是否有目标主机的私钥;如果有,ssh 客户端便能直接登录目标主机。
向 OpenSSH 身份验证代理添加私钥身份,用于帮助用户不需要每次都要输入密钥密码的工具。
ssh-add — adds private key identities to the authentication agent
ssh-add [file ...]
参数:
-l Lists fingerprints of all identities currently represented by the agent.
示例:
[root@node1 sbin]# eval `ssh-agent`
Agent pid 45527
[root@node1 sbin]# ssh-add /root/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[root@node1 sbin]# ssh-add -l
2048 SHA256:LGCOrSrdps8bt/wNDpk/IXyQ0XEPkHcpn2Txv0f62YM /root/.ssh/id_rsa (RSA)
从服务器收集 SSH 公钥,并记录公钥。
ssh-keyscan 是一个收集多个主机的 SSH 公共密钥的实用工具。它被设计用来帮助构建和验证 ssh_known_hosts 文件,其格式在 sshd(8) 中有说明。ssh- keycan 提供了一个适合 Shell 和 Perl 脚本使用的最小接口。
ssh-keycan 使用非阻塞的套接字 I/O 以并行方式联系尽可能多的主机,因此非常高效。可以在几十秒内收集来自 1,000 台主机的公钥,即使其中一些主机关闭或没有运行 sshd(8)。对于扫描,不需要登录被扫描的机器,扫描过程也不涉及任何加密。
示例:
[root@node1 sbin]# ssh-keyscan 192.168.71.253
# 192.168.71.253:22 SSH-2.0-OpenSSH_7.4
192.168.71.253 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBA6yc0kAIp0UxO03m3qK7TCUSe4Qoua3TIiGPWRc9ncwtWymLGGwOYMf50nkNbdOJ/JwCkSPN+7DqiEXt3BXhvQ=
# 192.168.71.253:22 SSH-2.0-OpenSSH_7.4
192.168.71.253 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjZ7IT+xxubcUdsDY8eQHNqekoJZuRCkRMrQGVlcVwRJEJEUYOa990musVvhq45KYMt2wGUqyaFqf36FmET/RlusVT2RYpOvzQyVAQM0zG5VaiY169IK7k5iq/KBnFNDHc5OTOJZKcS3YUwmR84uCV6XSxsIeIO+W9M2xbc1Aqzm98on7ara+nuHZS4nCpiO86ZOzbpZj0oE4CeoOqHlNuBYnlIz6L379kit/wvdeQxuXycWi4BQY2Fp3Q/NbrytNji8GdP/YgO5NDyEETneOhEsRWKIK/B5iV7WVxM3UbuqCztueKvG9vm+OAAdTNX4D9QR5gHnwXwnn+Nxr0EiVf
# 192.168.71.253:22 SSH-2.0-OpenSSH_7.4
192.168.71.253 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBhDkKQBAaQwdoN/FQameEBGKTU9r6xMDk1gWJxIiqcD
ssh-keyscan -t rsa 127.0.0.1
# 127.0.0.1:22 SSH-2.0-OpenSSH_7.4
127.0.0.1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDkGXOrc1t17nD5zYHNcA83zsa9uvv8s1bGcHQoUgCotwJexLu0zTUgNzDJRuMHzIIzuwIIy2H24sgIOvo81bJHIcJOXxr6pJ8Jc/lriZmitqpOBfHRheUif8V6uqfQKYEQRRpEow5rDK0qYi7CSVuZFBgdLGQT+XyK72AK+hzvQyEmtd5NmeeIX0SmQ5WfwhzcCa0byu+hop81HjTXleSdwErox04BFTVX/UcH4LQb16Q4W+5kI46Vn1p6uuzrEt/+C92DUgYtmDW5hv9BuuYQuSdUoI+vpW+y+Bf5e4bqfuEh34P6qEgkIm+LUxybPS65MMHTRWpT+j/zIdGHIuqh
ssh-keyscan -v 127.0.0.1
在类 Unix 系统中的远程登录就采用了 SSH 协议,只有安装了相应软件包才能实现远程登录(包括命令行登录和桌面登录)。
SSL(Secure Socket Layer)安全套接层是Netscape(网景)公司率先采用的网络安全协议。它是在传输通信协议
(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。
SSL用以保障在Internet上数据传输之安全,利用数据加密技术,可确保数据在网络上之传输过程中不会被截取及窃听。
SSL主要是服务于HTTPS的,而HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTPS相当于在HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
其中SSL的安全(Secure),指:
安全的通信目标:
- 保密性:confidentiallity
- 完整性:integrity
- 可用性:availabilty
攻击类型:
威胁保密性攻击:窃听,通信量分析
威胁完整性攻击:更改,伪装,重放,否认
威胁可用性攻击:拒绝服务(DoS)
针对攻击的解决方案
1. 技术:加密解密
2. 服务:用于抵御攻击的服务,安全服务
加密和解密:
传统加密方法:替代加密方法,置换加密方法
现代加密方法:现代块加密方法
服务:
认证机制
访问控制机制
密钥算法和协议
加密和解密使用同一个密钥(解决保密性问题)
- DES:data encryption standard,数据加密标准。 百科
- 3DES:Triple DES,三轮DES加密
- AES:Advanced Encryption Standard,高级加密标准。(密钥长度128bit,192bit,256bit)
特性:
1.加密解密使用同一个密钥
2.将原始数据分割为固定大小的块,逐个进行加密
缺陷:
1.密钥过多
2.密钥分发困难
又称非对称加密。包括身份认证,密钥交换,数据加密(比对称加密慢3个数量级,10的3次幂)等功能
百科
非对称是指一对加密密钥与解密密钥,这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。一般称公开的密钥为公钥;不公开的密钥为私钥。
密钥成对出现,密钥分为:公钥,私钥
特点:
用公钥加密的数据,只能使用与之配对的私钥解密,反之亦然
用途:
- 数字签名:主要用于接收方确认发送方身份,发送方使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名(身份认证:发送方使用自己的私钥对特征码进行加密,接收方使用发送方的公钥进行解密)
- 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
- 数据加密:通常不用于数据加密,效率低
点对点模型示例
client A, sever B
加密过程:
特征码
进行加密(数字签名
,用以完成身份认证),生成数字签名,附加在数据后,称为data2,保证发送方身份和数据完整性整段数据
进行加密(对称加密,保密性),称为data3一次性对称加密密码
进行加密(密钥交换
),附加在数据后,成为data4(保证其保密性),发送给A解密过程:
缺点:
容易受到中间人攻击,进而需要CA
CA:保证通信双方能够拿到正确公钥的公信机构
算法:RSA,DSA,ELGamal
- DSA:digital signature algorithm,数字签名算法,是一种标准的 DSS(数字签名标准)。仅能用于签名,而不能用于加解密。
- RSA:公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。即能签名也能用于加解密。百科
只能加密,不能解密,只能提取数据特征码md5等(保证数据完整性)
特点:
定长输出
雪崩效应(加密数据的微小改变,导致密码巨大变化)
功能:
用于验证数据完整性
算法:
centos6、7用户密码加密:sha512
cenots5用户密码加密:md5
[root@node1 sbin]# authconfig --test|grep hashing
password hashing algorithm is sha512
IKE:Internet key exchange互联网密钥交换协议。百科
RSA:(公钥加密)
DH:deffie-hellman(迪菲-赫尔曼)
优势在于让双方不用发密码就可以得到密码
模型:
A:p,g
B:p,g
A:x
p^x%g==>B
A:(p^y%g)^x
B:y
p^y%g==>A
B:(p^x%g)^y
(p^y%g)^x = (p^x%g)^y
(p^x%g)^y为密码
ECDH:椭圆曲线DH
ECDH:临时椭圆曲线DH
安全传输层协议(TLS,transport layer security)用于在两个通信应用程序之间提供保密性和数据完整性
IETF将SSL进行标准化,1999年公布第一版TLS标准文件。百科
TLS分层设计:
- 最底层:基础算法原语实现aes,rsa,md5
2. 向上一层:各种算法实现
3. 向上一层:组合算法实现的半成品
4. 用各种组件拼装而成的各种成品密码密码学协议软件
TLS包含三个基本阶段:
- 对等协商支援的密钥算法
- 基于非对称密钥的信息传输加密和身份认证、基于PKI证书的身份认证
- 基于对称密钥的数据传输保密
SSL通信流程,简化后主要有三步:
- 客户端向服务器端索要并验证对方证书
- 双方协商生成会话密钥
前两步合称握手阶段,handshake
- 双方采用会话密钥进行加密通信
- 断开
--------ssl handshake 详细流程------------
Client hello
发送内容,包括:Server hello
发送内容,包括:pre-master-key
,计算生成本次会话所用的“会话密钥”---------ssl handshake-----------------
OpenSSL的配置文件/etc/pki/tls/openssl.cnf
[root@node1 ~]# grep -v ^#,^$ /etc/pki/tls/openssl.cnf|tail -10
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
clock_precision_digits = 0 # number of digits after dot. (optional)
ordering = yes # Is ordering defined for timestamps?
# (optional, default: no)
tsa_name = yes # Must the TSA name be included in the reply?
# (optional, default: no)
ess_cert_id_chain = no # Must the ESS cert id chain be included?
# (optional, default: no)
OpenSSL由三部分组成:
OpenSSL命令分类:
标准命令:enc、ca、req、genrsa
使用openssl完成对称加密
工具:openssl enc
算法:3des,aes,blowfish
enc命令语法:
enc - symmetric cipher routines
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P][-bufsize number] [-nopad] [-debug] [-none] [-engine id]
参数 :
-e 加密
-d 解密
-a(-base64)文本加密
实例:
openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
工具:openssl dgst,md5sum,sha1sum,sha224sum
openssl dgst:
提取摘要
openssl dgst -md5 fstab
openssl dgst -md5 -out fstab.md5 fstab
工具:passwd, openssl passwd
命令:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
openssl passwd -1 -salt 123456
参数:
-1
(一)标示MD5加密,-salt不变,密文不变
工具:openssl rand
命令:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
参数说明:
-out :指定随机数输出文件,否则输出到标准输出。
-rand file :指定随机数种子文件。种子文件中的字符越随机,openssl rand生成随机数的速度越快,随机度越高。
-base64 :指定生成的随机数的编码格式为base64。
-hex :指定生成的随机数的编码格式为hex。
num :指定随机数的长度。
openssl rand -base64 10
L4JQf3hy3RdPtQ==
使用时需要删除==
openssl rand -hex 10
f858abb49c1b72e5188d
生成加随机盐的密码
openssl passwd -1 -salt $(openssl rand -hex 4)
$1$7d20e521$fp7jFdPa8IRTqjx1FbKHL/
上面的命令将生成一个随机的、长度为 4 个字符的高强度密码,这种方式不支持同时生成多个密码。我们强烈推荐你生成 14 个字符的密码。 当然你可以使用 OpenSSL 生成任意长度的密码。可能有的童鞋会问不是说4位长度吗?怎么显示的不是4位,问的好,为什么呢?因为你生成的位数不足以达到高强度密码要求,所以默认情况下openssl会给你添加字符,使其保证密码高强度!
linux系统上的随机数生成器:
伪随机数并不安全
熵池:内核在内存中维护的一个空间,空间内存储大量随机数
熵池中的随机数来源:
- 硬盘IO中断时间间隔
- 键盘IO中断时间间隔
如果随机数用尽,可以拷贝大数据到硬盘,产生大量IO
三种功能:
openssl genrsa [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192]
[-camellia256] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
示例:
openssl genrsa -out ./mykey3.private 1024
openssl genrsa 1024 > mykey.private
openssl genrsa 1024
修改为仅自己能读能写
(umask 077; openssl genrsa -out mykey4.private 1024)
使用()
表示启用子shell启动进程,主进程不受影响
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
[-sgckey] [-aes128] [-aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text]
[-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]
示例:
openssl rsa -in mykey.private -pubout -out mykey.pub
PKI(公钥基础设施,Public Key Infrastructure,简称PKI
)是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系。是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为目前信息安全领域的热点。互联网通信强依赖PKI。
签证机构:CA(Certification Authority)
注册机构:RA(Registration Authority )
证书吊销列表:CRL
证书存取库
X.509v3定义了证书的结构以及认证协议标准
CA(Certificate Authority,证书授权)是由认证机构服务者签发,是数字签名的技术基础保障,也是网上实体身份的证明,能够证明某一实体的身份及其公钥的合法性,证明该实体与公钥二者之间的匹配关系
CA分为两类:
Clinet C,Server S
C获取S证书,验证证书:
工具:
构建私有CA:在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需的目录及文件即可
步骤:
一、 CA服务器
[root@node2 test]# ll /etc/pki/CA/private/
total 0
[root@node2 test]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
Generating RSA private key, 4096 bit long modulus
...................................................................................................++
..............................................................................................................................................................................................................................................................................................................................................................................................................................++
e is 65537 (0x10001)
[root@node2 test]# ll /etc/pki/CA/private/
total 4
-rw------- 1 root root 3243 Apr 6 16:36 cakey.pem
req - PKCS#10 certificate request and certificate generating utility
#该命令主要用于创建和处理PKCS#10格式的证书请求
[root@node2 test]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
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.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:LN
Locality Name (eg, city) [Default City]:SY
Organization Name (eg, company) [Default Company Ltd]:MX
Organizational Unit Name (eg, section) []:DBC
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[root@node2 test]# ll /etc/pki/CA/
total 4
-rw-r--r-- 1 root root 1911 Apr 6 16:39 cacert.pem
drwxr-xr-x. 2 root root 6 Mar 28 2022 certs
drwxr-xr-x. 2 root root 6 Mar 28 2022 crl
drwxr-xr-x. 2 root root 6 Mar 28 2022 newcerts
drwx------. 2 root root 23 Apr 6 16:36 private
参数说明:
-new 生成新证书签署请求
-x509 生成自签格式证书,专用于创建私有CA时
-key 生成请求时用到的私有文件路径
-days 证书有效时长
-out 输出路径
[root@node2 test]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
[root@node2 test]# touch /etc/pki/CA/{serial,index.txt}
[root@node2 test]# echo 01 > /etc/pki/CA/serial
二、 请求签证的主机
某用到证书安全通信的服务器,需要向CA请求签署证书,以httpd为例
[root@node1 httpd]# mkdir /etc/httpd/ssl
[root@node1 httpd]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
.......+++
.......................................................+++
e is 65537 (0x10001)
[root@node1 httpd]# cd /etc/httpd/ssl
[root@node1 ssl]# ll
total 4
-rw------- 1 root root 1679 Apr 6 22:03 httpd.key
[root@node1 ssl]# openssl req -new -key httpd.key -out httpd.csr -days 365
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.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:CN
LN []:LN
Locality Name (eg, city) [SY]:SY
Organization Name (eg, company) [Default Company Ltd]:MX
Organizational Unit Name (eg, section) []:DBC
Common Name (eg, your name or your server's hostname) []:node1
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@node1 ssl]# ll
total 8
-rw-r--r-- 1 root root 956 Apr 6 22:05 httpd.csr
-rw------- 1 root root 1679 Apr 6 22:03 httpd.key
[root@node1 ssl]# scp httpd.csr node2:/home/test/
httpd.csr 100% 956 966.3KB/s 00:00
三、 CA服务器签证
[root@node2 test]# openssl ca -in /home/test/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Apr 6 08:59:02 2023 GMT
Not After : Apr 5 08:59:02 2024 GMT
Subject:
countryName = CN
stateOrProvinceName = LN
organizationName = MX
organizationalUnitName = DBC
commonName = node1
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
F3:A4:C5:F9:E4:08:17:38:F6:8C:22:9E:2E:96:75:B0:6D:BE:78:F5
X509v3 Authority Key Identifier:
keyid:51:CA:35:0D:A8:4C:02:F9:DE:7D:91:E0:5B:69:DC:19:BF:5A:30:E3
Certificate is to be certified until Apr 5 08:59:02 2024 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@node2 test]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=LN/O=MX/OU=DBC/CN=node1
[root@node1 ssl]# scp node2:/etc/pki/CA/certs/httpd.crt .
httpd.crt 100% 5589 2.8MB/s 00:00
[root@node1 ssl]# ll
total 16
-rw-r--r-- 1 root root 5589 Apr 6 22:23 httpd.crt
-rw-r--r-- 1 root root 976 Apr 6 22:12 httpd.csr
-rw------- 1 root root 1679 Apr 6 22:03 httpd.key
[root@node1 httpd]# cat /etc/httpd/conf.d/ssl.conf
sslcertificateFile /etc/pki/CA/certs/httpd.crt
sslcertificateKeyFile /etc/pki/CA/private/cakey.pem
分别使用http和https 来测试,当使用https来测试的时候系统会提示授权个你证书…
步骤:
[root@node1 certs]# pwd
/etc/pki/CA/certs
[root@node1 certs]# openssl x509 -in httpd.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=Liaoning/O=tianlang/OU=Ops/CN=k8s-node-02
[root@node2 CA]# cat index.txt
V 240405085902Z 01 unknown /C=CN/ST=LN/O=MX/OU=DBC/CN=node1
[root@node2 CA]# ll newcerts/
total 8
-rw-r--r-- 1 root root 5589 Apr 6 16:59 01.pem
[root@node2 CA]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
其中01
.pem要换成证书真正的序列号
[root@node2 CA]# echo 01>/etc/pki/CA/crlnumber
[root@node2 CA]# echo '01'>/etc/pki/CA/crlnumber
[root@node2 CA]# cat /etc/pki/CA/crlnumber
01
[root@node2 CA]# openssl ca -gencrl -out thisca.crl
Using configuration from /etc/pki/tls/openssl.cnf
[root@node2 CA]# openssl crl -in thisca.crl -noout -text
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: /C=CN/ST=LN/L=SY/O=MX/OU=DBC
Last Update: Apr 6 09:31:37 2023 GMT
Next Update: May 6 09:31:37 2023 GMT
CRL extensions:
X509v3 CRL Number:
1
Revoked Certificates:
Serial Number: 01
Revocation Date: Apr 6 09:28:14 2023 GMT
Signature Algorithm: sha256WithRSAEncryption
ca:1e:a0:41:79:dd:3a:5b:4d:7e:75:54:f8:e9:ca:d1:cc:0b:
e5:e7:9e:b4:97:08:b2:76:77:08:6a:f6:b1:ee:76:1a:7a:76:
90:a8:dd:d6:c0:48:c8:e7:71:2e:02:98:db:ab:57:22:ee:87:
64:b5:8c:b5:8e:ce:8d:9e:42:a4:1a:13:0f:7a:35:b3:7b:6f:
05:b4:db:e3:e2:38:cc:ec:8b:26:29:e3:ea:c2:fe:a7:03:98:
c2:02:e5:d8:cd:9a:53:74:25:45:4a:35:69:b7:1a:4e:01:6a:
03:a1:11:55:b5:c7:07:04:63:be:66:c7:a9:ce:29:68:a8:42:
12:da:cf:79:d9:d7:41:be:99:ab:f1:59:8d:4e:51:d2:28:99:
76:54:22:9e:78:b3:eb:5f:ed:f4:43:d6:6c:07:fe:77:f5:85:
cc:91:e6:98:dc:8c:3d:28:67:cb:bc:2e:fe:1a:0e:7a:fb:70:
00:c6:ec:79:24:81:45:0b:ec:d0:0e:16:d7:d8:68:e3:1a:6e:
b6:1c:78:f2:03:b7:d3:94:d2:d9:23:03:e4:8b:ec:ee:29:db:
a5:fe:2e:7e:94:02:d1:36:7d:63:5f:29:e0:56:8b:71:1f:b9:
d8:f5:5b:9c:77:d9:16:90:55:ee:8b:e2:0f:6a:87:76:c1:db:
97:24:62:f4:10:c2:69:5b:97:c3:b3:ea:1e:11:d8:81:d8:79:
8f:e0:fa:6f:9d:84:36:f5:65:cd:30:ef:b2:b4:0c:5b:73:3f:
e5:24:84:d5:f1:88:65:f6:c0:fe:75:23:b9:31:a0:23:e1:37:
74:d6:52:57:60:d0:4a:82:8e:f3:0b:5e:c3:72:55:6d:6e:b6:
ca:5a:ac:db:81:4b:7d:4d:8f:f0:16:40:4c:60:a4:3c:bc:61:
dd:d7:40:c5:25:08:33:8a:52:83:22:88:d0:13:38:46:2f:0b:
84:e6:93:41:bb:40:40:ca:94:ff:78:b8:70:a0:23:84:6d:5a:
69:b3:16:89:5f:5b:de:56:80:3a:57:f2:6c:89:ea:91:da:71:
19:87:aa:43:16:77:5f:0a:05:11:d0:ce:0c:2d:df:2a:78:ef:
19:3c:d4:ed:bf:12:df:6a:c4:e0:c8:0f:e8:58:8e:5d:f3:9e:
cd:a5:66:4d:95:72:f5:f2:29:ea:cc:ea:bc:a1:41:3a:37:43:
47:5d:cf:d5:d2:e1:c2:ac:16:0d:7e:0d:8a:86:cd:d1:98:38:
79:70:bb:a2:56:3c:b3:f9:58:69:48:7c:5f:e7:9f:bb:4f:53:
75:7c:f1:26:0a:f0:07:6e:3a:f2:16:47:14:a1:76:2c:f8:21:
f0:34:f0:eb:2f:5c:3d:d6