1

我在我的 Windows 机器上的 Docker 容器中使用 Mercure Hub。我有一个 Symfony 应用程序,我想使用 Mercure 包将消息推送到客户端。

/**
 * @Route("/message", name="sendMessage", methods={"POST"})
 */
public function __invoke(PublisherInterface $publisher, Request $request): RedirectResponse
{
    $update = new Update('https://chat.afsy.fr/message', json_encode([
        'message' => $request->request->get('message'),
    ]));

    $publisher($update);

    return $this->redirectToRoute('home');
}

当我在客户端 javascript 中获取此端点时(即发布要由集线器推送的消息),我从HTTPClient内部得到了这个异常PublisherInterface

运输异常

fopen():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:1416F086:SSL 例程:tls_process_server_certificate:certificate verify failed

当我使用 Mercure 调试工具发布消息时,一切正常,但正如我们所见,我的 Symfony 应用程序却不行。我想知道为什么?:)

4

2 回答 2

1

我以前遇到过这个错误。Simply Mercure Hub 需要有效的 SSL 证书才能工作,而 Symfony CLI ( > symfony serve) 提供的证书不是有效的!

你可以:

  • 将有效的 SSL 证书添加到您的项目。
  • 或者,如果它是 Symfony 4 项目,您可以安装 Symfony Web 服务器 composer require symfony/web-server-bundle并使用php bin/console server:runHTTP 而不是 HTTPS 来启动服务器。
  • 您还可以使用安装 apache-packcomposer required apache-pack并在您的机器上设置一个虚拟主机。
于 2021-04-02T21:05:02.967 回答
0

您可以为开发环境设置 Symfony HTTP 客户端的默认选项:

# config/packages/dev/framework.yaml
framework:

  ...

  http_client:
      default_options:
          verify_peer: false
于 2021-05-15T16:43:10.400 回答