Golang的TLS版本配置参数-排坑经历

news2024/9/21 0:52:22

一、背景

        公司有个黑盒监控拨测组件,类似可以通过各种协议如HTTP、TCP、ICMP等等针对目标主机、目标IP、目标站点进行定时拨测,通过返回的状态码等信息来推断,目标业务系统/主机、站点是否存在异常,健康情况如何。

        最近在配置一个HTTPS的拨测任务,就遇到了比较奇怪的现象。 之前拨测的HTTPS站点都是OK的,但是这个站点死活报错。报错信息如下:

tls: no supported version satisfy MinVersion and MaxVersion

      程序是使用Golang写的。根据关键词提示,应该是TLS这块出现了问题。所以我针对这个情况进行了一下分析

 二、分析过程

1、首先使用curl针对不同版本TLS进行探测,是否能正常访问

curl可以使用--tls1.0 、--tls1.1、--tls1.2 参数强制https请求使用对应的TLS版本。 

从图中可以看到,这个站点比较特殊,可能是年代比较久远,签发的SSL证书只支持TLS1.0版本进行访问,其它版本无法建立SSL握手,否则报错。

由此断定,应该是我们程序出错了,毕竟curl使用--tls1.0没有报错,可以正常访问。

2、查看Golang源码关于tls.Config这个结构体的参数配置

根据错误信息提示"tls: no supported version satisfy MinVersion and MaxVersion", 我找到了golang的tls.Config这个结构体,同时看到了MaxVersion和MinVersion这2个属性。

这2个属性框定了,和HTTPS站点交互使用的TLS版本的范围。 并且MinVersion总是小于等于MaxVersion的.

注意:   MinVersion默认是TLS1.2, 这里就是今天主角的坑点!!!!

查了下资料,Golang在不同版本,给MinVersion设置的默认值不一样。早期比较旧的Golang版本默认是TLS1.0, 后面的高版本就是TLS1.2了

3、验证下是否是因为MaxVersion、MinVersion设置错误导致的

func TestTls(t *testing.T) {
    tlsConfig := &tls.Config{
       MinVersion: tls.VersionTLS10,
       MaxVersion: tls.VersionTLS10,
    }

    // 使用自定义的 TLS 配置创建一个 HTTP 客户端
    client := &http.Client{
       Transport: &http.Transport{
          TLSClientConfig: tlsConfig,
       },
    }
    // 发送一个 GET 请求
    resp, err := client.Get("https://www.baidu.com")
    if err != nil {
       fmt.Println("Error:", err)
       return
    }
    defer resp.Body.Close()
    // 打印响应状态码
    fmt.Println("Response Status:", resp.Status)
}

1、首先,直接设置Maxversion为TLS1.0,符合我们程序的逻辑思路. MinVersion采用默认值

报错信息和文章开头的一模一样,果然没错!就是这个原因导致的。  MinVersion(TLS1.2)竟然大于了MaxVersion(TLS1.0), 不报错才怪。

2、那我再来验证,MinVersion到底是不是TLS1.2呢? 很简单,我直接把MinVersion设置为TLS1.0,看下代码还会报错吗?

明显,现在MinVersion <= MaxVersion, 逻辑正确, 代码也正常通过测试。 说明MinVersion默认就是TLS1.2

三、总结

        关于tls.Config的MinVersion属性,我的修复建议就是强制写死默认最小版本是TLS1.0,不要依赖Golang给你设置MinVersion的值。  要不然就会造成上面我的这种情况,十分坑爹!

        如果你设置的MinVersion是TLS1.0,MaxVersion怎么设置都不会报错的。因为至少MaxVersion都是TLS1.0了,还是满足条件: MinVersion  <= MaxVersion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞懂机器学习!2024.6月最新!(附代码实现)

前言 机器学习入门精品文章 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文介绍机器学习的基础内容。 机器学习是人工智能的一个分支&#xff0c;它使计算机系统能够从数据中学习并做出决策或预测&am…

Jangow-1.0.1靶机漏洞复现(未完成)

首先&#xff0c;这个靶机只能使用VirtualBox打开&#xff0c;靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面&#xff0c;点击site进入到一个…

【C++】哈希容器

unordered系列关联式容器 在之前的博文中介绍过关联式容器中的map与set&#xff0c;同map与set一样&#xff0c;unordered_set与unordered_set也是关联式容器。 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;查询效率可以达到logN&#xff1b;在…

详解HTTP代理与SOCKS代理之间的差异

代理服务器在网络安全和隐私保护方面&#xff0c;发挥着十分重要的作用。其中&#xff0c;HTTP代理和SOCKS代理是两种常见的代理方式&#xff0c;它们在原理、功能和应用场景上有着明显的差异。本文将为大家深入分析这两种代理之间的区别&#xff0c;帮助大家更好地选择适合自己…

Linux中如何添加磁盘分区

在Linux中添加分区通常涉及到几个步骤&#xff0c;包括识别磁盘、创建分区、格式化分区&#xff0c;以及挂载或将其用作特定的文件系统类型&#xff08;如LVM、RAID等&#xff09;。以下是一个基本的步骤指南&#xff0c;假设你正在使用命令行界面&#xff08;CLI&#xff09;和…

