引言
在开发和测试过程中,使用 HTTPS 进行本地开发可以模拟生产环境,确保应用程序在实际部署时的安全性。本文将介绍如何在 Windows 环境中生成本地 SSL 证书,并将其配置到 Nginx 服务器上,以便通过 HTTPS 访问本地服务器。
安装必要工具
安装 OpenSSL
OpenSSL 是一个用于生成和管理 SSL/TLS 证书的工具。下载并安装 OpenSSL:
- 访问 OpenSSL 的 Windows 安装程序。
- 下载适合你 Windows 版本的安装程序(例如 Win64 OpenSSL v3.3.1)。
按照安装程序的提示完成安装。 - 安装后配置把
D:\Program Files\OpenSSL-Win64\bin
配置到环境变量。
安装 Nginx
我使用的是PHPStudy集成环境,自带Nginx服务器。
生成本地 SSL 证书
创建证书和私钥
- 打开命令提示符(cmd)或 PowerShell。
- 运行以下命令生成一个新的私钥和自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt
参数说明:
-x509
:指定生成自签名证书。-nodes
:不对私钥加密。-days 365
:证书有效期为 365 天。-newkey rsa:2048
:生成一个新的 RSA 密钥。-keyout
:指定私钥输出路径。-out
:指定证书输出路径。
- 在提示符下,输入证书信息
- 国家:填写
CN
- 州/省:填写
ShandDong
(根据自身情况填写即可) - 市:填写
QingDao
(根据自身情况填写即可) - 组织:填写公司名称英文即可(根据自身情况填写即可)
- 组织单位:填写部门名称英文即可(根据自身情况填写即可)
- 公共名称:对于本地开发,Common Name 应设置为
localhost
- 电子邮件: (根据自身情况填写即可)
- 国家:填写
配置 Nginx 使用 SSL
修改 Nginx 配置文件
打开 Nginx 配置文件(nginx.conf)。该文件通常位于 Nginx 安装目录的 conf 子目录下。或者vhost目录下的子域名配置文件。
编辑配置文件,添加以下内容以启用 HTTPS:
server {listen 443 ssl;server_name localhost;root "D:/phpstudy_pro/WWW";ssl_certificate D:/phpstudy_pro/Extensions/Nginx1.15.11/conf/ssl/localhost.crt;ssl_certificate_key D:/phpstudy_pro/Extensions/Nginx1.15.11/conf/ssl/localhost.key;location / {index index.php index.html;}location ~ \.php(.*)$ {fastcgi_pass 127.0.0.1:9009;fastcgi_index index.php;fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;include fastcgi_params;}
}
配置了 HTTPS 监听(端口 443),并指定了证书和私钥的位置。配置文件内容根据自己的实际情况配置。
重新启动 Nginx
根据实际情况重启Nginx服务器。
测试 HTTPS 配置
- 打开浏览器,访问
https://localhost
。 - 浏览器可能会提示不安全的证书。由于我们使用的是自签名证书,浏览器无法验证其真实性。你可以选择忽略警告并继续访问。
- 如果一切配置正确,你应该能够看到 Nginx 的欢迎页面或你配置的网页内容。
常见问题
浏览器警告
自签名证书不会被浏览器信任,你可以将证书添加到受信任的根证书颁发机构来避免警告。操作方法因浏览器不同而有所不同。
证书过期
自签名证书有一个有效期(本文中设置为 365 天)。证书过期后,你需要重新生成证书并更新 Nginx 配置。
总结
通过以上步骤,你已成功在 Windows 环境中生成本地 SSL 证书,并配置 Nginx 以支持 HTTPS。使用 HTTPS 进行本地开发可以确保你的应用在实际部署时符合安全要求,并提供更好的用户体验。如果你遇到任何问题或有任何疑问,请在评论区留言讨论。