openssl签发自签名证书的流程

一、前置准备

  1. 确认已安装 OpenSSL,在终端执行 openssl version 验证,出现版本信息即表示安装成功。
  2. 选择一个工作目录(如 ~/ssl/),避免私钥和证书文件散落。

二、核心步骤

1. 生成私钥(Private Key)

私钥是证书的核心,用于签名和加密,需妥善保管,避免泄露。

  • 生成 RSA 私钥(推荐,常用 2048/4096 位)

    bash

    运行

    复制代码
    # 生成 2048 位 RSA 私钥,保存为 server.key(无密码保护,适合服务器环境)
    openssl genrsa -out server.key 2048
    
    # 生成带密码保护的私钥(每次使用需输入密码,更安全)
    openssl genrsa -des3 -out server.key 2048
    • 参数说明:
      • genrsa:指定生成 RSA 私钥
      • -out server.key:输出私钥文件名
      • 2048:密钥长度,越长越安全,4096 位安全性更高但性能稍差
      • -des3:用 3DES 算法加密私钥,增加密码保护
2. 生成证书签名请求(CSR, Certificate Signing Request)

CSR 包含证书申请者的信息(如域名、组织等),自签名时也需要这个文件来定义证书内容。

bash

运行

复制代码
openssl req -new -key server.key -out server.csr
  • 参数说明:
    • req:处理证书请求的指令
    • -new:生成新的 CSR
    • -key server.key:指定使用第一步生成的私钥
    • -out server.csr:输出 CSR 文件名

执行命令后,会交互式要求填写证书信息,关键项说明:

  • Country Name (2 letter code):国家代码,如 CN
  • Common Name (e.g. server FQDN or YOUR name):最关键,填域名或 IP (如 localhost、www.example.com、192.168.1.100),客户端验证证书时会匹配此项
  • 其他项(组织、部门、城市等)可留空直接回车
3. 用私钥自签名生成证书(CRT)

这一步是用自己的私钥,对 CSR 进行签名,生成自签名证书,有效期可自定义(如 3650 天 = 10 年)。

bash

运行

复制代码
# 生成自签名证书,有效期 3650 天,保存为 server.crt
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
  • 参数说明:
    • x509:处理 X.509 格式证书的指令
    • -req:表示输入的是 CSR 文件
    • -days 3650:证书有效期天数
    • -in server.csr:指定输入的 CSR 文件
    • -signkey server.key:用指定的私钥进行自签名
    • -out server.crt:输出自签名证书文件名

三、 快捷合并命令(一步生成私钥 + 证书)

如果不需要单独保存 CSR 文件,可直接用一条命令生成私钥和自签名证书,跳过手动填写信息的步骤(适合测试环境):

bash

运行

复制代码
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 3650 -nodes
  • 参数说明:
    • -x509:直接生成自签名证书,而非 CSR
    • -newkey rsa:2048:同时生成新的 RSA 私钥
    • -nodes:生成无密码保护的私钥(no DES)

四、 验证证书有效性

生成后可验证证书信息是否正确:

bash

运行

复制代码
# 查看证书详情
openssl x509 -in server.crt -text -noout

# 验证私钥和证书是否匹配
openssl rsa -in server.key -pubout | openssl sha256
openssl x509 -in server.crt -pubkey -noout | openssl sha256

两个命令输出的哈希值一致,说明私钥和证书匹配。

五、 注意事项

  1. 自签名证书不被浏览器、操作系统默认信任,适合测试、内网环境,不建议用于公网服务。
  2. 私钥文件(.key)需严格权限控制,建议设置 chmod 600 server.key,避免其他用户读取。
  3. 证书有效期不宜设置过短,否则需要频繁续签。

OpenSSL 自签名证书常用命令速查表

验证 OpenSSL 安装

openssl version

查看版本,确认工具可用

生成无密码 RSA 私钥

openssl genrsa -out server.key 2048

2048 位密钥,无密码保护,适合服务器

生成带密码 RSA 私钥

openssl genrsa -des3 -out server.key 2048

每次使用需输入密码,安全性更高

生成 CSR 证书请求

openssl req -new -key server.key -out server.csr

需交互式填写证书信息,Common Name 填域名 / IP

基于 CSR 生成自签名证书

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

有效期 10 年,用私钥自签名

一步生成私钥 + 证书(无 CSR)

openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 3650 -nodes

跳过 CSR,直接生成,-nodes 表示无密码

查看证书详细信息

openssl x509 -in server.crt -text -noout

输出证书有效期、使用者、公钥等信息

验证私钥与证书匹配性

openssl rsa -in server.key -pubout | openssl sha256

openssl x509 -in server.crt -pubkey -noout | openssl sha256

两个命令哈希值一致则匹配

设置私钥安全权限(Linux/macOS)

chmod 600 server.key

仅当前用户可读,防止私钥泄露

相关推荐
春天花会开1317 小时前
内网 HTTPS 部署实战:私有 CA + Nginx 反向代理全流程复盘
运维·nginx·https
XUEYUAN52126 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
CHENKONG_CK6 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
2501_916007476 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
Lsetea6 天前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链
z落落6 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
2501_916008896 天前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
SDWAN_Cheap6 天前
HTTPS到底加密了什么?
https·数据加密
曼巴UE56 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
开开心心就好6 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法