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 (如 localhostwww.example.com192.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

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

相关推荐
不是光头 强16 分钟前
接口性能优化报告
网络协议·性能优化·rpc
treesforest36 分钟前
你以为只是一串数字?你的IP地址,正在悄悄暴露这些信息
网络·网络协议·tcp/ip·网络安全·ip归属地查询·ip风控
拾光Ծ2 小时前
【Linux网络】网络通信实战:UDP & TCP Socket编程实现Echo Server
linux·网络·网络协议·tcp/ip·udp·线程池
派葛穆2 小时前
s7-200smart-tcp/ip通讯
网络协议·tcp/ip
灯澜忆梦4 小时前
GO_网络编程---网络协议
网络·网络协议·golang
凌云C15 小时前
5G 协议体系与交互流程
网络协议
X7x520 小时前
跨厂商路由引入(重发布)实战指南:华为、华三、思科的逻辑差异与配置避坑
网络协议·信息与通信·信号处理·实施路由引入
玩转4G物联网20 小时前
FS800DTU 新品上线|免费使用 DMP 设备管理平台,支持远程批量配置 & OTA 升级
物联网·网络协议·tcp/ip·云平台·核心板·fs800dtu·iot管理平台
Chloeis Syntax21 小时前
JAVAEE初阶 --- 构造HTTP请求
网络·网络协议·http·postman
wuqingshun3141591 天前
说说TCP的3次握手?为什么需要三次握手?
服务器·网络协议·tcp/ip