当前位置: 首页 > news >正文

AWS SDK 3.x for .NET Framework 4.0 可行性测试

前言

为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 SSL 3 / TLS 1.0 / TLS1.1 等上古加密算法的支持. 而对于一些同样拥有悠久历史的和 AWS 服务相关联的应用程序, 是否可以通过仅更新 SDK 版本的方式来适应新的环境. 本文将以 Windows Server 2008 R2 + .NET Framework 4.0 作为基础环境, 使用 VB.NET 和最新版本 AWS SDK 尝试开发一个能够访问 S3 存储桶的 WinForm 应用进行可行性测试.

环境准备

在本地使用 VMware/VirtualBox 安装一台 Windows Server 2008 R2 虚拟机并安装 Visual Studio 2010 开发环境.
相关 ISO 镜像下载链接:

filename: cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso
md5: 38992812F82E594644B2D64CCD86F89C
ed2k://|file|cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_vl_build_x64_dvd_617396.iso|3368962048|7C210CAC37A05F459758BCC1F4478F9E|/filename: cn_visual_studio_2010_ultimate_x86_dvd_532347.iso
md5: A94B54AA4A79E4F767DE116B1B77473D
ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/

踩坑过程

由于 Visual Studio 2010 还未内置 NuGet 包管理工具, 首先需要手动下载安装 NuGet Package Manager

启动 Visual Studio 2010, 创建 .NET Framework 4 Windows 窗体应用程序项目
在这里插入图片描述
从工具箱中拖拽设计一个简单的窗体: 一个用来触发操作的按钮和 TextBox1 用来作为测试结果的输出
在这里插入图片描述
Ctrl+Shift+S 保存项目, 工具 > NuGet 程序包管理器 > 管理解决方案的 NuGet 程序包
在这里插入图片描述
展开左侧 联机 - nuget.org 检查可用程序包, 结果直接报错了, 看起来可能在这一步就开始遇到了通信问题
在这里插入图片描述
先忽视这个问题, 手动从网站下载包文件离线方式安装吧. 分别下载 AWSSDK.S3 和 AWSSDK.Core
在这里插入图片描述
将下载好的两个 .nupkg 文件放到一个文件夹中
在这里插入图片描述
回到 VS2010 打开 NuGet 程序包管理设置
在这里插入图片描述
在程序包源中添加指向上面存放 .nupkg 的文件夹, 添加后记得点 更新 按钮. 同时取消勾选默认的 nuget.org 的源
在这里插入图片描述
再次管理解决方案的 NuGet 程序包, 直接安装 AWSSDK - S3
在这里插入图片描述
期间会自动解决依赖关系把 AWSSDK - Core Runtime 也给装上
在这里插入图片描述
在这里插入图片描述
终于可以开始进入撸代码的环节了, 双击窗体设计器中的按钮打开代码视图, 完成后的 Form1.vb 代码如下:

Imports Amazon
Imports Amazon.S3
Imports Amazon.S3.ModelPublic Class Form1Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim accessKey As String = "YourAccessKey"Dim secretKey As String = "YourSecretKey"Dim bucketName As String = "YourBucketName"Dim awsCredentials As New Amazon.Runtime.BasicAWSCredentials(accessKey, secretKey)Dim s3Client As New AmazonS3Client(awsCredentials, RegionEndpoint.CNNorthWest1)Dim listObjectsRequest As New ListObjectsRequest()listObjectsRequest.BucketName = bucketNameTryDim response As ListObjectsResponse = s3Client.ListObjects(listObjectsRequest)TextBox1.AppendText("Listing S3 Bucket's objects:" + vbCrLf)For Each obj In response.S3ObjectsTextBox1.AppendText(obj.Key + vbCrLf)NextCatch ex As AmazonS3ExceptionTextBox1.Text = ex.MessageEnd TryEnd Sub
End Class

F5 启动调试, 点击 TEST 按钮, 程序卡顿一下后出现 TLS 的报错信息:

