通过OpenSSL 生成自签名证书

我们可以使用openssl生成一对密钥和证书。通常,证书文件(.crt)包含公钥和证书信息,而.key文件是私钥。

我们可以使用以下步骤:

  1. 生成私钥(.key文件)

  2. 使用私钥生成证书签名请求(CSR)

  3. 使用私钥和CSR生成自签名证书(.crt文件)

注意:这里生成的是自签名证书,适用于测试或内部使用。对于生产环境,通常需要向证书颁发机构(CA)申请签名。

方法一:生成自签名证书(一步完成)

bash 复制代码
# 生成私钥和自签名证书(有效期365天)
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes

# 交互式输入信息,或使用以下命令自动填写:
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/OU=YourDept/CN=yourdomain.com"

方法二:分步生成(更灵活)

bash 复制代码
# 1. 生成私钥
openssl genrsa -out server.key 2048

# 2. 生成证书签名请求(CSR)
openssl req -new -key server.key -out server.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=YourOrg/OU=YourDept/CN=yourdomain.com"

# 3. 生成自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

方法三:使用配置文件生成

  1. 创建配置文件 cert.conf
bash 复制代码
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req

[dn]
C = CN
ST = Beijing
L = Beijing
O = YourOrg
OU = YourDept
CN = yourdomain.com

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = yourdomain.com
DNS.2 = *.yourdomain.com
IP.1 = 192.168.1.100
  1. 执行生成命令:
bash 复制代码
openssl req -new -x509 -days 365 -nodes \
  -config cert.conf \
  -newkey rsa:2048 \
  -keyout server.key \
  -out server.crt

常用参数说明:

  • -newkey rsa:2048:生成 2048 位 RSA 密钥

  • -keyout:指定私钥输出文件

  • -out:指定证书输出文件

  • -days:证书有效期(天)

  • -nodes:不加密私钥(无密码)

  • -subj:自动填写证书信息

  • -x509:生成自签名证书

验证生成的证书:

bash 复制代码
# 查看证书信息
openssl x509 -in server.crt -text -noout

# 查看私钥信息
openssl rsa -in server.key -check -noout

# 验证密钥和证书是否匹配
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5
# 两个MD5值应该相同

安全提示:

  1. 保护私钥:私钥文件 (.key) 应严格保密

  2. 密码保护 (可选):移除 -nodes 参数可设置私钥密码

  3. 生产环境:自签名证书仅用于测试,生产环境应使用 CA 颁发的证书

  4. 密钥长度:推荐使用 2048 位或以上

相关推荐
AlfredZhao5 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346611 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪12 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
小宇宙Zz1 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信