【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(下)SSL设置及被动模式

2023-05-16

目录

    • 5.5、FTP SSL设置
      • 准备工作
        • (1)创建FTP用户访问组
        • (2)编辑FTP站点【fjnu-ftp】的权限
        • (3)创建SSL证书
        • *配置FTP SSL
      • 验证
        • (1)不加密访问FTP服务
        • (2)TLS/SSL显式加密访问FTP服务
    • 5.6 FTP服务器启用被动模式
  • 参考资料
  • 关联博文

5.5、FTP SSL设置

准备工作

(1)创建FTP用户访问组

① 打开服务器本地【计算机管理】,在【系统工具】——>【本地用户和组】——>【用户】中创建FTP用户账户。在中间列表空白处点击鼠标右键选择【新用户】,分别创建ftp2和ftp3两个新用户。

在这里插入图片描述

② 点击左侧菜单中的【组】,在中间列表空白处点击鼠标右键选择【新建组】,设置组名,将ftp1、ftp2和ftp3添加到成员中,最后点击【创建】。

在这里插入图片描述

(2)编辑FTP站点【fjnu-ftp】的权限

① 打开IIS管理器,在左侧的菜单中右键点击f【fjnu-ftp】,选择【编辑权限】

在这里插入图片描述

② 在弹出的【fjnu-ftp属性】对话框中,选择【安全】选项卡,点击【编辑】,然后在弹出的【安全】对话框中选择添加,输入:FTPGroup,点击【检查名称】,最后点击【确定】。

在这里插入图片描述

③ 添加完成后,为FTPGroup增加权限,在【允许】列中勾选【完全控制】,点击【确定】

在这里插入图片描述

(3)创建SSL证书

由于SSL证书需要购买,本次实验中,使用Windows Powershell的New-SelfSignedCertificate命令,该命令可以让用户在Windows上创建一个新的自签名证书来进行测试。

① 用管理员权限启动Powershell。右键点击【开始】,选择【Windows PowerShell】。

在这里插入图片描述

② 确认证书存储路径。使用命令:

Get-PSDrive | Format-Table -AutoSize -Wrap

在这里插入图片描述

③ 创建SSL证书。使用命令:

 New-SelfSignedCertificate `
-DnsName "fjnu.local" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-CertStoreLocation "Cert:\LocalMachine\My" `
-NotAfter (Get-Date).AddYears(5) 

关键字解释:

# 创建自签名证书
# -DnsName (DNS名,如果未指定主题名称(Subject Name),第一个DNS名默认为颁发者名称。)
# -KeyAlgorithm (指定用于对新证书进行签名的哈希算法名。这里使用RSA)
# -KeyLength (指定新证书关联的密钥长度,以位(bits)为单位,这里密钥长度为2048 bits)
# -CertStoreLocation (指定用于存储新证书的证书存储路径。)
# -NotAfter (证书有效期 : 上面的示例有限期为5年。)

在这里插入图片描述

④ 打开Windows证书管理其,使用快捷键win+R,在【运行】中输入:certlm.msc,点击【确定】

在这里插入图片描述

⑤ 进入【certlm】后,右键点击【证书-本地计算机】,选择【刷新】,然后再次右键点击【证书-本地计算机】,选择【查找证书】。在弹出的对话框中输入刚才创建的SSL证书名:fjnu.local,进行查找。

在这里插入图片描述

⑥ 由Windows PowerShell自签名的证书,在创建完成后,系统会自动导入到certlm的【个人】和【中间证书颁发机构】中。

在这里插入图片描述

*配置FTP SSL

① 返回IIS管理器中的【fjnu-ftp主页】,右键点击【fjnu-ftp】选择【刷新】,然后点击【FTP SSL设置】。

在这里插入图片描述

② 进入【FTP SSL设置】界面,点击【选择】,在弹出的对话框中自动出现刚才创建的SSL证书,点击证书,然后点击【确定】。接下来在SSL策略中,选择【需要SSL连接】,最后在右侧【操作】栏中,点击【应用】。

在这里插入图片描述

验证