Amazon S3 will stop supporting TLS 1.0 and TLS 1.1 connections. Please update your client to use TLS version 1.2 or above. To learn more and to update your client, see https://go.aws/3AUlVSb. For further assistance, contact AWS support.
在这里插入图片描述

填坑过程

好吧, 还好本来就有思想准备, 毫不意外的坑在了 TLS 的版本问题上, 开始尝试填坑. 看起来 .NET Framework 4.0 跑的应用默认并没有走 TLS 1.2 通信. 关于 Windows Server 2008 R2 和 .NET Framework 4.0 开启 TLS 1.2 的文档很多, 基本上都是要安装补丁或者修改注册表什么的, 尝试手动下载和折腾了半天都不好使. 意外发现网上有大神整理好的 Windows 7 / Server 2008 R2 的累积更新包 UpdatePack7R2-23.8.10 还挺新鲜的, 装了半天并重启了几次才算完全安装完成.

安装前请务必确认 C 盘的可用空间至少有 10 GB 以上

装完累积更新包后再检查 Windows 更新居然还能正常检查到有新的可用更新, 果断继续更新, 又是漫长的等待…
在这里插入图片描述
更新全部都装完以后, 再次测试还是相同的错误. 为了验证通信到底走的是啥版本的 TLS, 用 WireShark 抓个包瞅瞅.

在这里插入图片描述
果然还是走了 TLSv1, 不过继续抓包用 IE 访问 https://www.qq.com 发现 Windows 系统现在已经是能够支持 TLSv1.2 的

在这里插入图片描述
参考文档 SecurityProtocolType Enum 可以确认是 .NET Framework 4.0 只支持 SSL 3.0 和 TLS 1.0

仍不死心, 由于 Windows 中可以共存多个版本的 .NET Framework, 死马当成活马医, 再下个 4.5.2 的版本 Microsoft .NET Framework 4.5.2 (Offline Installer) 装上之后, 再运行调试, 奇迹发生!

在这里插入图片描述
程序可以正常执行了, 再次启用 NuGet 线上的源, 也可以正常使用了.

在这里插入图片描述

总结

在 Windows Server 2008 R2 + .NET Framework 4.0 (Only) 的环境中, 由于 .NET Framework 4.0 先天不足无法支持 TLS 1.2 所以即便是 Windows 安装更新可以在系统层面(IE)支持 TLS 1.2, 使用 .NET Framework 4.0 开发的应用也无法正常通过 TLS 1.2 进行通信. 额外安装 .NET Framework 4.5.2 与 4.0 形成共存状态后, 之前基于 4.0 开发的应用就可以正常使用 TLS 1.2 通信了.

总的来说, 其实主要需要做的就两件事情:

  1. 把 Windows Server 2008 R2 能更的新都更一遍
  2. 额外安装 .NET Framework 4.5.2 与 4.0 共存, 弥补 4.0 的先天缺陷

附录

SSL / TLS 的历史版本发布时间:
在这里插入图片描述
RFC 7568 相关描述 1

The Secure Sockets Layer version 3.0 (SSLv3), as specified in RFC 6101, is not sufficiently secure. This document requires that SSLv3 not be used. The replacement versions, in particular, Transport Layer Security (TLS) 1.2 (RFC 5246), are considerably more secure and capable protocols.

AWS 于 2023.6.28 将会把 TLS 1.2 作为调用 API 时的最低版本要求 2

June 1, 2023: This blog post has been updated to add a timeline to clarify the key dates. To avoid a disruption to your AWS workloads, you must update all of your TLS 1.0/ 1.1 software clients no later than 06/28/23.

Microsoft 也在 2023.8.1 的博客中宣布 Windows 即将默认禁用 TLS 1.0 / 1.1 3

