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

news2024/10/6 8:24:37

前言

为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 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.Model

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim 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 = bucketName

        Try
            Dim response As ListObjectsResponse = s3Client.ListObjects(listObjectsRequest)
            TextBox1.AppendText("Listing S3 Bucket's objects:" + vbCrLf)
            For Each obj In response.S3Objects
                TextBox1.AppendText(obj.Key + vbCrLf)
            Next
        Catch ex As AmazonS3Exception
            TextBox1.Text = ex.Message
        End Try
    End 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 ↩︎

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

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

相关文章

PyTorch模型性能分析与优化

动动发财的小手,点个赞吧! 训练深度学习模型,尤其是大型模型,可能是一项昂贵的支出。我们可以使用的管理这些成本的主要方法之一是性能优化。性能优化是一个迭代过程,我们不断寻找提高应用程序性能的机会,然…

基于Java+SpringBoot+vue前后端分离在线动漫信息系统设计实现

基于JavaSpringBootvue前后端分离在线动漫信息系统设计实现(程序源码毕业论文) 大家好,今天给大家介绍基于JavaSpringBootvue前后端分离在线动漫信息系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完…

基于单片机串口控制直流电机调速

一、系统方案 (2)本设计采用STC89C5单片机作为主控器,串口控制直流电机调速,串口助手发送1-8,改变电机速度,数码管显示对应速度。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 TMOD0x21;//定…

Linux学习之ssh和scp

ls /etc/ssh可以看到这个目录下有一些文件,而/etc/ssh/ssh_config是客户端配置文件,/etc/ssh/sshd_config是服务端配置文件。 cat -n /etc/ssh/sshd_config | grep "Port "可以看一下sshd监听端口的配置信息,发现这个配置端口是22…

代码随想录算法训练营之JAVA|第三十三天|738. 单调递增的数字

今天是第33天刷leetcode,立个flag,打卡60天,如果做不到,完成一件评论区点赞最高的挑战。 算法挑战链接 738. 单调递增的数字https://leetcode.cn/problems/monotone-increasing-digits/ 第一想法 题目理解:找到一个…

2023国赛数学建模B题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

C++进阶 类型转换

本文简介:介绍C中类型转换的方式 类型转换 C语言中的类型转换为什么C需要四种类型转换C强制类型转换static_castreinterpret_castconst_castdynamic_cast RTTI(了解)总结 C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型…

数据同步后数据总条数对不上的问题解决

文章目录 [toc] 1.问题2.解决办法2.1)设置合理的线程池参数2.2)设置url连接参数2.3) 优化msql的系统参数2.4)使用CountDownLatch减法计数器和数据插入的公共方法新开一个事务2.5)sql批量注入器执行成功后,当前线程slee…

蛊卦-拨乱反正

目录 前言 卦辞 爻辞 总结 前言 题外话,今天占卜时,看错了,以为占到了蛊卦(后续会对自己的占卦经历进行补充,不断完善这个易经学习的专栏),那顺便就学习一下蛊卦,蛊惑人心&#…

线程和进程同步互斥你真的掌握了吗?(同步互斥机制保姆级讲解与应用)

目录 同步互斥的概念 互斥锁 初始化互斥锁 销毁互斥锁 申请上锁 解锁 案例1:没有互斥锁 多任务的运行情况 案例2:有互斥锁 多任务的运行情况 死锁 读写锁 初始化读写锁 销毁读写锁 申请读锁 申请写锁 释放读写锁 案例:两个任务…

回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GA-RBF遗传算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)效果…

从0到1:通用后台管理系统 echarts图使用及其参数

这一章主要讲在系统概览模块中,所使用的echarts图及其参数 echarts是一个基于 JavaScript 的开源可视化图表库, 官网直通车 是在各种后台管理系统的开发中都常见的一种库,也是前端开发管理系统所必学的一种库 那么在项目中主要是使用了饼…

【前端】React快速入门+Redux状态管理

本文旨在记录react的基础内容,帮助有需要的同学快速上手,需要进一步了解描述更加稳妥和全面的信息,请查阅官方文档 官方文档点击这里进行跳转 React快速入门 先导 react框架 vue,react,angular这几种主流前端框架使用频率较高…本质还是js库。 React…

1.Jetson Orin Nano Developer Kit系统刷机

本教程有3种方法刷机,根据需要自己选择适合自己的方案。 一:使用>32G的SD卡安装开发套件; 二:在Ubuntu18.04下通过SDK Manager软件在线安装系统. 三:在Ubuntu18.04下通过脚本方式安装系统. 注意:Ubuntu的账号不能为一些常见的包名如:p…

【学习日记】【FreeRTOS】FreeRTOS 移植到 STM32F103C8

前言 本文基于野火 FreeRTOS 教程,内容是关于 FreeRTOS 官方代码的移植的注意事项,并将野火例程中 STM32F103RC 代码移植到 STM32F103C8。 一、FreeRTOS V9.0.0 源码的获取 两个下载链接: 官 网 代码托管 二、源码文件夹内容简介 Source…

Docker(一)-安装、架构、业务开发常用命令、Dockerile、镜像卷、镜像仓库

基于业务开发使用Docker Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码…

为什么需要单元测试?

为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。 从测试人员角度而言…

Springboot 实践(10)spring cloud 与consul配置运用之服务的注册与发现

前文讲解,完成了springboot、spring security、Oauth2.0的继承,实现了对系统资源的安全授权、允许获得授权的用户访问,也就是实现了单一系统的全部技术开发内容。 Springboot是微服务框架,单一系统只能完成指定系统的功能&#xf…

【简单认识Docker网络管理】

文章目录 一、Docker 网络实现原理二、Docker 的网络模式1.四种网络模式2.各网络模式详解(1)Host模式(2)Container模式(3)None模式(4)Bridge模式 3.指定容器网络模式4.自定义网络模式…

web文件上传

文件上传指的是&#xff0c;将本地的图片、视频、音频上传到服务器&#xff0c;提供给其他用户浏览和下载的过程 前端需求 想要进行文件上传对于web前端来说有三个重要要素 1.<input type"file" name"image"> 提供这样的file文件上传格式 2. metho…