为什么 libcurl 不为 IP 设置 SNI?

2023-12-19

我刚刚注意到当我使用 IP 进行 HTTPS 调用时,libcurl 没有设置 SNI 字段。我找到了这个:

https://github.com/curl/curl/blame/master/lib/vtls/openssl.c

#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
  if((0 == Curl_inet_pton(AF_INET, hostname, &addr)) &&
#ifdef ENABLE_IPV6
     (0 == Curl_inet_pton(AF_INET6, hostname, &addr)) &&
#endif
     sni &&
     !SSL_set_tlsext_host_name(BACKEND->handle, hostname))
    infof(data, "WARNING: failed to configure server name indication (SNI) "
          "TLS extension\n");
#endif

根据Curl_inet_pton文档:

 * inet_pton(af, src, dst)
 *      convert from presentation format (which usually means ASCII printable)
 *      to network format (which is usually some kind of binary format).
 * return:
 *      1 if the address was valid for the specified address family
 *      0 if the address wasn't valid (`dst' is untouched in this case)
 *      -1 if some other error occurred (`dst' is untouched in this case, too)

正如预期的那样,它返回了1对于 IP 地址(例如192.160.0.1),因此不会调用SSL_set_tlsext_host_name.

Why?


因为这是不允许的。

RFC 3546“传输层安全 (TLS) 扩展”第3.1节 https://www.rfc-editor.org/rfc/rfc3546#section-3.1写得很清楚:

“HostName”中不允许使用文字 IPv4 和 IPv6 地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 libcurl 不为 IP 设置 SNI? 的相关文章

  • 为什么我的任务没有取消?

    我正在运行一个进程 定期卷曲到 URL 列表以测试这些网站的性能 我的主程序基本上是一个 do sleep while 循环 每 N 秒调用一个函数 runTest 并用键盘中断来终止它 精简到基础知识 我的代码如下 public void
  • 使用 pyOpenSSL 处理 SNI - Python

    我正在与pyOpenSSL最近 但是我遇到了一些使用SNI为同一 IP 地址提供多个证书 这是我的代码 from OpenSSL import SSL from socket import socket from sys import ar
  • Windows 上的卷曲

    我已关注此链接上的所有内容 如何在 Windows 上安装 设置和使用 cURL 但我无法安装最新的curl 7 50 3https curl haxx se download html 在 Windows 7 2008 Server R2
  • 使用 SNI 选项以编程方式在 IIS 8 上添加绑定

    我正在尝试使用 Microsoft Web Administration 库 NET Framework 创建 IIS 8 的绑定 该绑定已检查标志 SNI 服务器名称指示 这对我来说是必要的 因为我想在 IIS 下为同一个网站获取多个 S
  • curl_multi_exec() 是阻塞调用吗?

    只是好奇如果curl multi exec PHP中的调用分为阻塞调用和非阻塞调用 简短回答 curl multi exec is 非阻塞 更长的答案 curl multi exec is 非阻塞 but 可以通过组合来进行阻止curl m
  • XP 上的 IE 不支持 SNI 允许单个服务器使用多个证书

    我一直在寻找几个小时来找到我的问题的解决方案 虽然我相信我已经能够澄清我遇到问题的原因 但我一直无法找到解决方案 我有一台服务器托管多个网站 其中几个网站正在使用 SSL 证书 我有一些由所有站点访问的共享图像 阻止 SSL 站点上的非安全
  • SOAP 请求和响应使用 libcurl - C 读取文件或写入文件

    我正在尝试从 xml 文件发送 SOAP 请求并发送到 SOAP 服务 然后使用 libcurl 读取响应并将其保存到文件中 xml 文件中的请求示例如下
  • 使用 C++ 的简单 HTTP 请求

    在您将此标记为冗余之前 请注意我已经尝试了网上发布的许多方法 包括堆栈溢出 但它们都无法满足我的需求 另请注意 我对编程世界还很陌生 所以请原谅我滥用技术术语 现在我正在编写一个 C 程序 它计算来自用户计算机的一些数据 例如 IP 地址
  • 取消libcurl轻松处理

    有没有一种简单的方法可以从另一个线程取消curl easy perform 您必须使用回调函数 写入 读取 进度 来执行取消 另一个线程需要设置一个标志 回调函数检查该标志并返回正确的值以取消操作
  • PHP cURL、POST JSON

    我需要发布以下 JSON 代码 但由于某种原因它不起作用 下面是我的代码 fieldString 395609399 the curl request processor function processCurlJsonrequest UR
  • 如何使用 PHP Curl 模拟启用 JavaScript?

    我想使用 PHP Curl 解析网页中的 HTML 代码 但有一条错误消息 表明我无法在没有 JavaScript 的情况下访问该网站 我可以使用 PHP Curl 启用 JavaScript 吗 JavaScript由浏览器执行 cURL
  • 当 URL 不正确时,curl_easy_perform 崩溃

    我在尝试使用下载文件时遇到问题libcurl 该程序使用多个线程 每个需要下载文件的线程都会创建一个libcurl处理来工作 当 URL 正确时 一切正常 但如果 URL 错误 程序就会崩溃 在调试模式下 如果 URL 不正确curl ea
  • 如何获取快速 .Net Http 请求

    我需要一个可以在 Net 中使用的 Http 请求 该请求需要不到 100 毫秒 我能够在浏览器中实现这一点 所以我真的不明白为什么这在代码中是一个问题 我尝试过 WinHTTP 以及 WebRequest Create 它们都超过 500
  • brew 安装失败:curl(77) 设置证书验证时出错

    好的 我正在运行带有自制软件的旧 Mac 10 6 8 brew doctor 报告没有错误 我已经尝试过brew prune update 等 每次我尝试安装软件包时 都会收到此错误 curl 77 error setting certi
  • libCurl 和 OpenSSL 的奇怪之处

    又是我 我就是不明白 为什么会这样 我下载了 OpenSSL 的编译静态库 从这里 http www shininglightpro com download Win32OpenSSL 1 0 0d exe 此链接位于 cUrl 官方网站的
  • curl 重新使用 https 连接会话

    我已经使用 openssl 构建了curl 并且能够执行https 连接 现在 每次当curl建立TLS连接时 它都会再次握手 我需要利用客户端与服务器的先前连接会话ID 并在下一个请求中使用它 我已经尝试过以下选项 但每次尝试仍然会进行新
  • 如何使用 C++ cURL (libcurl) 管理简单的 PHP 会话

    我正在编写一个 C 客户端 它使用 libcurl 与 PHP 脚本进行通信 通信应该是基于会话的 因此第一个任务是登录并使 PHP 脚本建立会话 我不习惯使用 C 或 PHP 的会话 我基本上知道它与cookies和通信会话id有关 我在
  • 在我的 c++ 项目中,在 Windows 上使用 libcurl 和 Visual Studio 不起作用,因为字符串已损坏

    正如标题中所解释的 我尝试使用 libcurl C API 提交简单的 http 查询 我使用 Windows 作为操作系统 C 作为语言 Visual Studio 2008 作为 IDE 我的代码非常简单 我初始化卷曲 CURLcode
  • 通过curl设置cookie

    我试图在 PHP 中通过 cURL 设置 cookie 但失败了 我的 php 代码如下所示 ch curl init url http localhost javascript 20cookies test cookies html cu
  • 使用curl解压gzip数据

    I added curl easy setopt client CURLOPT ENCODING gzip 到我的代码 我预计curl 会导致服务器发送压缩数据并解压缩它 实际上我在 HTTP 标头中看到数据被压缩 变化 Accept En

随机推荐

  • X-Forwarded-Proto 和 Flask

    我有完全相同的问题描述这个问题和答案 https stackoverflow com questions 19840051 mutating request base url in flask 这个问题的答案是一个很好的解决方法 但我不明白
  • 用c++做一个定时器?

    我正在用 C 开发一个简单的游戏 一种追逐点风格的游戏 你必须单击显示屏上的一个绘制的圆圈 然后每次单击都会跳到另一个随机位置 但我想让游戏在 60 后结束几秒钟左右 将分数写入文本文件 然后在启动程序时从文本文件中读取信息并将信息存储到数
  • 使用默认分隔符与用户定义分隔符分割字符串

    我尝试了一个使用字符串分割的简单示例 但出现了一些意外的行为 这是示例代码 def split string source splitlist for delim in splitlist source source replace del
  • 防止渐变叠加滚动

    我试图在滚动 div 的底部放置一个小渐变 我的解决方案基于已接受的答案这个所以线程 https stackoverflow com questions 9204450 how to apply a fade away effect not
  • Facebook Messenger API“无法验证 URL”

    我正在尝试设置 Facebook Messenger API 但在尝试添加 WebHook 时收到此错误 无法验证该 URL 回调验证失败 出现以下错误 curl errno 60 curl error SSL证书问题 无法获取本地颁发者证
  • init] 自动引用计数

    我知道我应该使用 ObjectClass tmpObject ObjectClass alloc init realObject tmpObject tmpObject release 初始化realObject where realObj
  • 如何遍历NLTK树对象?

    给定一个括号内的解析 我可以将其转换为 NLTK 中的 Tree 对象 如下所示 gt gt gt from nltk tree import Tree gt gt gt s ROOT S NP NNP Europe VP VBZ is P
  • JSF2 静态资源管理——组合、压缩

    有谁知道动态组合 缩小所有 h outputStylesheet 资源 然后在渲染阶段组合 缩小所有 h outputScript 资源的方法 混合 缩小的资源可能需要使用基于组合资源字符串或其他内容的键进行缓存 以避免过度处理 如果这个功
  • 位置:粘性 - 与 javascript 高度调整结合使用时滚动弹跳

    玩完之后position sticky有一段时间 我开始实现粘性导航 并遇到了这个有趣但令人沮丧的滚动弹跳问题 这是许多网站上常见的导航行为类型 传统上您会使用 JavaScript 来计算页面中相对元素的偏移量 当元素到达窗口顶部时 将添
  • 在conda环境中安装tensorrt

    我正在尝试在 conda env 中安装tensorrt 并且通过 conda navigator 在我的环境中安装了 cudatoolkit 和 cudnn 我还更新了我的 pip 和 setuptool 但出现以下错误 我应该怎么办 E
  • 如何替换上传文件的文件名中的空格

    我正在制作一个 SWF 上传器并已完成 HTML 表单 它工作得很好 直到我上传名称中包含空格的 SWF 文件 如何用下划线替换空格 我努力了 str replace file 和 preg replace file 如何用下划线替换空格
  • 轨道发动机及装置

    我有一个 Rails 引擎 我想在其中使用 Devise 我像正常一样安装了以下设备本指南 https github com plataformatec devise wiki How To 3a Use devise inside a m
  • “找不到适用于应用程序的有效 aps 环境权利”

    当我将支持推送通知的 iPhone 应用程序的 Ad Hoc 版本加载到我的设备上时 我遇到此错误 找不到适用于应用程序的有效 aps 环境权利 这是什么意思 我该如何修复它 我找到了解决方案 在 构建 gt 代码签名身份 下的项目信息中
  • SQL Server 2005 - 使用前导零格式化十进制数(包括带符号的小数!)

    我需要格式化数字 例如 1 99 21 34 1797 94 300 36 21 99 2 31 使用 SQL Server 2005 T SQL 将格式掩码转换为 0000 00 保留有符号整数和点后的小数 这将用于金融系统的文本文件导出
  • 如何下载 Microsoft.TeamFoundation.Framework.Common.dll

    我正在 Visual Studio 2015 中构建一个应用程序 以允许人们查看 TFS 服务器的变更集 我找到了一些示例代码 但是它需要引用 Microsoft TeamFoundation Framework Common dll 但我
  • 如何将数组/数据表等变量传递给 SQL Server?

    有时 您需要升级数据库 其中数据表中有许多行 或者您有一个充满数据的数组 而不是将所有这些数据放在一个字符串中 然后在 SQL SERVER 中拆分 或者不是在 SQL SERVER 中迭代数据表 逐行代码并更新数据库 还有其他方法吗 SQ
  • 防止按钮在回车键上提交

    我有两个按钮 一个带有 id enterToSubmit 另一个带有 id clickToSubmit 当用户按下回车键时 我希望 enterToSubmit 按钮提交表单 而不是 单击提交 按钮 在同一页面上 我有一个文本框 id tit
  • MySql REGEXP 匹配两个逗号分隔的字符串

    我有一个包含以下值的表 id value 1 1 2 5 8 12 20 2 11 25 26 28 现在我想搜索一些逗号分隔的 ID 例如上述值列中的 1 3 6 7 11 例如 SELECT id FROM tbl name WHERE
  • DecimalFormat 被服务器设置覆盖

    目前我在显示格式化小数时遇到问题 在我的本地计算机中 我有一个十进制值 0 002100000000 存储在数据库中
  • 为什么 libcurl 不为 IP 设置 SNI?

    我刚刚注意到当我使用 IP 进行 HTTPS 调用时 libcurl 没有设置 SNI 字段 我找到了这个 https github com curl curl blame master lib vtls openssl c ifdef S