OpenSSH#007#使用数字证书登录
前面的文章我们介绍了基于密码身份验证、密钥身份认证等登录系统的方法,本文我们基于OpenSSH数字证书的身份认证。
基于数字证书的身份认证,主要包含如下内容:
第一,管理员:建设身份认证CA中心,包括CA私钥文件sanxian_ca和公钥文件sanxian_ca.pub,由私钥文件向用户端授权,由公钥文件验签;
第二,管理员:部署CA公钥文件sanxian_ca.pub到服务器,并对OpenSSH进行配置使其支持基于数字证书的身份认证;
第三,用户端:用户自行生成其私钥和公钥文件如:mancode_key和mancode_key.pub(该文件的名称可自定义);
第四,用户端:用户将公钥文件mancode_key.pub发送给管理员,并提交签发申请;
第五,管理员:使用CA公钥文件签发基于用户公钥文件的证书文件,并于证书文件中设置登录主体、登录有效期等关键信息;
第六,用户端:用户使用CA签发的mancode_key-cert.pub数字证书和私钥文件mancode_key通过OpenSSH登录系统;
第七,管理员:管理员进行日常维护,如用户离职等原因可以吊销已发放数字证书的登录权限;
第一步,创建CA中心的公私钥文件
我们使用如下命令来生成公私钥文件:
| |
此处我们生成公私钥时选择了ed25519算法,其算法选项可以为:dsa,ecdsa,ecdsa-sk,ed25519,ed25519-sk,rsa。
该命令执行过程,如下图所示:

执行完上述命令之后,在本地生成的sanxian_ca和sanxian_ca.pub就是我们需要的CA中心的私钥文件和公钥文件。其内容大概如下所示:

第二步,OpenSSH服务端的配置
1)如我们欲登录的服务器是192.168.9.132,那么我首先将sanxian_ca.pub文件上传到该服务器/etc/ssh目录下并设置权限:
设置权限命令:
| |
设置完毕后,如下图所示

2)创建文件夹 /etc/ssh/principals 并设置权限:
设置权限命令:
| |
上述命令执行后, 结果如下图所示:

3)创建登录账号的主体文件
假如服务器192.168.9.132上有4个账号:root、admin、mancode、sanxian,我们允许基于数字证书的身份认证,可以登录root、mancode这两个账号,那么我们就在/etc/ssh/principals目录下为root和mancode创建主题文件,在文件中明确该账号对应数字证书中的登录主体信息,并设置文件权限。
设置权限命令:
| |
填写文件内容以及设置权限后,结果如下图举例所示:

注意:主体文件中的内容可以自行设定,上图中的 principals_test_for_mancode 等仅为示例,其值只要与数字证书中的主题信息匹配即可!
/etc/ssh/principals/root和/etc/ssh/principals/mancode这两个文件的作用是什么?
以mancode账户为例:
- 在签发数字证书时:
为数字证书A设置登录主体为:principals_test_for_mancode
为数字证书B设置登录主体为:principals_test_for_nothing
- 用户后续使用 数字证书A 登录192.168.9.132的mancode账户时:
因数字证书A的主体信息 principals_test_for_mancode,其位于/etc/ssh/principals/mancode内,那么使用数字证书A可以正常登录;
- 用户后续使用 数字证书B 登录192.168.9.132的mancode账户时:
因数字证书B的主体信息 principals_test_for_nothing,其不在/etc/ssh/principals/mancode内,那么使用数字证书B就不能正常登录;
- 以此推断:数字证书B的主体信息不在/etc/ssh/principals/root和/etc/ssh/principals/mancode任一文件内,那么它不能正常登录任何账号;
4)修改配置文件/etc/sshd/sshd_config
我们在上述配置文件中增加如下两行配置信息:
| |
配置完毕后,信息如下图所示:

5)上述工作完成后,我们重启sshd,使用如下命令:
| |
第三步,用户创建公私钥文件以及签发
1)用户使用如下命令创建公私钥文件:
| |
上述命令执行过程如下图所示:

2)管理员使用CA私钥签发,使用如下命令:
| |
上述命令执行过程如下图所示:

其中,cert_a-cert.pub就是管理员签发后的用户数字证书。
我们使用如下命令查看下数字证书cert_a-cert.pub的信息:
| |
该证书信息如下图所示:

第四步,使用SecureCRT+数字证书登录服务器
1)将数字证书放置于Windows客户机上的任一位置,如下图所示:

2)打开SecureCRT创建连接,如下图所示:

3)选择数字证书的路径,如下图所示:

4)尝试登录服务器,如下图所示:

5)点击Connect查看登录结果,如下图所示:

第五步,使用SSH命令+数字证书登录服务器
上节介绍了使用SecureCRT+数字证书登录服务器的步骤,本节我们在另外一台Linux服务器上,使用SSH命令+数字证书登录服务器的方法。
1)首先,我们将数字证书拷贝客户端任一目录下,并为其设置权限0600,如下图所示:

2)然后,使用如下命令登录远程服务器,如下图所示:
| |
