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

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

相关推荐
北京耐用通信2 小时前
如何用耐达讯自动化Profibus总线光纤中继器解决变频器长距离通信干扰问题?
人工智能·物联网·网络协议·自动化·信息与通信
傣味洋芋3 小时前
WebSocket
网络·vue.js·websocket·网络协议
Hi202402173 小时前
HTTPS流量分析-网关抓包与解密全解析
网络协议·http·https
小李独爱秋4 小时前
计算机网络经典问题透视:可以通过哪些方案改造互联网,使互联网能够适合于传送音频/视频数据?
运维·服务器·网络协议·计算机网络·音视频
不知疲倦的仄仄4 小时前
HTTP解析/版本变化/TSL
网络协议·tcp/ip·macos
上海云盾第一敬业销售4 小时前
高防IP架构解析与实践分享
网络协议·tcp/ip·架构
fy zs4 小时前
传输层协议TCP
网络·网络协议·tcp/ip
❆VE❆4 小时前
websocket升级:实时通信实现竞价间功能、心跳+重连
网络·websocket·网络协议
qq_白羊座4 小时前
HTTP请求走私攻击
网络·网络协议·http