【问题标题】:How to implement OpenSSL's SSL_Write() by using PHP如何使用 PHP 实现 OpenSSL 的 SSL_Write()
【发布时间】:2019-03-28 03:59:42
【问题描述】:

我正在尝试使用 PHP 脚本连接到服务器。服务器由 SSLv3 设置,我想也许我需要使用SSL_Write() 来处理将发送到服务器的消息。但是我在 PHP 中没有找到相关的函数。所以,我想知道我应该使用哪个函数。

【问题讨论】:

  • 你为什么不用 curl 来做这个?
  • @WhozCraig 好吧,首先,因为它可能不是 HTTPS 连接……
  • @duskwuff 非常出色。如果 Maggie 回答问题而不是我们猜测,情况会更糟。
  • @duskwuff,@WhozCraig 抱歉回复晚了,服务器无法处理 curl。
  • 如果您关于服务器和SSLv3 的陈述是准确的,那么我的猜测是,您应该使用 TLSv1 及更高版本。现在大多数服务器和用户代理/客户端都拒绝使用 SSLv3。 TLSv1 在命中列表中,但在某些地方仍然可用。为了将来证明您的应用程序使用 TLSv1.2 或 TLSv1.3。

标签: php ssl openssl


【解决方案1】:

您正在寻找的是 TLS 流传输。没有直接等效于SSL_Write() 函数; PHP 没有实现 SSL 的功能接口。

这是一个使用 TLS 传输连接到 HTTPS Web 服务器的简单示例。这不是传输的理想应用,因为 PHP 已经原生支持 HTTPS 文件包装器;我只是在这里使用它作为与可公开访问的 TLS 服务器交互的示例。

$fh = stream_socket_client("tls://example.com:443", $errno, $errstr);
if ($fh === false) {
    die("Failed to connect: error=$errno $errstr");
}
fwrite($fh, "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n"\ );
while (!feof($fh)) {
    print fgets($fh);
}

如果您需要在 TLS 连接上设置特定选项,您可以通过在建立连接之前创建一个流上下文(使用stream_context_create())来实现。有关详细信息,请参阅 PHP 文档。

【讨论】:

  • @duskwuff 我尝试了这段代码,但屏幕上没有显示,所以我认为可能还有其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2016-04-02
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多