1
概述:为什么在跳板机上使用crt证书
1. 使用crt(X.509)客户端证书可以在传输层提供双向TLS认证,防止凭证泄露与中间人攻击。
2. 跳板机(bastion)通常暴露在公网,配合证书可降低账号密码被暴力破解的风险。
3. 结合CDN与DDoS防护层,可把TLS入口与流量清洗放在前端,跳板机仅接受来自已验证的反向代理或客户端。
4. 证书管理适合企业级访问控制,便于撤销(CRL/OCSP)和集中审计。
5. 本文同时覆盖使用OpenSSH证书与TLS crt证书两种常见方式,满足不同场景的跳板机登录需求。
2
准备工作与服务器环境
1. 推荐服务器规格示例:VPS 2CPU/4GB 内存,Ubuntu 22.04/ Debian 11,公网带宽 100Mbps。
2. 域名与DNS:跳板域名示例 jump.example.com,A记录指向公网IP 203.0.113.10(示例)。
3. CDN 与 DDoS:将 jump.example.com 指向 Cloudflare/阿里云CDN,真实源站地址仅允许CDN出站IP访问。
4. 端口规划:TLS(HTTPS)监听 443 用于证书登录,SSH 22 仅允许来自内部或通过代理转发。
5. 安全组/防火墙:建议仅开放 443、4433(若需要)给公网,SSH 仅对管理网段或跳板内部开放。
3
生成CA与crt证书(OpenSSL 示例)
1. 生成私有CA私钥(示例使用RSA 4096):
openssl genrsa -out /root/ca.key 4096
2. 生成CA自签证书(有效期 10 年):
openssl req -x509 -new -nodes -key /root/ca.key -sha256 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=Example/OU=IT/CN=Example-Root-CA" -out /root/ca.crt
3. 为跳板机生成服务器密钥与CSR:
openssl genrsa -out /etc/ssl/private/jump.key 4096
openssl req -new -key /etc/ssl/private/jump.key -subj "/CN=jump.example.com" -out /root/jump.csr
4. 用CA签发服务器证书(有效期 1 年):
openssl x509 -req -in /root/jump.csr -CA /root/ca.crt -CAkey /root/ca.key -CAcreateserial -out /etc/ssl/certs/jump.crt -days 365 -sha256
5. 示例证书摘要(示例值):SHA256 指纹 = 3A:9B:...:F4,证书路径 /etc/ssl/certs/jump.crt,私钥 /etc/ssl/private/jump.key。
4
在Nginx上配置双向TLS以验证客户端证书
1. 安装 Nginx,并开启 TLS:apt install nginx;创建listen 443配置块。
2. 配置片段示例(关键项说明):要求客户端证书、使用 CA 进行验证。
server {
listen 443 ssl;
server_name jump.example.com;
ssl_certificate /etc/ssl/certs/jump.crt;
ssl_certificate_key /etc/ssl/private/jump.key;
ssl_client_certificate /root/ca.crt;
ssl_verify_client optional; # 或 on 强制客户端证书
...
}
3. ssl_verify_client 设置为 on 则未提供有效证书的连接会被拒绝;设置为 optional 则可以读取 X-Client-Verify 头用于后端鉴权。
4. 在 Nginx 中通过 $ssl_client_s_dn 或 $ssl_client_verify 转发客户端证书信息到后端(如认证服务)。
5. 测试方法:使用 curl 带客户端证书访问:
curl --key client.key --cert client.crt --cacert /root/ca.crt https://jump.example.com/
5
OpenSSH 证书方案(适用于直接 SSH 登录跳板机)
1. OpenSSH 的证书体系与 X.509 不同,使用 ssh-keygen 生成 CA 私钥:
ssh-keygen -t ed25519 -f /root/ssh_ca -N ""
2. 为用户生成公私钥:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_user -N ""
3. 用 CA 签发用户证书(示例有效期 7 天):
ssh-keygen -s /root/ssh_ca -I alice-cert -n alice -V +52w user.pub
4. SSHD 配置接受 CA 签发的用户证书:在 /etc/ssh/sshd_config 中加入:
TrustedUserCAKeys /etc/ssh/ssh_ca.pub
PasswordAuthentication no
PermitRootLogin no
5. 重启 sshd,并通过 ssh -i id_ed25519_user -o CertificateFile=id_ed25519_user-cert.pub 登录,服务器会验证证书签名与有效期。
6
证书分发、撤销与自动化管理
1. 客户端证书分发方式:使用安全渠道(企业 MDM、SCP、S3 + KMS解密)或生成时直接推送。避免使用邮件明文分发私钥。
2. 撤销策略:为 X.509 使用 CRL 或 OCSP;OpenSSH 可以通过缩短证书有效期或维护证书黑名单脚本来撤销。
3. 自动化:使用 Ansible 或 Terraform 与 PKI 模块自动生成与部署证书,示例:Ansible openssl_certificate 模块。
4. 证书轮换示例策略:CA 私钥每 3 年轮换,服务器证书每年轮换,用户证书短期(7-30 天)。
5. 日志与审计:记录证书颁发(CA)与客户端连接日志(Nginx access.log /var/log/auth.log),保留至少 90 天以便追溯。
7
DDoS、CDN 与安全加固建议
1. 前端使用 CDN(Cloudflare/阿里云)做流量吸收,配置仅允许 CDN IP 访问源站(安全组/防火墙白名单)。
2. 在 CDN 层启用 TLS 以及客户端证书校验(若支持),或者在源站启用双向 TLS 并在 CDN 做 TCP/SSL 转发。
3. 防火墙规则示例:仅允许 203.0.113.0/24(CDN 出站网段示例)访问 443,SSH 仅允许 10.0.0.0/24 管理网段。
4. 启用 Fail2ban 针对管理接口的暴力破解防护,并限制登录速率(rate limiting)。
5. 结合 WAF 规则阻断常见注入、扫描行为;对证书错误或拒绝的连接记录并触发告警。
8
真实案例与配置数据示例(表格展示)
1. 公司案例:某SaaS公司在跳板机上采用 Nginx 双向TLS + OpenSSH CA 的混合策略。
2. 真实服务器信息(脱敏示例)与证书摘要如下表所示:
| 字段 |
示例值 |
| 跳板域名 |
jump.example.com |
| 公网IP |
203.0.113.10 |
| 服务器证书路径 |
/etc/ssl/certs/jump.crt |
| 私钥路径 |
/etc/ssl/private/jump.key |
| 证书算法/长度 |
RSA 4096 / SHA-256 |
| OpenSSH CA 公钥 |
/etc/ssh/ssh_ca.pub |
| 用户证书有效期 |
7 天(短期) |
3. 经验教训:在该公司部署后,账户被暴力破解事件下降 >90%,审计能力提升,证书撤销主要依赖短期证书策略而非复杂 CRL。
4. 常见问题与排查:若 nginx 报 ssl_error,则检查 ssl_client_certificate 路径与证书链(openssl verify)。若 SSH 报 "authentication refused" 检查 TrustedUserCAKeys 是否可读及证书是否过期。
5. 总结:结合 X.509 crt 与 OpenSSH 证书可以在
跳板机层实现多维度安全策略;配合 CDN 与 DDoS 防护能显著提高系统可用性与安全性。
来源:从安装到登陆全面讲解crt登陆跳板机证书生成与配置流程