Transport Layer Security (TLS) is the most common internet protocol for setting up an encrypted channel of communication between a client and server. TLS 1.0 dates back to 1999 and, over time, several security weaknesses have been found in this protocol version. TLS 1.1 was published in 2006 and made some security improvements, but never saw broad adoption. These versions have long been surpassed by TLS 1.2 and TLS 1.3, and TLS implementations try to negotiate connections using the highest protocol version available.


  1. RFC 7568 ↩︎

  2. TLS 1.2 to become the minimum TLS protocol level for all AWS API endpoints ↩︎

  3. TLS 1.0 and TLS 1.1 soon to be disabled in Windows ↩︎

相关文章:

AWS SDK 3.x for .NET Framework 4.0 可行性测试

前言 为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 SSL 3 / TLS 1.0 / TLS1.1 等上古加密算法的支持. 而对于一些同样拥有悠久历史的和 AWS 服务相关联的应用程序, 是否可以通过仅更新 SDK 版本的方式来适应新的环境. 本文将以 Win…...

两个list。如何使用流的写法将一个list中的对象中的某些属性根据另外一个list中的属性值赋值进去?

两个list。如何使用流的写法将一个list中的对象中的某些属性根据另外一个list中的属性值赋值进去? 你可以使用Java 8以上版本中的流(Stream)和Lambda表达式来实现这个需求。假设有两个List,一个是sourceList,包含要赋值属性的对象;另一个是…...

美国陆军希望大数据技术能够帮助保护其云安全

随着陆军采用更大型的云服务,一位高级官员警告说,一些在私营部门有效的快速软件开发技巧和简单解决方案(例如开放代码库)如果没有额外的安全性,将无法为军队工作。 我们知道现代软件开发确实依赖于第三方库&#xff…...

vue 文字跑马灯

<template><div class"marquee-container"><div class"marquee-content"><div>{{ marqueeText }}</div><div>{{ marqueeText }}</div> <!-- 复制一份文本&#xff0c;用于无缝衔接 --></div></d…...

开源ChatGPT系统源码 采用NUXT3+Laravel9后端开发 前后端分离版本

开源ChatGPT系统源码 采用NUXT3Laravel9后端开发 前后端分离版本 ChatGPT是一种基于AI的聊天机器人技术&#xff0c;它可以帮助用户与聊天机器人进行自然语言交流&#xff0c;以解决用户的问题或满足用户的需求。ChatGPT的核心技术是使用自然语言处理&#xff08;NLP&#xff…...

【LeetCode|数据结构】剑指 Offer 33. 二叉搜索树的后序遍历序列

题目链接 剑指 Offer 33. 二叉搜索树的后序遍历序列 标签 二叉搜索树、后序遍历 步骤 二叉搜索树的左子树的节点值 ≤ \le ≤根节点值 ≤ \le ≤右子树的节点值&#xff1b;对于后序遍历序列最后一个元素的值为根节点的值&#xff1b; 由上面的两个性质可以得出&#xff…...

自定义协程

难点 自己写了一遍协程&#xff0c;困难的地方在于unity中的执行顺序突然发现unity里面可以 yield return 的其实有很多 WaitForSeconds WaitForSecondsRealtime WaitForEndOfFrame WaitForFixedUpdate WaitUntil WaitWhile IEnumerator&#xff08;可以用于协程嵌套&#xf…...

【Atcoder】 [ABC240Ex] Sequence of Substrings

题目链接 Atcoder方向 Luogu方向 题目解法 先考虑一个性质&#xff0c;选出的子串长度不会超过 2 n \sqrt {2n} 2n ​ 考虑最劣的选法是选出长度为 1 , 2 , 3 , . . . 1,2,3,... 1,2,3,... 的子串&#xff08;如果后一个选出的串比前一个子串长度大超过1&#xff0c;那么后…...

真机二阶段之堆叠技术

堆叠技术 --- 可以将多台真实的物理设备逻辑上抽象成一台 思科 -- VPC 华为 -- iStack和CSS 华三 -- IRF 锐捷 -- VSU iStack和CSS的区别&#xff1a; CSS --- 集群 --- 它仅支持将两台支持集群的交换机逻辑上整合成一台设备。 iStack --- 堆叠 --- 可以将多台支持堆叠的交换…...

简单、快速、无需注册的在线 MockJs 工具

