当前位置: 首页 > news >正文

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

相关文章:

  • 查询docker-compose 部署的milvus 请求日志
  • 解决 Docker 里 DrissionPage 无法连接浏览器的问题,内含直接可用的Docker镜像(DrissionPage 浏览器链接失败 怎么办?)
  • Dockerfile的学习与实践
  • candence17.4仿真高通滤波与电容隔离电路
  • 坤驰科技QTS4200战鹰(Battle Eagle)系列实时频谱分析记录回放系统
  • 基于大模型的急性结石性胆囊炎全流程预测与诊疗方案研究
  • 【单片机】51单片机学习笔记
  • 使用Charles抓包工具提升API调试与性能优化效率
  • 【数字人开发】Unity+百度智能云平台实现短语音文本识别功能
  • DOM型XSS深度渗透实战
  • DL00215-基于YOLOv11的太阳能电池红外异常检测含数据集
  • 不同AI架构如何选择?单Agent+MCP“与“多Agent“架构对比分析!
  • GDB 简介与使用示例:程序调试从这里开始!
  • python使用pydantic库结合fastApi实现接口参数验证
  • 华为OD机试-最佳植树距离-二分(JAVA 2025A卷)
  • Linux:信号和线程
  • Hive优化详细讲解
  • AI与大数据如何驱动工业品电商平台的智能决策?
  • WRF-Hydro分布式水文模型:洪水预报、水资源管理与规划、生态水文研究、气候变化影响评估、流域综合管理、水电工程规划与运行
  • C++问题:深拷贝和浅拷贝
  • 网站建设优化西安/青岛设计优化公司
  • 郑州网站建设哪家公司便宜/上海做网站优化
  • 吉林省人民政府电话/seo网络推广报价
  • 装修公司做推广网站怎么弄/怎么样优化网站seo
  • 拼图式网站开发/网站怎么优化搜索
  • 做企业网站安装什么系统好/百度搜索引擎网站