如何正确安装配置phpEnv中的HTTPS证书?
- 内容介绍
- 文章标签
- 相关推荐
本文共计752个文字,预计阅读时间需要4分钟。
从2021年起,Chrome浏览器强制要求本地证书必须包含`subjectAltName`(SAN)扩展,并由本地信任的CA签发。手动生成的证书已包含SAN,即使缺少可信根证书,浏览器也会报错。正确做法是使用`mkcert`工具——它将帮助你生成证书,并将自建的根证书自动安装进系统及浏览器信任库。
用 mkcert 生成 localhost 可信证书
先确保已安装 mkcert(Windows 上推荐用 Chocolatey:choco install mkcert;macOS 用 brew install mkcert)。
- 运行
mkcert -install—— 这步必须做,否则浏览器不认 - 再运行
mkcert localhost 127.0.0.1 ::1,会生成两个文件:localhost+2.pem(证书)和localhost+2-key.pem(私钥) - 把这两个文件复制到
phpEnvpacheconfssl目录下(若无此目录请手动创建)
修改 phpEnv 的 Apache 配置启用 HTTPS
phpEnv 的 Apache 默认不启用 SSL 模块,也不监听 443 端口。你需要改两处配置文件:
- 打开
phpEnvpacheconfhttpd.conf,取消以下两行的注释:LoadModule ssl_module modules/mod_ssl.soInclude conf/extra/httpd-ssl.conf - 打开
phpEnvpacheconfextrahttpd-ssl.conf,找到<VirtualHost _default_:443>块,修改关键项:ServerName localhost:443DocumentRoot "E:/phpEnv/www"(按你实际项目路径填)SSLCertificateFile "E:/phpEnv/apache/conf/ssl/localhost+2.pem"SSLCertificateKeyFile "E:/phpEnv/apache/conf/ssl/localhost+2-key.pem" - 确保
Listen 443在httpd.conf中未被注释
改完后重启 phpEnv 的 Apache 服务。首次访问 https://localhost 时,Chrome 仍可能弹“不安全”警告——点“高级”→“继续前往 localhost(不安全)”即可,仅第一次需要,之后就信任了。
立即学习“PHP免费学习笔记(深入)”;
PHP 代码里怎么判断当前是 HTTPS
Apache 启用 SSL 后,$_SERVER['HTTPS'] 通常会是 "on",但 phpEnv 的 Apache 若未显式设置,有时会为空。最稳妥的写法是:
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { // 当前是 HTTPS } elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { // 有反向代理时备用判断(phpEnv 一般不用) }
注意:别依赖 $_SERVER['SERVER_PORT'] === '443',因为端口可被代理或重写,不可靠。
真正容易被忽略的是私钥权限和路径写法:Windows 下 Apache 对私钥文件路径中的反斜杠 很敏感,务必统一用正斜杠 / 或双反斜杠 \;另外,如果证书路径写错或文件不存在,Apache 启动会静默失败——此时要看 phpEnvpachelogserror.log 里的具体报错,而不是只看界面是否启动成功。
本文共计752个文字,预计阅读时间需要4分钟。
从2021年起,Chrome浏览器强制要求本地证书必须包含`subjectAltName`(SAN)扩展,并由本地信任的CA签发。手动生成的证书已包含SAN,即使缺少可信根证书,浏览器也会报错。正确做法是使用`mkcert`工具——它将帮助你生成证书,并将自建的根证书自动安装进系统及浏览器信任库。
用 mkcert 生成 localhost 可信证书
先确保已安装 mkcert(Windows 上推荐用 Chocolatey:choco install mkcert;macOS 用 brew install mkcert)。
- 运行
mkcert -install—— 这步必须做,否则浏览器不认 - 再运行
mkcert localhost 127.0.0.1 ::1,会生成两个文件:localhost+2.pem(证书)和localhost+2-key.pem(私钥) - 把这两个文件复制到
phpEnvpacheconfssl目录下(若无此目录请手动创建)
修改 phpEnv 的 Apache 配置启用 HTTPS
phpEnv 的 Apache 默认不启用 SSL 模块,也不监听 443 端口。你需要改两处配置文件:
- 打开
phpEnvpacheconfhttpd.conf,取消以下两行的注释:LoadModule ssl_module modules/mod_ssl.soInclude conf/extra/httpd-ssl.conf - 打开
phpEnvpacheconfextrahttpd-ssl.conf,找到<VirtualHost _default_:443>块,修改关键项:ServerName localhost:443DocumentRoot "E:/phpEnv/www"(按你实际项目路径填)SSLCertificateFile "E:/phpEnv/apache/conf/ssl/localhost+2.pem"SSLCertificateKeyFile "E:/phpEnv/apache/conf/ssl/localhost+2-key.pem" - 确保
Listen 443在httpd.conf中未被注释
改完后重启 phpEnv 的 Apache 服务。首次访问 https://localhost 时,Chrome 仍可能弹“不安全”警告——点“高级”→“继续前往 localhost(不安全)”即可,仅第一次需要,之后就信任了。
立即学习“PHP免费学习笔记(深入)”;
PHP 代码里怎么判断当前是 HTTPS
Apache 启用 SSL 后,$_SERVER['HTTPS'] 通常会是 "on",但 phpEnv 的 Apache 若未显式设置,有时会为空。最稳妥的写法是:
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { // 当前是 HTTPS } elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { // 有反向代理时备用判断(phpEnv 一般不用) }
注意:别依赖 $_SERVER['SERVER_PORT'] === '443',因为端口可被代理或重写,不可靠。
真正容易被忽略的是私钥权限和路径写法:Windows 下 Apache 对私钥文件路径中的反斜杠 很敏感,务必统一用正斜杠 / 或双反斜杠 \;另外,如果证书路径写错或文件不存在,Apache 启动会静默失败——此时要看 phpEnvpachelogserror.log 里的具体报错,而不是只看界面是否启动成功。