简单、快速、无需注册的 MockJs 工具。通过参数来返回数据&#xff0c;传入什么参数就返回什么数据。 使用 接口只支持返回文本类数据&#xff0c;不支持图片、流数据等。 json 调用接口 https://mock.starxg.com/?responseBody{“say”:“hello”}&contentTypeapplic…...

【Linux取经路】探索进程状态之僵尸进程 | 孤儿进程

文章目录 一、进程状态概述1.1 运行状态详解1.2 阻塞状态详解1.3 挂起状态详解 二、具体的Linux操作系统中的进程状态2.1 Linux内核源代码2.2 查看进程状态2.3 D磁盘休眠状态(Disk sleep)2.4 T停止状态(stopped) 三、僵尸进程3.1 僵尸进程危害总结 四、孤儿进程五、结语 一、进…...

第十二章MyBatis动态SQL

if标签与where标签 if标签 test如果为true就会拼接查询条件&#xff0c;否则不会 当没有使用Param&#xff0c;test出现arg0/param1当使用Param&#xff0c;test为Param指定的值当使用Pojo&#xff0c;test为对象的属性名 select * from car where <if test"name!n…...

redis--发布订阅

redis的发布和订阅 在Redis中&#xff0c;发布-订阅&#xff08;Publish-Subscribe&#xff0c;简称Pub/Sub&#xff09;是一种消息传递模式&#xff0c;用于在不同的客户端之间传递消息&#xff0c;允许一个消息发布者将消息发送给多个订阅者。这种模式适用于解耦消息发送者和…...

链表2-两两交换链表中的节点删除链表的倒数第N个节点链表相交环形链表II

今天记录的题目&#xff1a; ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II 两两交换链表中的节点 题目链接&#xff1a;24. 两两交换链表中的节点 这题比较简单&#xff0c;记录好两个节点&#xff0c;交换其nex…...

数据结构之并查集

并查集 1. 并查集原理2. 并查集实现3. 并查集应用3.1 省份数量3.2 等式方程的可满足性 4. 并查集的优缺点及时间复杂度 1. 并查集原理 并查表原理是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林&#xff0…...

[element-ui] el-date-picker a-range-picker type=“daterange“ rules 校验

项目场景&#xff1a; 在项目中表单提交有时间区间校验 问题描述 想当然的就和其他单个输入框字符串校验&#xff0c;导致提交保存的时候 &#xff0c;初次日期未选择&#xff0c;规则提示。后续在同一表单上继续提交时&#xff0c;校验失效。走进了死胡同&#xff0c;一直以…...

Dockers搭建个人网盘、私有仓库,Dockerfile制作Nginx、Lamp镜像

目录 1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 &#xff08;1&#xff09;下载mysql:5.6和owncloud镜像 &#xff08;2&#xff09;创建启动mysql:5.6和owncloud容器 &#xff08;3&#xff09;在浏览器中输入网盘服务器的IP地址&#xff0c;进行账…...

2023 CCPC 华为云计算挑战赛 hdu7401 流量监控(树形dp)

题目 流量监控 - HDU 7401 - Virtual Judge 简单来说&#xff0c;T(T<20)组样例&#xff0c;sumn不超过2e4 每次给定一棵n(n<2000)个点的树&#xff0c;两问&#xff1a; ①将n个点恰拆成n/2个pair(u,v)&#xff0c;要求一个点是另一个点的祖先&#xff0c;求方案数 …...

01.Django入门

1.创建项目 1.1基于终端创建Django项目 打开终端进入文件路径&#xff08;打算将项目放在哪个目录&#xff0c;就进入哪个目录&#xff09; E:\learning\python\Django 执行命令创建项目 F:\Anaconda3\envs\pythonWeb\Scripts\django-admin.exe&#xff08;Django-admin.exe所…...

亿赛通电子文档安全管理系统任意文件上传漏洞(2023-HW)

亿赛通电子文档安全管理系统任意文件上传漏洞 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现小龙POC检测 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...