Ubuntu OpenSSL如何进行身份验证
导读:Ubuntu 下 OpenSSL 身份验证实践 一 常见方式与适用场景 证书校验(单向 TLS):客户端验证服务器证书是否由受信任 CA 签发,常用于 HTTPS/TLS 服务。 双向 TLS(mTLS):服务器与客户端互相出示证书,适用...
Ubuntu 下 OpenSSL 身份验证实践
一 常见方式与适用场景
- 证书校验(单向 TLS):客户端验证服务器证书是否由受信任 CA 签发,常用于 HTTPS/TLS 服务。
- 双向 TLS(mTLS):服务器与客户端互相出示证书,适用于对身份要求更高的内网系统、API 网关等。
- HTTP 基本认证:通过 Base64 用户名/密码在应用层完成身份校验,常配合 TLS 使用。
- SSH 公钥认证:虽非 OpenSSL 专属,但在 Ubuntu 上广泛配合 OpenSSL 生成的密钥用于登录验证。
- PSK 与 HMAC:TLS-PSK 使用预共享密钥进行握手认证;HMAC 多用于应用层消息完整性与来源校验。
二 快速上手 单向 TLS 证书校验
- 生成服务器证书与密钥(示例为自签名,生产建议用正规 CA)
openssl req -x509 -newkey rsa:2048 -sha256 -days 365 -nodes \ -subj "/CN=test.com" -keyout server.key -out server.crt - 客户端验证服务器证书链
openssl verify -CAfile server.crt server.crt - 使用 s_client 查看证书链与握手信息
openssl s_client -connect test.com:443 -servername test.com - 说明:单向校验仅验证服务器身份;若需更高安全,使用受信任 CA 签发证书并在客户端正确配置信任链。
三 双向 TLS mTLS 完整流程
- 1)创建根 CA
openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \ -subj "/CN=MyRootCA" -keyout rootCA.key -out rootCA.crt - 2)生成服务器证书(含 SAN)
签发服务器证书(注意启用服务器用途扩展)cat > server.cnf < < 'EOF' [req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [dn] CN = test.com [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = test.com IP.1 = 192.168.1.10 EOF openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr -config server.cnfcat > server_cert.cnf < < 'EOF' authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage=digitalSignature,keyEncipherment extendedKeyUsage=serverAuth subjectAltName=@alt_names [alt_names] DNS.1 = test.com IP.1 = 192.168.1.10 EOF openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key \ -CAcreateserial -out server.crt -days 365 -sha256 -extfile server_cert.cnf - 3)生成客户端证书
cat > client.cnf < < 'EOF' [req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [dn] CN = client1 [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = client1 EOF openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr -config client.cnf cat > client_cert.cnf < < 'EOF' authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage=digitalSignature,keyEncipherment extendedKeyUsage=clientAuth EOF openssl x509 -req -in client.csr -CA rootCA.crt -CAkey rootCA.key \ -CAcreateserial -out client.crt -days 365 -sha256 -extfile client_cert.cnf - 4)服务端强制校验客户端证书(以 Nginx 为例)
server { listen 443 ssl; ssl_certificate /path/server.crt; ssl_certificate_key /path/server.key; ssl_client_certificate /path/rootCA.crt; # 信任链 ssl_verify_client on; # 要求客户端证书 } - 5)客户端连接测试(携带客户端证书)
openssl s_client -connect test.com:443 -servername test.com \ -cert client.crt -key client.key -CAfile rootCA.crt - 要点:服务器证书需包含正确的 SAN(域名或 IP);客户端证书需设置 extendedKeyUsage=clientAuth;服务端通过 ssl_verify_client on 强制校验。
四 其他常见验证方式
- HTTP 基本认证(命令行)
echo -n "user:pass" | openssl base64 # 生成 Base64 curl -u user:pass https://example.com - SSH 公钥认证(配合 OpenSSL 生成密钥)
ssh-keygen -t rsa -b 4096 -C "you@example.com" ssh-copy-id user@remote_host ssh -i ~/.ssh/id_rsa user@remote_host - 说明:SSH 认证流程由 OpenSSH 实现,但密钥对可用 OpenSSL 生成;生产环境建议禁用口令登录,仅保留公钥登录。
五 故障排查与安全建议
- 证书链与主机名/IP 校验
- 使用 openssl verify -CAfile rootCA.crt server.crt 检查链是否可信。
- 使用 openssl s_client 查看链与握手结果,确认证书包含目标 DNS/IP 的 SAN。
- 常见错误
- “unable to get local issuer certificate”:未正确配置信任链(缺少中间 CA 或根 CA)。
- “Hostname/IP does not match”:证书 SAN 未覆盖实际访问地址。
- 安全建议
- 保护 私钥(权限 600),定期轮换证书,优先使用受信任 CA 签发。
- 对高安全场景启用 mTLS,并与应用层认证(如用户名/口令或令牌)组合使用。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu OpenSSL如何进行身份验证
本文地址: https://pptw.com/jishu/787199.html
