【问题标题】:Can I use ssl:// and https:// in an URL interchangeably?我可以在 URL 中互换使用 ssl:// 和 https:// 吗?
【发布时间】:2014-06-23 00:32:33
【问题描述】:

我必须编写一些 PHP 代码来向外部服务器发出 post 请求,并从服务器所有者那里得到两个不同的示例,一个在 URL 中使用“ssl://”,另一个使用“https://”。

它们可以互换使用吗?这将记录在哪里?谢谢!

编辑以包含 PHP 代码(不知道为什么我不能正确格式化代码,如果有人可以帮助解释如何将初始注释合并到代码块中):

// make a http post request to an external server
function httpPost($host, $usepath, $postdata = "") {

    $fp = fsockopen($host, 443, $errno, $errstr, 60);
    if( !$fp ) {
        print "$errstr ($errno)<br>\n";
    }
    else {
        fwrite( $fp, "POST $usepath HTTP/1.0\n");
        $strlength = strlen( $postdata );
        fwrite( $fp, "Content-type: application/x-www-form-urlencoded\n" );
        fwrite( $fp, "Content-length: ".$strlength."\n\n" );
        fwrite( $fp, $postdata."\n\n" );

        $output = "";

        while( !feof( $fp ) ) {
            $output .= fgets( $fp, 1024);
        }

        fclose( $fp);
    }

    return $output;
}

【问题讨论】:

  • 我可以编辑您的问题并为您设置格式,但由于您似乎对 SO 不熟悉,您不妨尝试一下:编辑时选择整个代码区域,然后单击 @987654322 @ 图标。这应该在每个选定的行前插入 4 个空格(并触发代码格式化)。
  • @Bruno - 确实,这就是我想要的,自己动手做。现在看起来好多了。

标签: php http url post request


【解决方案1】:

ssl:// URL 是 PHP 特有的。这是 PHP 在使用其fsocketopen 函数时提供使用直接 SSL/TLS 连接的方式。见List of Supported Socket Transports in the manual

ssl:// 将为您提供 SSL/TLS 连接,其之上没有任何应用程序协议:由您的应用程序实现通信所需的任何协议。

相比之下,https:// 将通过此 SSL/TLS 连接实现 HTTP 协议。

注意default settings for ssl:// and tls:// are rather poor in terms of security.特别是,verify_peer 的默认值为 false,这会使连接容易受到 MITM 攻击。

【讨论】:

  • 在您进行编辑之后,您的代码确实在此请求的 SSL/TLS 连接之上手动实现了 HTTP。这是否真的需要是值得怀疑的。我已经有一段时间没有在 PHP 中这样做了,但我假设您可以直接使用其他 PHP 函数通过 HTTPS 发送 POST 请求,而无需自己重新发明轮子。
  • 我正在开发一个旧网站。任何建议将不胜感激。
【解决方案2】:

HTTPS 是使用 SSL 加密的 HTTP 协议。 POST 请求是在 HTTP 协议中定义的,因此您应该使用 https://

查看 IANA 的 list of URI schemes,我没有看到 ssl://,因此我建议不要在任何情况下使用它。

【讨论】:

  • 问题是我需要连接的服务器的技术支持建议我使用“ssl://”。希望有人能解释为什么应该或不应该避免这种情况。
  • @user2237601 — 可能你使用的函数有什么特殊含义,但是你没有告诉我们是什么意思,所以我们只能说一般情况。
  • @Quentin - 我认为找出一般案例答案会很有趣,我们可以用“https://”替换“ssl://”吗?我将编辑我的问题以包含代码,尽管正如我提到的,服务器所有者向我提供了两个不同的指令,这表明他们认为这两个版本是相同的。
  • 一般情况下,如答案中所述,“否”。
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2013-03-18
  • 1970-01-01
  • 2012-12-29
  • 2017-12-08
相关资源
最近更新 更多