在PC2上用资源管理器访问FTP服务器,发现无法访问,这是因为FTP服务器设置了需要使用SSL通道才能连接FTP服务器。

在这里插入图片描述

在PC2上使用FTP客户端——WinSCP访问FTP服务器。WinSCP访问FTP服务时有三种模式,包括不加密、TLS/SSL显式加密和TLS/SSL隐式加密。其中不加密、TLS/SSL显式加密默认访问FTP服务器21号端口。TLS/SSL隐式加密默认访问FTP服务器990端口。三种方式的具体区别请参考《wireshark抓包分析FTP三种连接方式:不加密、TLS/SSL隐式加密和显式加密》一文

(1)不加密访问FTP服务

因为FTP以明文的方式传输数据,因此使用不加密的方式访问FTP服务时,用户名和密码以及访问的文件内容可能会被不法分子监听截获。

在这里插入图片描述

(2)TLS/SSL显式加密访问FTP服务

在这里插入图片描述

####(3)TLS/SSL隐式加密访问FTP服务

使用TLS/SSL隐式加密访问FTP服务时,FTP服务器端的绑定端口必须和客户端的端口一直。FTP客户端的TLS/SSL隐式加密访问端口默认为990,因此,如果想使用该方式访问FTP服务,服务器中的绑定设置必须开放990端口。

在这里插入图片描述

FTP客户端和FTP服务器端口一致时,才能正常通过TLS/SSL隐式加密访问FTP服务

在这里插入图片描述

5.6 FTP服务器启用被动模式

(1)打开IIS管理器,点击fjnu-ftp主页中的【FTP防火墙支持】

在这里插入图片描述

(2)进入【FTP防火墙支持】界面,如果【数据通道端口范围】是灰色,无法添加端口的话,有以下两种可能:

①虚拟机网卡问题。

请把虚拟机中的NAT模式网卡关闭,使用网卡自定义模式。

②防火墙策略问题。

在Windows Defender防火墙的高级设置的入站规则中,将FTP Service这条规则的本地端口改为放行所有端口。

在数据通道端口输入端口范围,然后点击右侧【操作】栏中的【应用】。

在这里插入图片描述
在这里插入图片描述

(3)打开【控制面板】——>【系统和安全】——>【Windows Defender防火墙】——>【高级设置】——>【入站规则】。找到【FTP Service】这条规则,双击进入【FTP Service属性】界面。

在这里插入图片描述

(4)点击【协议和端口】选项卡,在【本地端口】处选择【特定端口】,然后在下方框中输入:21,5000-6000(与FTP防火墙支持的数据通道端口一致),最后点击【确定】。

在这里插入图片描述

验证

在PC2中使用WinSCP对FTP服务器进行FTP访问(不加密方式)。上传一个任意文件到FTP服务器中,然后使用命令提示符cmd,输入命令:netstat -n,可以看到PC2使用49674号端口(系统随机选择)向FTP服务器的21号端口发送PASV消息,在控制连接成功建立后,客户端向FTP传送传送数据时,使用49676号端口,而FTP服务器使用5001号端口(P端口)。这和我们在FTP防火墙支持中设置的数据通道端口范围一直(5000-6000)。

在这里插入图片描述

参考资料

  • FTP协议的主动模式和被动模式的区别
  • FTPサーバー : SSL/TLS の設定
  • Microsoft Docs:New-SelfSignedCertificate
  • Microsoft Docs:Installing and Configuring FTP 7 on IIS 7

关联博文

关于 FTP 服务的配置与管理 请查阅接下来的博文:

  • 【Windows Server 2019】FTP服务的配置与管理——理论(FTP工作原理及简单介绍)

  • 【Windows Server 2019】FTP服务的配置与管理——新建及测试FTP站点

  • 【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(上)IP地址限制、身份验证、授权规则和请求筛选

  • 【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(下)SSL设置及被动模式

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

