25

操作系统: Ubuntu 12.04 64 位

PHP版本: 5.4.6-2~精确+1

当我通过内置网络服务器(php5 -S localhost:8000)测试 https 页面时,Firefox(16.0.1)说“加载问题:连接中断”,而终端告诉我“::1 :37026 无效请求(不支持的 SSL 请求)”。

phpinfo()告诉我:

  • 注册流套接字传输:tcp、udp、unix、udg、ssl、sslv3、tls
  • [卷曲] SSL:是的
  • SSL 版本:OpenSSL/1.0.1
  • 打开ssl:

    OpenSSL 支持:启用

    OpenSSL 库版本 OpenSSL 1.0.1 2012 年 3 月 14 日

    OpenSSL 标头版本 OpenSSL 1.0.1 2012 年 3 月 14 日

是的,http 页面工作得很好。

有任何想法吗?

4

4 回答 4

45

请参阅内置网络服务器 shim 的手册部分:http:
//php.net/manual/en/features.commandline.webserver.php

它不支持 SSL 加密。它适用于普通的 HTTP 请求。openssl扩展和功能支持无关。它不接受请求或通过流包装器发送响应。

如果您希望 SSL 在其上运行,请尝试使用stunnel包装器:

php -S localhost:8000 &   
stunnel3 -d 443 -r 8080  

反正就是用来玩的。

于 2012-10-18T03:18:55.097 回答
4

距离上次更新已经三年了;这是我在 2021 年在 macOS 上运行它的方法(作为 mario 答案的扩展):

# Install stunnel
brew install stunnel

# Find the configuration directory
cd /usr/local/etc/stunnel

# Copy the sample conf file to actual conf file
cp stunnel.conf-sample stunnel.conf

# Edit conf
vim stunnel.conf

修改stunnel.conf为如下所示:(其他选项都可以删除)

; **************************************************************************
; * Global options                                                         *
; **************************************************************************

; Debugging stuff (may be useful for troubleshooting)
; Enable foreground = yes to make stunnel work with Homebrew services
foreground = yes
debug = info
output = /usr/local/var/log/stunnel.log

; **************************************************************************
; * Service definitions (remove all services for inetd mode)               *
; **************************************************************************

; ***************************************** Example TLS server mode services

; TLS front-end to a web server
[https]
accept = 443
connect = 8000
cert = /usr/local/etc/stunnel/stunnel.pem
; "TIMEOUTclose = 0" is a workaround for a design flaw in Microsoft SChannel
; Microsoft implementations do not use TLS close-notify alert and thus they
; are vulnerable to truncation attacks
;TIMEOUTclose = 0

这在端口 443 接受 HTTPS / SSL 并连接到在端口 8000 运行的本地网络服务器,使用 stunnel 的默认伪造证书在/usr/local/etc/stunnel/stunnel.pem. 日志级别 isinfo并且日志输出写入/usr/local/var/log/stunnel.log.

启动通道:

brew services start stunnel # Different for Linux

启动网络服务器:

php -S localhost:8000

现在您可以访问https://localhost:443访问您的网络服务器:screenshot

应该有一个证书错误,您必须单击浏览器警告,但这会让您到达可以使用 HTTPS 请求访问您的本地主机进行开发的地步。

于 2021-08-29T10:48:44.170 回答
2

最近一直在学习nginx和Laravel,多次出现这个错误。很难诊断,因为您需要同时将 nginx 与 Laravel 以及操作系统中的 SSL 设置对齐(假设您正在制作自签名证书)。

如果您在 Windows 上,则更加困难,因为在处理 SSL 证书时必须与 unix 回车作斗争。有时您可以正确完成这些步骤,但您会被证书验证问题所毁。我发现诀窍是在 Ubuntu 或 Mac 中制作证书并将它们通过电子邮件发送给自己,或者使用 linux 子系统。

就我而言,我一直遇到一个问题,我在某处声明HTTPSphp artisan serve但仅适用于HTTP

我只是Invalid request (Unsupported SSL request)在 SSL 连接正常后再次导致此错误。原来是我Axios用来向https://. 将其更改为 POSThttp://修复了它。

我对任何人的建议是查看HTTP/HTTPS 的使用位置和方式。

教科书的定义可能类似于php artisan serve仅适用于 HTTP 但需要底层 SSL 层。

于 2018-06-09T19:51:50.353 回答
0

使用Ngrok

  1. 像这样公开服务器的端口: ngrok http <server port>

  2. 使用 ngrok 的安全公共地址(带有 https 的地址)浏览。

注意:虽然它的作用就像一个魅力,但它似乎有点矫枉过正,因为它需要互联网并且希望得到更好的建议。

于 2021-09-06T08:08:55.157 回答