乐闻世界logo
搜索文章和话题

什么是 SSH 证书认证?如何配置和管理 SSH 证书?

3月6日 21:32

SSH 证书认证是一种基于公钥基础设施(PKI)的认证方式,相比传统的密钥认证具有更好的可管理性和安全性。

SSH 证书认证原理

SSH 证书认证使用证书颁发机构(CA)对用户密钥进行签名,生成包含身份信息和有效期的证书。

架构组件

  1. CA 密钥对:用于签发用户证书
  2. 用户密钥对:用户的公钥/私钥
  3. 用户证书:由 CA 签名的用户公钥
  4. 服务器配置:信任 CA 的公钥

证书类型

1. 用户证书(User Certificate)

用于认证用户身份。

bash
# 生成 CA 密钥对 ssh-keygen -t ed25519 -f ~/.ssh/ca_user_key # 签发用户证书 ssh-keygen -s ~/.ssh/ca_user_key \ -I "user_john" \ -n "john" \ -V +52w \ -z 1 \ ~/.ssh/user_key.pub # 证书参数说明 # -I: 身份标识 # -n: 用户名(可多个,逗号分隔) # -V: 有效期(+52w 表示52周) # -z: 序列号

2. 主机证书(Host Certificate)

用于认证服务器身份。

bash
# 生成 CA 密钥对 ssh-keygen -t ed25519 -f ~/.ssh/ca_host_key # 签发主机证书 ssh-keygen -s ~/.ssh/ca_host_key \ -I "host_server1" \ -h \ -n "server1.example.com,192.168.1.100" \ -V +52w \ -z 1 \ /etc/ssh/ssh_host_ed25519_key.pub # 证书参数说明 # -h: 主机证书标志 # -n: 主机名或 IP(可多个,逗号分隔)

服务器端配置

1. 配置信任 CA

bash
# /etc/ssh/sshd_config # 信任用户 CA TrustedUserCAKeys /etc/ssh/ca_user_key.pub # 信任主机 CA(可选,用于主机证书验证) TrustedUserCAKeys /etc/ssh/ca_host_key.pub # 启用证书认证 PubkeyAuthentication yes

2. 部署主机证书

bash
# 将主机证书复制到服务器 scp ssh_host_ed25519_key-cert.pub root@server1:/etc/ssh/ # 设置权限 chmod 644 /etc/ssh/ssh_host_ed25519_key-cert.pub # 重启 SSH 服务 systemctl restart sshd

客户端配置

1. 使用证书连接

bash
# 直接使用证书连接(无需额外配置) ssh -i ~/.ssh/user_key user@server1 # 或在配置文件中指定 Host server1 HostName server1.example.com User user IdentityFile ~/.ssh/user_key CertificateFile ~/.ssh/user_key-cert.pub

2. 验证主机证书

bash
# 配置信任主机 CA # ~/.ssh/known_hosts @cert-authority *.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...

证书管理

1. 证书撤销

bash
# 创建撤销列表 # /etc/ssh/revoked_keys # 格式:serial:reason 1:compromised 2:terminated # 配置撤销列表 # /etc/ssh/sshd_config RevokedKeys /etc/ssh/revoked_keys

2. 证书续期

bash
# 重新签发证书 ssh-keygen -s ~/.ssh/ca_user_key \ -I "user_john" \ -n "john" \ -V +52w \ -z 2 \ ~/.ssh/user_key.pub

3. 批量签发

bash
# 脚本批量签发用户证书 #!/bin/bash CA_KEY=~/.ssh/ca_user_key VALIDITY="+52w" for user in alice bob charlie; do ssh-keygen -s $CA_KEY \ -I "user_$user" \ -n "$user" \ -V $VALIDITY \ ~/.ssh/${user}_key.pub done

证书优势

1. 集中管理

  • 统一的 CA 管理所有用户
  • 无需在每个服务器上添加公钥
  • 便于撤销和更新证书

2. 安全性

  • 证书包含有效期,自动过期
  • 可限制证书使用范围
  • 支持撤销机制

3. 可扩展性

  • 支持大规模部署
  • 便于自动化管理
  • 减少运维成本

高级特性

1. 证书扩展

bash
# 限制证书用途 ssh-keygen -s ~/.ssh/ca_user_key \ -I "user_deploy" \ -n "deploy" \ -V +4w \ -O clear \ -O no-port-forwarding \ -O no-X11-forwarding \ -O force-command=/usr/local/bin/deploy.sh \ ~/.ssh/deploy_key.pub # 扩展选项 # -O clear: 清除所有默认权限 # -O no-port-forwarding: 禁用端口转发 # -O no-X11-forwarding: 禁用 X11 转发 # -O force-command: 限制只能执行特定命令 # -O source-address: 限制来源 IP

2. 证书模板

bash
# 创建不同角色的证书模板 # 管理员证书 ssh-keygen -s $CA_KEY -I "admin" -n "admin" -V +52w -O permit-pty admin_key.pub # 部署证书 ssh-keygen -s $CA_KEY -I "deploy" -n "deploy" -V +4w -O no-port-forwarding deploy_key.pub # 只读证书 ssh-keygen -s $CA_KEY -I "readonly" -n "readonly" -V +52w -O no-pty readonly_key.pub

3. 证书审计

bash
# 查看证书信息 ssh-keygen -L -f ~/.ssh/user_key-cert.pub # 输出示例 # Type: ssh-ed25519-cert-v01@openssh.com user certificate # Public key: ED25519-CERT SHA256:... # Signing CA: ED25519 SHA256:... # Key ID: "user_john" # Serial: 1 # Valid: from 2024-01-01T00:00:00 to 2025-01-01T00:00:00 # Principals: john

实际应用场景

场景1:企业级用户管理

bash
# 集中管理企业用户 # 1. 创建企业 CA ssh-keygen -t ed25519 -f /etc/ssh/enterprise_ca # 2. 为员工签发证书 ssh-keygen -s /etc/ssh/enterprise_ca \ -I "emp_001" \ -n "john.doe" \ -V +52w \ ~/.ssh/john_key.pub # 3. 员工离职时撤销证书 echo "1:terminated" >> /etc/ssh/revoked_keys

场景2:自动化部署

bash
# 为 CI/CD 系统签发短期证书 ssh-keygen -s $CA_KEY \ -I "ci_cd" \ -n "cicd" \ -V +1d \ -O force-command=/usr/local/bin/deploy.sh \ ~/.ssh/cicd_key.pub

场景3:多环境管理

bash
# 为不同环境签发不同证书 # 开发环境 ssh-keygen -s $CA_KEY -I "dev" -n "dev" -V +4w dev_key.pub # 测试环境 ssh-keygen -s $CA_KEY -I "test" -n "test" -V +4w test_key.pub # 生产环境 ssh-keygen -s $CA_KEY -I "prod" -n "prod" -V +2w prod_key.pub

最佳实践

  1. 保护 CA 私钥:使用硬件安全模块(HSM)或离线存储
  2. 定期轮换:定期更换 CA 密钥
  3. 限制权限:为不同角色签发不同权限的证书
  4. 监控使用:记录证书使用情况
  5. 自动化管理:使用自动化工具管理证书生命周期
  6. 备份 CA:安全备份 CA 密钥
  7. 测试流程:在测试环境验证证书配置
  8. 文档记录:记录证书签发和撤销流程
标签:SSH