欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > openssl 自签证书生成步骤

openssl 自签证书生成步骤

2025/6/21 14:40:24 来源:https://blog.csdn.net/AnalogElectronic/article/details/148767849  浏览:    关键词:openssl 自签证书生成步骤

问题:openssl 自签证书生成步骤,使用rsa ,需要服务器端 pem和key文件, 针对服务器ip http://10.11.111.11/
要求私钥为 -----BEGIN RSA PRIVATE KEY----- 格式

以下是针对服务器IP 10.11.111.11 生成自签名证书的完整步骤(使用RSA算法),确保私钥为传统PEM格式(-----BEGIN RSA PRIVATE KEY-----),并生成服务器端所需的.pem(证书)和.key(私钥)文件:


📝 生成步骤

1. 生成RSA私钥(传统PEM格式)

openssl genrsa -traditional -out server.key 2048
  • 关键参数
    -traditional:强制生成传统格式的RSA私钥(以-----BEGIN RSA PRIVATE KEY-----开头)。
    2048:RSA密钥长度(推荐安全强度)。
  • 输出文件server.key(私钥文件)。
2. 创建证书签名请求(CSR)
openssl req -new -key server.key -out server.csr -subj "/CN=10.11.111.11"
  • 关键参数
    -subj:直接指定主题信息,避免交互式输入。/CN=10.11.111.11 将IP设为通用名称(必须与访问地址一致,否则浏览器报错)。
  • 输出文件server.csr(证书请求文件)。
3. 生成自签名证书(.pem文件)
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.pem
  • 关键参数
    -days 365:证书有效期(1年)。
    -signkey server.key:用私钥直接签名,生成自签名证书。
  • 输出文件server.pem(证书文件,PEM格式)。

最终生成文件

文件用途格式要求
server.key服务器私钥-----BEGIN RSA PRIVATE KEY-----
server.pem服务器证书(含公钥)-----BEGIN CERTIFICATE-----

🔍 验证文件格式

# 检查私钥格式(确认包含 BEGIN RSA PRIVATE KEY)
head -n 1 server.key# 查看证书信息(确认IP在CN字段)
openssl x509 -in server.pem -text -noout | grep "CN="
  • 私钥首行应为 -----BEGIN RSA PRIVATE KEY-----
  • 证书的 Subject: CN = 10.11.111.11 需与IP一致。

⚠️ 注意事项

  1. 浏览器警告:自签名证书会被浏览器标记为“不安全”,需手动信任(仅适用于测试/内网)。
  2. 私钥安全server.key 必须严格保密,泄露会导致安全风险。
  3. 扩展用途
    • 若需配置Nginx,参考以下配置片段:
    ssl_certificate     /path/to/server.pem;
    ssl_certificate_key /path/to/server.key;
    
    • Kubernetes TLS Secret可通过命令创建:
    kubectl create secret tls my-tls-secret --cert=server.pem --key=server.key
    

由小艺AI生成<xiaoyi.huawei.com>

2、证书解析错误 DNSNames

根据您遇到的“证书解析错误 DNSNames”问题,这是由于现代浏览器(如Chrome)强制要求证书包含Subject Alternative Name(SAN)扩展字段导致的。以下是修复后的完整解决方案:


🔧 修复步骤(添加SAN扩展)

1. 创建SAN配置文件 ext.cnf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req[req_distinguished_name]
countryName = CN
stateOrProvinceName = State
localityName = City
organizationName = Organization
commonName = 10.11.111.11  # 必须与访问IP一致[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names  # 关键SAN配置[alt_names]
IP.1 = 10.11.111.11  # 声明IP为SAN
2. 生成RSA私钥(传统格式)
openssl genrsa -traditional -out server.key 2048
3. 生成CSR(集成SAN扩展)
openssl req -new -key server.key -out server.csr \-subj "/CN=10.11.111.11" \  # 通用名称设为IP-config ext.cnf \           # 加载SAN配置-extensions v3_req          # 启用扩展段
4. 生成自签名证书(含SAN)
openssl x509 -req -days 365 \-in server.csr \-signkey server.key \-out server.pem \-extfile ext.cnf \          # 关键:注入SAN-extensions v3_req

✅ 验证SAN配置

openssl x509 -in server.pem -text -noout | grep -A1 "Subject Alternative Name"

输出应包含:

X509v3 Subject Alternative Name: IP Address:10.11.111.11

