首先下载安装openssl,网址如下:
https>https://slproweb.com/products/Win32OpenSSL.html
自签名证书生成及 Nginx HTTPS 配置教程
本教程将指导你如何生成自签名证书,并在 Nginx 中配置 HTTPS 服务。以下是详细步骤:
1. 生成加密的私钥文件
openssl genrsa -des3 -out C:\Users\10960\Desktop\nginx\server.key 2048
- 作用:生成一个 2048 位的 RSA 私钥,并使用 3DES 算法加密保护。
- 参数说明:
-
-des3
:使用 3DES 算法加密私钥文件(生成时需要输入密码)。-out
:指定私钥文件保存路径。
- 注意:私钥密码需要牢记!后续操作会用到。
2. 创建证书签名请求(CSR)
openssl req -new -key C:\Users\10960\Desktop\nginx\server.key -out C:\Users\10960\Desktop\nginx\server.csr -subj "/C=CN/ST=B/L=B/O=B/OU=B/CN=192.168.1.126"
- 作用:生成一个证书签名请求文件(CSR),用于申请证书。
- 参数说明:
-
-subj
:指定证书主题信息:
-
-
/C=CN
:国家(中国)/ST=B
:省份(示例值,可替换如Beijing
)/L=B
:城市(示例值,可替换如Beijing
)/O=B
:组织名称(示例值,可替换如MyCompany
)/OU=B
:组织单位(示例值,可替换如IT
)/CN=192.168.1.126
:通用名称(必须与访问域名/IP一致)
-
- 注意:
CN
必须填写实际访问的域名或 IP,否则浏览器会报证书名称不匹配。
3. 生成自签名证书
openssl x509 -req -days 30 -in C:\Users\10960\Desktop\nginx\server.csr -signkey C:\Users\10960\Desktop\nginx\server.key -out C:\Users\10960\Desktop\nginx\server.crt
- 作用:使用私钥直接签署证书(自签名),有效期 30 天。
- 参数说明:
-
-days 30
:证书有效期 30 天。-signkey
:指定签名用的私钥。
4. 导出无密码的私钥(供 Nginx 使用)
openssl rsa -in C:\Users\10960\Desktop\nginx\server.key -out C:\Users\10960\Desktop\nginx\server.key.unsecure
- 作用:生成一个无密码的私钥文件,避免 Nginx 启动时要求输入密码。
- 注意:
-
- 执行时会要求输入原始私钥的密码。
- 生产环境中需严格控制无密码私钥的权限!
5. 配置 Nginx HTTPS 服务
server {
listen 80;
listen 443 ssl;
server_name localhost;
# 强制 HTTP 跳转到 HTTPS(可选)
if ($scheme = http) {
return 301 https>https://$host$request_uri;
}
# SSL 配置
ssl_certificate cert/server.crt; # 指定证书的绝对路径
ssl_certificate_key cert/server.key.unsecure; # 指定私钥的绝对路径
# 其他配置(如根目录、日志等)
charset utf-8;
location / {
root html;
index index.html index.htm;
}
}
- 关键配置:
- 路径注意:
-
- Windows 路径需用正斜杠
/
或双反斜杠\\
。 - 建议将证书和私钥文件移动到 Nginx 的
conf/cert/
目录,并使用相对路径:
- Windows 路径需用正斜杠
ssl_certificate cert/server.crt;
ssl_certificate_key cert/server.key.unsecure;
6. 验证并重启 Nginx
# 检查配置文件语法
nginx -t
# 重启 Nginx
nginx -s reload
7. 访问测试
-
- 出现安全警告(自签名证书不被信任)。
- 手动忽略警告后可继续访问。
8. 解决浏览器警告(可选)
自签名证书会触发浏览器警告。如需消除警告,需:
- 将证书导入系统信任库(仅限内部测试环境):
-
- 将
server.crt
文件导入操作系统的“受信任的根证书颁发机构”。
- 将
- 使用受信任的证书:
-
- 正式环境中建议申请免费证书(如 Let's Encrypt)或购买商业证书。
完整操作流程图
生成私钥 (server.key) → 创建 CSR (server.csr) → 自签名证书 (server.crt)
↓
导出无密码私钥 (server.key.unsecure) → 配置 Nginx → 重启生效
常见问题
- Nginx 启动报错
SSL_CTX_use_PrivateKey_file failed
:
-
- 原因:私钥文件路径错误或权限不足。
- 解决:检查路径,并确保 Nginx 进程有读取权限。
- 浏览器提示
NET::ERR_CERT_COMMON_NAME_INVALID
:
-
- 原因:证书的
CN
与访问地址不匹配。 - 解决:重新生成证书,确保
CN
是域名或 IP。
- 原因:证书的
- 如何延长证书有效期?:
-
- 修改
-days
参数(如-days 365
)后重新生成证书。
- 修改
总结
通过本教程,你已成功配置了一个基于自签名证书的 Nginx HTTPS 服务。适用于测试环境或内部系统,生产环境建议使用受信任的证书。