Window下phpstudy使用nginx配置https
1、自生成私钥和私有证书
在 Windows 环境下搭建 Web 服务器跑 php 应用,难免大家都会想起 WAMP 和 PHPSTUDY 这些集成一键部署软件,以下分享下 Window 下 phpstudy 使用 nginx 配置 SSL 证书
首先保证有一个可以正常访问到网页的域名在手。
安装 OpenSSL (点击跳转下载地址)
⚠️ 下载完整 MSI 版
安装完成后开始配置环境变量
变量名:OPENSSL_HOME 变量值: OpenSSL 的安装目录\bin (变量值为 OPENSSL 安装位置下的 bin 目录)
在 Path 变量结尾添加一条: %OPENSSL_HOME%
打开 phpstudy 安装目录下找到 nginx 文件夹 新建 openssl 文件夹
在文件夹路径栏敲击进入 CMD
创建 Key 私钥
创建 2048 bit 级别 Key 私钥
<font style="color:#F5222D;">openssl genrsa -des3 -out google_test.key 2048</font>
创建并配置 CSR 证书
继续创建 2048 bit 级别 CSR 证书
openssl req -new -nodes -newkey rsa:2048 -keyout google_test.key -out google_test.csr
⚠️ 这里的 google_test.key 文件为同一目录下的文件
1 | Country Name (2 letter code) [AU]:CN |
⚠️ A challenge password 不需要填写,不然日后在 Nginx 需要再次去除
至此,在 CMD 的根目录就生成了私有 CSR 证书。
2、NGINX 配置 SSL
本文档指导您在 NGINX HTTP 服务器上安装并配置 SSL 证书,关于 NGINX 在各个平台上的安装不再涉及。
配置 SSL 证书
1. 最正规的且完整的 SSL 证书分为四个部分:
CA 根证书 (root CA) 中级证书 (Intermediate Certificate) 域名证书 证书密钥 (仅由您持有)
以 COMODO PositiveSSL 证书为例,您将收到四份文件:
根证书 - AddTrustExternalCARoot.crt 中级证书 - COMODORSAAddTrustCA.crt 中级证书 - COMODORSADomainValidationSecureServerCA.crt 您的域名证书 - example_com.crt
2. 一般地,证书签发中心签发的 SSL 证书只有两个:
CA __证书串 - example_com.ca-bundle 您的域名证书 - example_com.crt
3. 最简单的只有一个 PEM 证书:
CA__证书 - full_chain.pem
接着需要要依照 域名证书 -> 中间证书 -> 根证书 的顺序串联为证书链,才能被绝大多数浏览器信任。提议在 Liunx 系统上使用 cat 命令串联证书,以下列举第一种情况:
<font style="color:#F5222D;">cat example_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > example_com.bundle.crt</font>
而第二种情况如下:
<font style="color:#F5222D;">cat example_com.crt example_com.ca-bundle > example_com.bundle.crt</font>
而第三种则不需要处理!
得到的新文件(example_com.bundle.crt)或(full_chain.pem)后,和私钥文件 xxx.key 一同上传至服务器并保存在安全的位置。
修改 NGINX 站点配置
下面是一份针对较新版本的 NGINX 的 SSL 部分配置,请将其添加到站点配置文件中 server 的部分,并根据注释和您的需求修改。
1 | listen 443 ssl; # 侦听端口 |
如果您希望至少支持一些老式浏览器,并且在能够使用 ECDHE 时尽可能使用此算法,您可以使用下面的配置:
1 | ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4"; |
能够最低支持到 Android 2.3 (不支持 IE6) 的方案:
1 | ssl_ciphers "CHACHA20:ECDH+AESGCM:ECDH+AES256:RSA+AESGCM:RSA+AES:DH+AESGCM:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+3DES:!aNULL:!eNULL:!EXPORT:!CAMLLIA:!DES:!MD5:!PSK:!RC4"; |
或者使用最简单的方案:
1 | ssl_ciphers "EECDH+aRSA+AES"; |
当然你也可以使用您可能需要使用 LibreSSL 以支持 CHACHA20 算法,以下不再枚举。
生成 DHE 参数
为了避免使用 OpenSSL 默认的 1024bit DHE 参数,我们需要生成一份更强的参数文件:
<font style="color:#F5222D;">openssl dhparam -out dhparam.pem 4096</font>
建议您使用性能强劲的平台生成此文件,例如最新版的至强物理机。如果您只有一台小型 VPS,请使用以下命令生成 2048bit 的参数文件。
<font style="color:#F5222D;">openssl dhparam -out dhparam.pem 2048</font>
完成后,在 SSL 配置下添加一行:
<font style="color:#F5222D;">ssl_dhparam /etc/ssl/certs/dhparam.pem;</font>
启用 HSTS
HTTP Strict Transport Security (HSTS) 可以使浏览器第一次访问您的站点后即记住仅通过 HTTPS 与您的站点通信,可以大大提升安全性。
在 SSL 配置下添加:
1 | add_header Strict-Transport-Security max-age=63072000; |
强制定向到 HTTPS
这里提供三种方法,使到访问域名的使用不约而同的使用 https 通道。
1. 侦听 HTTP 80 端口
1 | server { |
2. 使用重写
1 | rewrite ^ https://example.com$request_uri? permanent; # 请将 example.com 改为您的域名 |
3. 使用解析 301 跳转
示例,这里是基于 NGINX 1.15.11 的一份完整配置样例,结合实际,仅供参考。
1 | server { |
3、常见问题
Q:Nginx 部署 ssl 证书出现[emerg] PEM_read_bio_X509_AUX failed
****问题在于证书合并出现了异常“—–END CERTIFICATE———-BEGIN CERTIFICATE—–”粘在了一起,分开即可。
Centos 7.5 nginx+web 集群配置 https 报错 报错信息: [root@lb01 conf.d]# nginx -t nginx: [emerg] BIO_new_file(“/etc/nginx/ssl_key/server.crt”) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/nginx/ssl_key/server.crt’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file) nginx: configuration file /etc/nginx/nginx.conf test failed
没有证书,解决方法:/etc/nginx/ssl_key 里面放置证书
Window下phpstudy使用nginx配置https
https://blog.catooilg.com/2020/10/15/yuque/Window下phpstudy使用nginx配置https/