⚠️ 关键修复点说明

  1. SAN扩展必要性
    现代浏览器已弃用CN字段校验,强制要求证书包含subjectAltName扩展字段。未配置SAN会导致ERR_CERT_COMMON_NAME_INVALID错误。

  2. IP地址的特殊处理

    • SAN中必须显式声明IP地址(IP.1 = 10.11.111.11
    • CN字段仍需设置为IP(双重兼容性保障)
  3. 私钥格式保障
    使用-traditional参数确保私钥为传统PEM格式(-----BEGIN RSA PRIVATE KEY-----


📦 最终文件清单

文件用途格式验证
server.keyRSA私钥head -1 server.key-----BEGIN RSA PRIVATE KEY-----
server.pem证书openssl x509 -in server.pem -text | grep "IP Address"

由小艺AI生成<xiaoyi.huawei.com>

3、还是报错啊, 证书解析错误 DNSNames

您遇到的 “证书解析错误 DNSNames” 问题通常是因为证书的 Subject Alternative Name (SAN) 扩展中缺少 DNS 格式的标识(即使您使用 IP 访问)。以下是终极解决方案:


🔧 关键修复步骤(同时添加 IP 和 DNS 格式的 SAN)

1. 修改 SAN 配置文件 ext.cnf
[alt_names]
# 必须同时声明 IP 和 DNS 格式
IP.1 = 10.11.111.11      # IP 地址格式
DNS.1 = 10.11.111.11     # DNS 格式(解决 DNSNames 错误的核心)
2. 重新生成证书(复用私钥)
# 生成新CSR(含双重SAN)
openssl req -new -key server.key -out server_new.csr \-subj "/CN=10.11.111.11" \-config ext.cnf -extensions v3_req# 生成新证书(注入双重SAN)
openssl x509 -req -days 365 \-in server_new.csr \-signkey server.key \-out server_new.pem \-extfile ext.cnf -extensions v3_req

✅ 双重验证命令

openssl x509 -in server_new.pem -text -noout | grep -A 2 "Subject Alternative Name"

正确输出应包含:

X509v3 Subject Alternative Name: IP Address:10.11.111.11,DNS:10.11.111.11     # ← 这是解决 DNSNames 错误的关键

⚠️ 问题根源解析

错误类型原因解决方案
ERR_CERT_COMMON_NAME_INVALID现代浏览器忽略 CN 字段添加 SAN 的 IP 地址项
证书解析错误 DNSNamesSAN 中缺少 DNS 格式标识同时添加 IP.xDNS.x
私钥格式错误非标准 PEM 格式-traditional 生成 RSA 密钥

📌 必须注意的细节

  1. DNS 格式 SAN 是强制要求

    • 即使访问的是 IP,某些环境(如 Java/Node.js)仍要求证书包含 DNS: 条目
    • 未配置时触发错误:Certificate does not contain any DNS SANs
  2. 浏览器兼容性差异

    Chrome/Edge
    接受纯IP格式SAN
    Firefox/Safari
    Java应用
    要求DNS格式SAN
    报错
    Node.js应用
  3. 证书部署后清理

    # 重启 web 服务前清除旧证书缓存
    sudo systemctl stop nginx
    sudo rm /var/lib/nginx/ssl_session_cache/*
    sudo systemctl start nginx
    

🛠️ 终极验证方案

  1. OpenSSL 客户端测试

    openssl s_client -connect 10.11.111.11:443 -servername 10.11.111.11 | grep "DNS:"
    

    输出必须包含:
    DNS:10.11.111.11

  2. 浏览器强制刷新
    Chrome 中执行 Ctrl+Shift+R(忽略缓存重载)

  3. 跨平台验证工具

    curl -vk --resolve 10.11.111.11:443:127.0.0.1 
    

    检查输出中 * SSL certificate verify ok.

由小艺AI生成<xiaoyi.huawei.com>

4、总结

命令

openssl genrsa -traditional -out server.key 2048openssl req -new -key server.key -out server.csr -subj "/CN=10.11.111.11"  -config ext.cnf  -extensions v3_req openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.pem -extfile ext.cnf -extensions v3_req

ext.cnf文件

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req[req_distinguished_name]
countryName = CN
stateOrProvinceName = State
localityName = City
organizationName = Organization
commonName = 10.11.111.11  # 必须与访问IP一致[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names  # 关键SAN配置[alt_names]
# 必须同时声明 IP 和 DNS 格式
IP.1 = 10.11.111.11      # IP 地址格式
DNS.1 = 10.11.111.11     # DNS 格式(解决 DNSNames 错误的核心)

参考https://blog.csdn.net/weixin_44323744/article/details/144242987

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词