一、这篇教程要做什么?
我们要自己生成一套 HTTPS 证书,然后配置到 Nginx,让网站可以通过:
https://你的域名或IP
访问。
这种证书叫 自签 SSL 证书。
二、先了解几个文件
在生成证书时,经常会看到这些文件:
| 文件 | 含义 |
|---|---|
.key |
私钥,自己保存,不能泄露 |
.csr |
证书请求文件,由私钥生成 |
.crt |
证书文件,用来配置 HTTPS |
简单理解:
私钥 key = 自己生成的钥匙
CSR = 用私钥生成的申请表
CRT = 最终给 Nginx 使用的证书
三、准备工作
你需要先安装:
OpenSSL
Nginx
如果你只是本地测试,可以直接继续。
如果是 Linux 上的 Nginx,需要确认 Nginx 编译时支持 SSL 模块:
--with-http_ssl_module
四、生成 SSL 证书
建议先新建一个目录保存证书文件,例如:
mkdir ssl
cd ssl
五、生成带密码的私钥
执行:
openssl genrsa -des3-out server.pass.key 2048
执行后会要求输入两次密码。
示例密码:
12345678
这个密码可以自己设置,但要记住,下一步会用到。
生成后会得到:
server.pass.key
六、生成不带密码的私钥
Nginx 启动时如果私钥带密码,会比较麻烦,所以通常再生成一个不带密码的私钥。
执行:
openssl rsa -in server.pass.key -out server.key
这一步会让你输入刚才设置的密码。
生成后会得到:
server.key
这个文件就是后面 Nginx 要用的私钥。
七、生成 CSR 证书请求文件
执行:
openssl req -new-key server.key -out server.csr -subj"/C=CN/ST=Beijing/L=Beijing/O=dev/OU=dev/CN=127.0.0.1"
生成后会得到:
server.csr
这里重点看最后的:
CN=127.0.0.1
如果你是本地测试,可以写:
127.0.0.1
如果你是给域名用,比如:
example.com
那就改成:
/C=CN/ST=Beijing/L=Beijing/O=dev/OU=dev/CN=example.com
八、生成证书 CRT 文件
执行:
openssl x509 -req-days365-in server.csr -signkey server.key -out server.crt
其中:
-days 365
表示证书有效期是 365 天。
生成后会得到:
server.crt
到这里,核心证书文件已经生成好了。
九、查看证书信息
可以执行:
openssl x509 -in server.crt -noout-text
这个命令可以查看证书详情。
十、最终会得到哪些文件?
你会看到类似这些文件:
server.pass.key
server.key
server.csr
server.crt
Nginx 主要用这两个:
server.crt
server.key
十一、配置 Nginx HTTPS
把下面两个文件复制到 Nginx 的 SSL 目录中:
server.crt
server.key
例如放到:
D:/dev/nginx/ssl/
然后修改 Nginx 配置:
server {
listen443 ssl;
ssl_certificate"D:/dev/nginx/ssl/server.crt";
ssl_certificate_key"D:/dev/nginx/ssl/server.key";
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500502 503504 /50x.html;
location = /50x.html {
}
}
如果你是 Linux,路径可能类似:
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
十二、重启 Nginx
修改配置后,先检查配置是否正确:
nginx -t
如果没有报错,重启 Nginx:
nginx -s reload
或者 Linux 上:
systemctl reload nginx
十三、访问测试
打开浏览器访问:
https://127.0.0.1
或者:
https://你的域名
如果浏览器提示"不安全"或"证书不受信任",这是正常的。
因为这是自签证书,不是正规 CA 机构签发的证书。
十四、字段说明
生成 CSR 时有这些字段:
| 字段 | 含义 | 示例 |
|---|---|---|
| C | 国家 | CN |
| ST | 省份 | Beijing |
| L | 城市 | Beijing |
| O | 组织名称 | dev |
| OU | 组织部门 | dev |
| CN | 域名或 IP | 127.0.0.1 |
最重要的是:
CN
它一般填写你的域名或 IP。
十五、在线生成 CSR 工具
也可以使用在线工具生成 CSR:
https://myssl.com/csr_create.html
十六、注意事项
-
server.key是私钥,不要泄露。 -
自签证书适合本地测试、内网环境。
-
如果是公网正式网站,建议使用正规 SSL 证书。
-
浏览器不信任自签证书是正常现象。
-
Nginx 必须支持 SSL 模块才能配置 HTTPS。
十七、完整命令汇总
openssl genrsa -des3-out server.pass.key 2048
openssl rsa -in server.pass.key -out server.key
openssl req -new-key server.key -out server.csr -subj"/C=CN/ST=Beijing/L=Beijing/O=dev/OU=dev/CN=127.0.0.1"
openssl x509 -req-days365-in server.csr -signkey server.key -out server.crt
openssl x509 -in server.crt -noout-text