首页主机资讯Ubuntu OpenSSL如何进行身份验证

Ubuntu OpenSSL如何进行身份验证

时间2026-01-20 13:29:04发布访客分类主机资讯浏览1178
导读: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 与 HMACTLS-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.cnf
    
    签发服务器证书(注意启用服务器用途扩展)
    cat >
         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/IPSAN
  • 常见错误
    • “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
OpenSSL加密Ubuntu文件的方法 Debian Java版本回滚怎么做

游客 回复需填写必要信息