怎样在PHP本地环境配置HTTPS_PHP本地环境配HTTPS操作【配置】

发布时间 - 2026-01-20 00:00:00    点击率:
本地PHP环境配HTTPS主要为绕过浏览器对非localhost HTTP地址的API限制及

测试强制HTTPS场景,推荐用mkcert生成并信任自签名证书,再通过Apache/Nginx配置,PHP内置服务器不支持HTTPS。

本地 PHP 环境配 HTTPS 不是为了“上线安全”,而是为了绕过浏览器对 localhost 以外的 http:// 地址的限制(比如调用 getUserMediaservice workerGeolocation API),或者测试 OAuth2 回调、微信 JS-SDK 等强制要求 HTTPS 的场景。直接用自签名证书 + 本地信任是最可行的路径。

生成自签名证书(OpenSSL 方式)

PHP 自带的 php -S 内置服务器不支持 HTTPS,必须借助 Apache 或 Nginx。这里以最轻量、跨平台兼容性好的 mkcert 工具为主流推荐——它比手敲 openssl req 更可靠,且能自动适配现代浏览器信任链。

  • mkcert 会为你本地生成一个根证书(rootCA.pem),并把它加入系统钥匙串(macOS / Windows)或 ca-certificates(Linux),之后签发的域名证书才不会被标记为“不安全”
  • 运行 mkcert -install 一次即可,后续所有证书都基于这个可信根
  • localhost 生成证书:
    mkcert localhost 127.0.0.1 ::1
    输出两个文件:localhost+2-key.pem(私钥)和 localhost+2.pem(证书)
  • 别用 openssl req -x509 手动生成:默认不带 subjectAltName,Chrome 会直接拒绝,报错 NET::ERR_CERT_INVALID

Apache 配置 HTTPS(Windows/macOS/Linux 通用)

确认已启用 mod_sslssl_module。在 httpd.conf 或虚拟主机配置中添加:


    ServerName localhost
    DocumentRoot "/path/to/your/php/project"
    SSLEngine on
    SSLCertificateFile "/path/to/localhost+2.pem"
    SSLCertificateKeyFile "/path/to/localhost+2-key.pem"
    
        Require all granted
        AllowOverride All
    
  • 确保 Listen 443 已在主配置中启用
  • SSLCertificateFile 必须是 PEM 格式证书(不是 CRT 或 CER);如果用 OpenSSL 生成,需确保含完整证书链(通常单文件即可)
  • 重启 Apache 后访问 https://localhost,首次会提示“您的连接不是私密连接”——点击“高级”→“继续前往 localhost(不安全)”即可(仅首次,因证书已由 mkcert -install 信任)
  • 若仍报错,检查 Apache 错误日志:tail -f logs/error_log,常见问题是路径错误或权限不足(尤其 macOS 上私钥需 chmod 600

PHP 内置服务器无法直接跑 HTTPS

别折腾 php -S 加 HTTPS:它压根不支持 TLS。有人用 stunnel 或反向代理(如 nginx 做前端 HTTPS,转发到 php -S :8000),但复杂度陡增,且失去热重载便利性。

  • 开发阶段更推荐:用 Nginx/Apache 跑 HTTPS,同时用 IDE 或命令行启动 PHP CLI 脚本调试逻辑,静态资源和路由交由 Web 服务器处理
  • 若坚持用内置服务器,可临时降级需求:Chrome 从 94 版起允许 localhost 使用 http:// 调用部分敏感 API(如 mediaDevices),但 serviceWorker 仍强制 HTTPS
  • VS Code 的 PHP Server 插件、PhpStorm 的内置服务器,底层仍是 php -S,同样不支持 HTTPS

验证 HTTPS 是否生效且被信任

打开 Chrome 访问 https://localhost,地址栏左侧应显示锁形图标,点击后能看到“连接是安全的”,证书颁发者是 mkcert development CA

  • 若显示“不安全”或红色警告,右键 → “检查” → 切换到 Security 标签页,点“View certificate”确认证书是否由你本地安装的根证书签发
  • curl -k https://localhost 测试服务可达性(-k 跳过证书校验);若要严格校验,加 --cacert rootCA.pem
  • PHP 中调用外部 HTTPS 接口时,若遇到 cURL error 60: SSL certificate problem,说明 cURL 默认未信任你本地的根证书,需设置 curl_setopt($ch, CURLOPT_CAINFO, '/path/to/rootCA.pem') 或全局配置 curl.cainfo ini 项

最难的一步其实是让系统信任那个根证书——mkcert -install 成功与否,直接决定后续所有步骤是否白忙。很多问题表面是 Apache 配置错,实际是根证书没装进钥匙串或没刷新信任链。


# php  # linux  # phpstorm  # js  # 前端  # windows  # apache  # nginx  # 微信  # 浏览器  # 工具  # ssl  # chrome  # cURL  # Error  # 接口 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  QQ浏览器网页版登录入口 个人中心在线进入  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  高端企业智能建站程序:SEO优化与响应式模板定制开发  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  java ZXing生成二维码及条码实例分享  Java遍历集合的三种方式  如何在阿里云域名上完成建站全流程?  linux写shell需要注意的问题(必看)  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何快速搭建高效简练网站?  如何在阿里云完成域名注册与建站?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  使用spring连接及操作mongodb3.0实例  香港服务器租用每月最低只需15元?  微信推文制作网站有哪些,怎么做微信推文,急?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Swift中循环语句中的转移语句 break 和 continue  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何生成URL和重定向?(路由助手函数)  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  香港服务器部署网站为何提示未备案?  如何快速启动建站代理加盟业务?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  JS去除重复并统计数量的实现方法  如何在阿里云虚拟服务器快速搭建网站?  Laravel Docker环境搭建教程_Laravel Sail使用指南  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  linux top下的 minerd 木马清除方法  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何快速选择适合个人网站的云服务器配置?  Swift开发中switch语句值绑定模式  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何用5美元大硬盘VPS安全高效搭建个人网站?  iOS正则表达式验证手机号、邮箱、身份证号等  太平洋网站制作公司,网络用语太平洋是什么意思?  黑客入侵网站服务器的常见手法有哪些?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  JavaScript如何实现继承_有哪些常用方法  音响网站制作视频教程,隆霸音响官方网站?  Laravel怎么判断请求类型_Laravel Request isMethod用法