首页 > 解决方案 > openssl1.1.1 和 php7.2 在握手时发送奇怪的支持协议集

问题描述

今天早上,openssl1.1.1通过官方 ubuntu 存储库在我的机器上交付了一个标记为安全更新。

没过多久,发现php的openssl扩展行为发生了变化。

<?php

$address = 'tcp://216.58.199.46:443';
$timeout = 30;

$flags = STREAM_CLIENT_CONNECT;

$socket = stream_socket_client($address, $errno, $errstr, $timeout, $flags);
stream_set_timeout($socket, $timeout);

stream_set_blocking($socket, true);

stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT);

(IP地址为google.com

现在,如果我运行 wireshark,这就是我在数据包中看到的内容:

Extension: supported_versions (len=5)
    Type: supported_versions (43)
    Length: 5
    Supported Versions length: 4
    Supported Version: TLS 1.3 (0x0304)
    Supported Version: TLS 1.2 (0x0303)

因此,客户端出于某种原因发送 1.3 作为支持的协议,而服务器很乐意选择它。

如果我只指定STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT- 然后tls1.2按预期协商。

因此有一个问题,是我在 TLS 协议中遗漏了什么,还是 php 的 openssl 扩展(或 openssl 本身)中存在错误?

标签: phpopenssl

解决方案


推荐阅读