【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(下)SSL设置及被动模式 的相关文章

  • 获取已创建进程的进程句柄 Windows

    我需要获取运行程序时刚刚创建的所有进程的句柄或 PID 到目前为止 我已经使用了这段代码 每次创建进程时都会告诉我 问题是我只获取有关创建的进程的信息 但没有有关进程本身的任何信息 https msdn microsoft com en u
  • 为什么我们从 MultiByte 转换为 WideChar?

    我习惯于处理 ASCII 字符串 但现在使用 UNICODE 我对一些术语感到非常困惑 什么是多字节字符以及什么是widechar有什么不同 多字节是指在内存中包含多个字节的字符吗 widechar只是一个数据类型来表示吗 为什么我们要从M
  • 在 Jenkins 中执行批处理文件

    我有一个简单的批处理文件 我想要从 Jenkins 调用 运行 执行该文件 Jenkins 中有同样的插件吗 如何从 Jenkins 执行批处理文件 如果有相同的教程或文档 无需为此添加新插件 在Jenkins 选择您的工作名称并转到配置部
  • 为什么我的文件路径中出现 Unicode 转义的语法错误? [复制]

    这个问题在这里已经有答案了 我想要访问的文件夹名为 python 位于我的桌面上 当我尝试访问它时出现以下错误 gt gt gt os chdir C Users expoperialed Desktop Python SyntaxErro
  • Nuxt.js 使用 https 调用服务器端 API 的问题

    当我使用 HTTP 时 我遇到 nuxt 服务器端 API 调用问题S 在客户端 一切都很好 当我通过链接在客户端切换页面时 API 可以工作 但是当我按下 Ctrl f5 并且数据将在服务器端预取时 实际上没有 API 调用 也没有提供数
  • 在 Windows 2008 上将 myprogram.exe 作为服务运行时出现问题

    MyProgram exe 是用来侦听来自管道的请求并使用命令提示符使其工作完美 但我尝试使用 Windows 服务来工作但没有成功我在 Windows Server 2008 Enterprise 上尝试了以下步骤 gt sc creat
  • NtDll 真的导出 C 运行时函数吗?我可以在我的应用程序中使用这些函数吗?

    我在查看 Windows 10 计算机上的 NtDll 导出表 发现它导出标准 C 运行时函数 例如memcpy sprintf strlen etc 这是否意味着我可以在运行时动态调用它们LoadLibrary and GetProcAd
  • 具有特定协议版本的 SSL 连接

    我正在尝试使用特定协议版本执行 SSL 连接 使用以下 JAVA 代码 System out println Locating socket factory for SSL SSLSocketFactory sslsocketfactory
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • 批处理文件 FOR /f 标记

    任何人都可以逐行准确解释以下代码是如何工作的 我真的迷路了 我一直在尝试学习如何使用 FOR 命令 但我不明白这一点 echo off for f tokens delims f in myfile do set line f call p
  • Java 不提供双向 SSL 客户端证书?

    我正在尝试使用相互 SSL 从 Java Spring Boot 应用程序连接到 NetScaler 端点 我可以使用以下命令通过 OpenSSL 在命令行上按预期进行连接 openssl s client connect xxxx xxx
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 使用 TortoiseGit 创建 git 克隆时出现 SSL 证书问题

    我想在 TortoiseGit 的帮助下克隆 git 存储库 但出现错误 错误 SSL 证书有问题 请验证 CA 证书是否正常 细节 错误 14090086 SSL 例程 SSL3 GET SERVER CERTIFICATE 访问时证书验
  • 自动备份远程托管服务器的最佳实践

    我正在尝试设置一个用于团队笔记的服务器 我想知道自动备份其数据 又称我的笔记 的最佳方法是什么 目前我计划在 docker 镜像中运行服务器 docker 镜像将由托管服务 例如 Google 托管 我找到了一个适合我的需求的免费托管服务
  • 当 ssl 和 http2 打开时,Nginx 似乎忽略 server_name

    我有这个 nginx 配置 server listen 80 default server listen 80 default server server name www example com return 301 https www
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 使用 VirtualDocumentRoot 的 SSL 虚拟主机

    我在 ubuntu 16 04 VM 上进行开发工作 当我处理多个项目时 为了让我的生活更轻松 我使用 VirtualDocumentRoot 和主机文件使用 dev 域从我的主文件夹中服务器站点 在 000 default conf 我有
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git

随机推荐