《技术人求职之道》之简历优化篇(下):技能与项目亮点,如何让你的简历熠熠生辉

摘要 本文将深入探讨技术求职者在撰写简历时的关键要素,包括专业技能的表达和项目经验的描述。文章首先提出专业技能描述的六条基本原则,包括统一技术词汇、标点符号一致性、技术关键字的驼峰命名法、技术分类、技术热度和掌握度排序以及慎用“精通”。接着,指导读者如何美…

FFmpeg Windows安装教程

一. 下载ffmpeg 进入Download FFmpeg网址&#xff0c;点击下载windows版ffmpeg。 下载第一个essentials版本就行。 二. 环境配置 上面源码解压后如下 将bin添加到系统环境变量 验证安装是否成功&#xff0c;输入ffmpeg –version&#xff0c;显示版本即为安装成功。

必应Bing国内广告开户、投放流程和避坑攻略!

必应Bing作为微软旗下的搜索引擎&#xff0c;不仅在全球范围内拥有庞大的用户群体&#xff0c;在中国也有着稳定的市场份额。为了让企业更好地利用必应Bing在国内的广告资源&#xff0c;云衔科技提供了全面的广告开户及代运营服务&#xff0c;帮助企业轻松驾驭数字化营销之路。…

c语言指针3

文章目录 前言一、数组名的理解1.数组名正常情况是首元素的地址2.数组名不是首元素地址的情况2. 1 sizeof(arr)中的数组名2. 2 &arr中的arr代表整个数组 3. 结论 二、使用指针访问数组1.使用指针输入输出数组中的数 三、一维数组传参的本质四、冒泡排序五、二级指针5.1 二级…

betterZip免费版怎么下载 如何安装下载和激活BetterZip教程 BetterZip注册码密钥

BetterZip是一款功能齐全且对用户友好的Mac系统解压缩工具&#xff0c;它具备压缩文件及文件夹&#xff0c;解压压缩包&#xff0c;在线预览和编辑压缩包内文件等一系列功能。此外&#xff0c;BetterZip还有简洁的界面和操作&#xff0c;可以通过拖拽或右键菜单来压缩或解压文件…

深度体验AI计算平台:超算互联网模型服务与加速卡

目录 前言 AI算力性能体验 1、注册/登录 2、购买服务 3、运行的过程记录 4、运行效果 5、运行结果反馈 6、体验总结 番外篇&#xff1a;主流推荐 1、算法模型推荐 2、开源项目推荐 3、数据集推荐 结束语 前言 在人工智能的浪潮中&#xff0c;AI计算平台已成为研究…

系统移植(十一)根文件系统(未整理)

文章目录 一、根文件系统中各个目录文件功能解析&#xff1a;二、对busybox进行配置和编译&#xff08;一&#xff09;执行make help命令获取make的帮助信息&#xff08;二&#xff09;对busybox源码进行配置&#xff0c;配置交叉编译器&#xff08;三&#xff09;执行make men…

kill 命令详解

kill命令其实比较让人难以理解的点在于信号这块&#xff0c;开发中kill -9经常用&#xff0c;但却很少去深入了解其他信号参数的具体作用&#xff0c;本文主要是就信号这块做一个解释。 实验代码 public static void main(String[] args) {Runtime.getRuntime().addShutdownHoo…

文件系统 --- 文件结构体,文件fd以及文件描述符表

序言 在编程的世界里&#xff0c;文件操作是不可或缺的一部分。无论是数据的持久化存储、日志记录&#xff0c;还是简单的文本编辑&#xff0c;文件都扮演着至关重要的角色。然而&#xff0c;当我们通过编程语言如 C、Java 等轻松地进行文件读写时&#xff0c;背后隐藏的复杂机…

C#面向对象补全计划 之 画UML类图(持续更新)

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列旨在通过补全学习之后&#xff0c;给出任意类图都能实现并做到逻辑上严丝合缝 学会这套规则&#xff0c;并看完面向对象补全计划文章之后&#xff0c;可以尝试…

Ubuntu20.04安装Angular CLI

一、更换apt-get源 使用原来的apt-get源有几个包报错&#xff0c;下不下来 更换阿里源&#xff08;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区&#xff09;&#xff0c;使用网站中的内容&#xff0c;在 apt-get update 时总是报错 改用清华源&#xff1a; deb http:/…

多种方式防止表单重复提交

1.前端方案&#xff1a; 通过js将按钮绑定一个方法&#xff0c;点击后3s内将按钮设置成不可用&#xff0c;或者隐藏。 缺点&#xff1a;绕过前端&#xff0c;例如通过postman发请求。 2.hashmap版&#xff1a; 请求携带一个参数&#xff0c;将请求携带的参数&#xff08;可…

牛客JS题(十四)类继承

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 类的基本使用构造函数实现类原型链的使用 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><script type"tex…

这两个大龄程序员,打算搞垮一个世界软件巨头!

大家都知道&#xff0c;Adobe是多媒体和数字内容创作者的绝对王者&#xff0c;它的旗下有众多大家耳熟能详的软件&#xff1a;Photoshop、Illustrator、Premiere Pro、After Effects、InDegign、Acrobat、Animate等等。 这些软件使用门槛很高&#xff0c;价格昂贵&#xff0c;安…