SSH第三种登录方式,什么是证书登录?处理及处置
SSH 是一个服务器登录工具。一般采用密码登录或按键登录。
不过,SSH还有第三种登录方式,那就是证书登录。在某些情况下,它是一种更合理、更安全的登录方式,本文就介绍这种登录方式。
无证书登录的缺点
使用密码登录和密钥登录各有其缺点。
密码登录需要输入服务器密码,非常繁琐且不安全,并且存在被暴力破解的风险。
密钥登录需要服务器存储用户的公钥,用户也必须存储服务器公钥的指纹。这对于拥有多个用户和多个服务器的大型组织来说非常不方便。如果员工离开,他的公钥必须从每台服务器上删除。
什么是证书登录?
证书登录就是为了解决上述缺陷而设计的。它引入了证书颁发机构 (CA) 来向受信任的服务器颁发服务器证书,并向受信任的用户颁发用户证书。
登录时,用户和服务器不需要提前知道对方的公钥。他们只需要交换各自的证书并验证他们是否值得信赖。
证书登录的主要优点有两个:(1)用户和服务器不需要交换公钥,更容易管理,并且具有更好的扩展性。 (2)证书可以设置过期时间,但公钥没有过期时间。针对不同情况,您可以设置有效期较短的证书,进一步提高安全性。
证书登录流程
在SSH证书登录之前,如果您还没有证书,则需要生成证书。具体方法是: (1)用户和服务器均将各自的公钥发送给CA; (2) CA使用服务器的公钥生成服务器证书并发送给服务器; (3) CA使用用户的公钥生成用户的证书。证书颁发给用户。
获得证书后,用户即可登录服务器。整个过程由 SSH 自动处理,无需用户感知。
第一步,当用户登录服务器时,SSH会自动将用户证书发送到服务器。
第二步,服务器检查用户证书是否有效并由受信任的CA颁发。验证通过后,用户可以信任。
第三步,SSH自动将服务器证书发送给用户。
第四步是用户检查服务器证书是否有效并由受信任的CA颁发。验证通过后,服务器是可以信任的。
第五步,双方建立连接,服务器允许用户登录。
生成CA的密钥
证书登录的前提是必须有CA,而CA本质上是一对与其他密钥没有区别的密钥。 CA 使用该密钥对来颁发证书。
虽然CA可以使用同一密钥对颁发用户证书和服务器证书,但为了安全性和灵活性,最好使用不同的密钥分别颁发。因此,CA至少需要两对密钥。一对是颁发用户证书的密钥,假设名称为 使用以下命令生成 上面的命令会在文件夹 该命令中各个参数的含义如下。 使用以下命令生成 上面的命令会在文件夹 现在目录 颁发证书时,除了需要CA的密钥外,还需要服务器的公钥。一般来说,当SSH服务器(通常是 上面的命令会在s/目录下生成 后,CA 可以使用密钥 上述命令将生成服务器证书 生成证书后,可以使用以下命令查看证书的详细信息。 最后设置证书的权限。 然后使用 CA 颁发用户证书。此时就需要用户的公钥。如果没有,客户端可以使用以下命令生成一对密钥。 上面的命令将在中生成 然后将用户的公钥 以上命令生成用户证书 生成证书后,可以使用以下命令查看证书的详细信息。 最后,设置证书的权限。 CA 生成服务器证书 然后将以下行添加到服务器配置文件 上面的代码告诉sshd服务器证书是哪个文件。 重新启动 sshd。 为了使服务器信任用户证书,必须将 CA 颁发的用户证书的公钥 上述命令将CA颁发的用户证书的公钥 然后将以下行添加到服务器配置文件 上面的方法是在 另一种方法是将 上述代码中, 重新启动 sshd。 此时,SSH 服务器已配置为信任由 客户端安装用户证书非常简单,就是将用户证书 为了让客户端信任服务器证书,必须将CA颁发的服务器证书的公钥 具体方法是打开 上面的代码中, 则可以使用证书登录远程服务器。上述命令中的 证书吊销操作分为两种:用户证书吊销和服务器证书吊销。中的@cert-authority 用户证书,请在服务器上创建新的 在上述命令中, 如果将来需要撤销其他用户公共密钥,可以使用以下命令将其存储在第 2 行。 user_ca,另一对是颁发服务器证书的密钥,假设名称为host_ca❀❝。 user_ca。 # 生成 CA 签发用户证书的密钥
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/user_ca -C user_ca
~/.ssh中生成一对密钥:user_ca(私钥)❀ca)和us(公钥)。 -t rsa:指定密钥算法RSA。 -b 4096:指定密钥的位数为4096。在安全性要求不高的情况下,该值可以更小,但不应小于1024。 -f ~ / .ssh/user_ca:指定生成密钥的位置和文件名。 -C user_ca:指定key的标识字符串,对应注释,可根据需要设置。 host_ca。 # 生成 CA 签发服务器证书的密钥
$ ssh-keygen -t rsa -b 4096 -f host_ca -C host_ca
~/.ssh中生成一对密钥:host_ca(私钥)和host_ca (公钥)。 ~/.ssh必须至少有四个键。 ~/.ssh/user_ca~/.ssh/user_ca.pub~/.ssh/host_ca~/.ssh/host_ca.pubCA颁发服务器证书
~ 拥有 CA 后,您就可以颁发服务器证书。 sshd)安装时,密钥/etc/ssh/ssh_host_rsa_key已经生成。如果没有,可以使用下面的命令来生成。$ sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -b 4096 -t rsa
ssh_host_rsa_key(私钥)和ssh_host_rsa_key.pub。 (公钥)。然后将服务器的公钥ssh_host_rsa_key.pub复制或上传到CA所在服务器。上传 host_ca 为服务器公钥 ssh_host_rsa_key.pub⸀ 颁发服务器证书。 文件(全局级别)或 $ ssh-keygen -s host_ca -I host.example.com -h -n host.example.com -V +52w ssh_host_rsa_key.pub
ssh_host_rsa_key-cert.pub(服务器公钥名称附加后缀-cert❀)。该命令中各个参数的含义如下。 的内容大概如下。 -s:指定CA颁发证书时使用的密钥。 -I:身份字符串,可根据需要设置。它对应于注释,对于区分证书很有用。该字符串可用于将来撤销证书。 -h:指定证书是服务器证书,而不是用户证书。 -n host.example.com:指定服务器的域名,表示证书仅对该域名有效。如果有多个域名,请用逗号分隔。当用户登录域名服务器时,SSH根据证书的值来决定向用户颁发哪个证书,以证明服务器的可信度。 -V +52w:输入证书的有效期,这里是52周(一年)。默认情况下,证书永久有效。建议使用该参数指定有效期,且有效期应较短,不超过52周。 ssh_host_rsa_key.pub:公共服务器密钥。 $ ssh-keygen -L -f ssh_host_rsa_key-cert.pub
$ chmod 600 ssh_host_rsa_key-cert.pub
CA 颁发用户证书
$ ssh-keygen -f ~/.ssh/user_key -b 4096 -t rsa
user_key(私钥)和user_key.pub(公钥)。图书馆。 user_key.pub上传或复制到CA服务器。接下来,您可以使用 CA 的密钥 user_ca 为用户的公钥 user_key.pub 颁发用户证书。$ ssh-keygen -s user_ca -I user@example.com -n user -V +1d user_key.pub
user_key-cert.pub(用户公钥名称加后缀-cert)。该命令中各个参数的含义如下。 -s:指定CA颁发证书时使用的密钥-I:可自定义的身份字符串,类似于注释,方便证书识别。该字符串可用于将来撤销证书。 -n user:输入用户名,表示证书仅对该用户名有效。如果有多个用户名,请用逗号分隔。当用户使用此用户名登录服务器时,SSH 使用此值来确定使用哪个证书来证明其身份并将其发送到服务器。 -V +1d:指定证书的有效期,这里是1天,强制用户每天申请证书,以提高安全性。默认情况下,证书永久有效。 user_key.pub:公共用户密钥。 $ ssh-keygen -L -f user_key-cert.pub
$ chmod 600 user_key-cert.pub
服务器安装证书
ssh_host_rsa_key-cert.pub 稍后将证书发送回服务器。您可以使用以下scp命令来复制证书。 $ scp ~/.ssh/ssh_host_rsa_key-cert.pub root@host.example.com:/etc/ssh/
/etc/ssh/sshd_config。 HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
$ sudo systemctl restart sshd.service
# 或者
$ sudo service sshd restart
服务器安装 CA 公钥
user_ca.pub 复制到服务器。 $ scp ~/.ssh/user_ca.pub root@host.example.com:/etc/ssh/
user_ca.pub复制到SSH服务器上的/etc/ssh。 所有用户证书已颁发。/etc/ssh/sshd_config。 TrustedUserCAKeys /etc/ssh/user_ca.pub
/etc/ssh/sshd_config中添加user_ca.pub,这样就会有一个全局账户,这样就会有一个全局账户user_causer_ca.pub 添加到 ~/.ssh/authorized_keys这样只有用户可以信任服务器_ca上的❝帐户颁发的用户证书。具体方法是打开~/.ssh/authorized_keys,添加一行以@cert-authorityprincipals="..."开头,然后添加ca。 pub @cert-authority principals="user" ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
principals="user"指定用户登录的服务器账户名,一般就是authorized_keys⸝文件所在的账户。 只需将其保存在同一个公文包中即可。 $ sudo systemctl restart sshd.service
# 或者
$ sudo service sshd restart
user_ca 签名的证书。 客户端安装证书
user_key-cert.pub从CA复制到客户端,以及用户的密钥❙❙❝ user_key客户端安装CA公钥
host_ca.pub添加到客户端证书中/etc/ssh / ssh_known_hosts~/.ssh/known_hosts 文件(用户级别)。 ssh_known_hosts或known_hosts文件,添加一行以♼hor.com开头的内容。 ,然后把host_ca.pub文件的内容(即公钥)粘贴在后面,大概是这样的。 @cert-authority *.example.com ssh-rsa AAAAB3Nz...XNRM1EX2gQ==
*.example.com是域名的模式匹配,也就是说只要服务器与模式域名匹配并且颁发服务器证书的CA与稍后给出公钥,一切都很好。信心。如果没有域名限制,可以写成*。如果有多个域名模式,可以用逗号分隔;如果服务器没有域名,可以使用主机名(如 host1,host2,host3)或 IP 地址(如 11.12.13.14,21.242... known_hosts❀ 文件。要吊销 $ ssh -i ~/.ssh/user_key user@host.example.com
-i参数用于指定用户的密钥,如果证书与密钥在同一目录下,则连接服务器时会自动使用证书。 证书吊销
/etc/ssh/revoked_keys 文件,然后在配置文件 ❀_s 中添加一行与♸d_configsh以下内容。文件 RevokedKeys /etc/ssh/revoked_keys
revoked_keys 包含不再受信任的用户的公钥,由以下命令生成。 $ ssh-keygen -kf /etc/ssh/revoked_keys -z 1 ~/.ssh/user1_key.pub
-z参数用于指定本示例中用户的公钥存储在revoked_keys文件中的哪一行。第 1 行。 $ ssh-keygen -ukf /etc/ssh/revoked_keys -z 2 ~/.ssh/user2_key.pub
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网