一、前置准备
- 确认已安装 OpenSSL,在终端执行
openssl version验证,出现版本信息即表示安装成功。 - 选择一个工作目录(如
~/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):国家代码,如CNCommon 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
两个命令输出的哈希值一致,说明私钥和证书匹配。
五、 注意事项
- 自签名证书不被浏览器、操作系统默认信任,适合测试、内网环境,不建议用于公网服务。
- 私钥文件(
.key)需严格权限控制,建议设置chmod 600 server.key,避免其他用户读取。 - 证书有效期不宜设置过短,否则需要频繁续签。
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
仅当前用户可读,防止私钥泄露