第 6 章 使用本地证书配置智能卡验证
使用本地证书配置智能卡验证:
- 主机没有连接到某个域。
- 您需要在这个主机上使用智能卡进行验证。
- 您需要使用智能卡验证配置 SSH 访问。
-
您需要使用
authselect
配置智能卡。
使用以下配置来实现这种情况:
为希望使用智能卡进行身份验证的用户获取用户证书。证书应该由在域中使用的可信认证认证机构生成。
如果您无法获得证书,您可以生成由本地证书颁发机构签名的用户证书用于测试。
- 在智能卡中保存证书和私钥。
- 为 SSH 访问配置智能卡验证。
如果主机可以作为域的一部分,将主机添加到域中,并使用活动目录或者身份管理认证机构生成的证书。
有关如何为智能卡创建 IdM 证书的详情,请参考为智能卡验证配置身份管理。
先决条件
已安装 authselect
authselect 工具在 Linux 主机中配置用户验证,您可以使用它配置智能卡验证参数。有关 authselect 的详情,请参考浏览 authselect。
RHEL 9 支持的智能卡或者 USB 设备
详情请查看 RHEL9 中的智能卡支持。
6.1. 创建本地证书
按照以下流程执行以下任务:
- 生成 OpenSSL 证书颁发机构
- 创建证书签名请求
以下步骤仅用于测试目的。由本地自签名证书颁发机构生成的证书不如使用 AD、IdM 或 RHCS 认证认证机构的安全。即使主机不是域的一部分,您仍应使用企业认证认证机构生成的证书。
流程
创建可生成证书的目录,例如:
# mkdir /tmp/ca # cd /tmp/ca
设置证书(将此文本复制到
ca
目录中的命令行):cat > ca.cnf <<EOF [ ca ] default_ca = CA_default [ CA_default ] dir = . database = \$dir/index.txt new_certs_dir = \$dir/newcerts certificate = \$dir/rootCA.crt serial = \$dir/serial private_key = \$dir/rootCA.key RANDFILE = \$dir/rand default_days = 365 default_crl_days = 30 default_md = sha256 policy = policy_any email_in_dn = no name_opt = ca_default cert_opt = ca_default copy_extensions = copy [ usr_cert ] authorityKeyIdentifier = keyid, issuer [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always basicConstraints = CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ policy_any ] organizationName = supplied organizationalUnitName = supplied commonName = supplied emailAddress = optional [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = Example OU = Example Test CN = Example Test CA EOF
创建以下目录:
# mkdir certs crl newcerts
创建以下文件:
# touch index.txt crlnumber index.txt.attr
在串行文件中写入数字 01:
# echo 01 > serial
该命令在串行文件中写入数字 01。它是证书的序列号。当这个 CA 发布一个新证书时这个数字会加一。
创建一个 OpenSSL root CA 密钥:
# openssl genrsa -out rootCA.key 2048
创建自签名 root 认证认证机构证书:
# openssl req -batch -config ca.cnf \ -x509 -new -nodes -key rootCA.key -sha256 -days 10000 \ -set_serial 0 -extensions v3_ca -out rootCA.crt
为您的用户名创建密钥:
# openssl genrsa -out example.user.key 2048
这个密钥是在本地系统中生成的,因此当密钥保存在卡中时,从系统中删除密钥。
您还可以直接在智能卡中创建密钥。要做到这一点,请遵循智能卡生产商生成的说明。
创建证书签名请求配置文件(将这个文本复制到 ca 目录中的命令行中):
cat > req.cnf <<EOF [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = Example OU = Example Test CN = testuser [ req_exts ] basicConstraints = CA:FALSE nsCertType = client, email nsComment = "testuser" subjectKeyIdentifier = hash keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth, emailProtection, msSmartcardLogin subjectAltName = otherName:msUPN;UTF8:testuser@EXAMPLE.COM, email:testuser@example.com EOF
为 example.user 证书创建证书签名请求:
# openssl req -new -nodes -key example.user.key \ -reqexts req_exts -config req.cnf -out example.user.csr
配置新证书。过期期限设定为 1 年:
# openssl ca -config ca.cnf -batch -notext \ -keyfile rootCA.key -in example.user.csr -days 365 \ -extensions usr_cert -out example.user.crt
此时,认证颁发机构和证书被成功生成并准备好导入到智能卡。