gpt4 book ai didi

.net - 在 VB.NET 中使用客户端证书通过 FTPS 上传文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:33:31 31 4
gpt4 key购买 nike

我的任务是能够通过 FTPS 将文件发送到站点。这需要成为我生成要发送的文件的过程的一部分。我获得了一个能够连接到该站点的程序 (CoreFTP),并且我可以查看/推送文件。我尝试通过使用 System.Diagnostics.Process 的 .Net 示例程序将命令行用于 CoreFTP 并将用户更改为导入证书的用户)但这没有用(没有错误但没有文件在服务器),所以我又尝试使用 .NET 库连接到它。

我面临的问题是,要连接到站点,我必须连接 AUTH TLS 并且它需要使用具有特定证书的 Windows TLS/SSL。

我发现这个例子 ( https://www.limilabs.com/blog/use-ssl-with-ftp-explicit ) 至少谈到了使用 AuthTLS,但是当我把它放在我的项目中时,它说 FTP 是未定义的。我尝试了建议的修复,但它们最终被破坏了(包括一个库,然后它说我需要实现 idisposable)。

我发现另一个网站 ( https://support.microsoft.com/en-us/help/901183/how-to-call-a-web-service-by-using-a-client-certificate-for-authentica ) 讨论如何获取特定证书,但我不确定如何将其用于 FTP。

因此,我对解决方案的偏好是:1. .NET 解决方案不使用第三方库。2. .NET 解决方案使用开源第三方库。3. .NET 解决方案,我可以使命令行工作以使用 CoreFTP,我在与运行程序的用户不同的用户下运行命令行(因为证书/CoreFTP 配置文件是用户特定的)。4. 使用我必须付费的库的 .NET 解决方案(真的希望不要推荐这个)。

这是(或多或少)我用来通过 .net 程序中的命令行命令运行 C​​oreFTP 的代码:

appname = "D:\Programs\coreftp.exe"
args = " -s -O -site Server_QA -u \\machine\docs\test.txt -p / " +
"-output \\machine\docs\corelog1.txt"
standOut = String.Empty
AddHandler objProcess.OutputDataReceived, AddressOf process_OutputDataReceived
' Start the Command and redirect the output
objProcess.StartInfo.UseShellExecute = False
objProcess.StartInfo.RedirectStandardOutput = True
objProcess.StartInfo.CreateNoWindow = True
objProcess.StartInfo.RedirectStandardError = True
objProcess.StartInfo.Domain = "mydomain"
objProcess.StartInfo.UserName = "administrator"
objProcess.StartInfo.Password = New System.Security.SecureString
For Each chr As Char In pwd.ToCharArray()
objProcess.StartInfo.Password.AppendChar(chr)
Next
objProcess.StartInfo.FileName() = AppName
If args.Length > 0 Then
objProcess.StartInfo.Arguments() = args
End If
objProcess.Start()
objProcess.BeginOutputReadLine()
objProcess.WaitForExit() 'Set to run for 20 minutes
If objProcess.HasExited() Then
'strOutput = objProcess.StandardOutput.ReadToEnd()
strOutput = standOut
strError = objProcess.StandardError.ReadToEnd()
If strOutput IsNot Nothing AndAlso strOutput.Length > 0 Then
PersonalDetailLog(strOutput)
End If
If strError IsNot Nothing AndAlso strError.Length > 0 Then
Throw New ApplicationException(strError)
End If
Else
PersonalDetailLog(
"The " + AppName + " Process has exceeded the 20 minute time out " +
"is is being closed")
If objProcess.Responding Then
objProcess.CloseMainWindow()
If Not objProcess.HasExited() Then
objProcess.Kill()
End If
Else
objProcess.Kill()
End If
Throw New ApplicationException("" + AppName + " Process Time Limit Exceeded.")
End If

最佳答案

示例代码:

Dim request As FtpWebRequest = WebRequest.Create("ftp://ftp.example.com")

request.Credentials = New NetworkCredential("username", "")

' Query certificate from store
Dim store As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(OpenFlags.ReadOnly)
Const tp = "2b6f8ac51a85cbaf429474a55304313968667611"
Dim cert As X509Certificate2 =
store.Certificates.Find(X509FindType.FindByThumbprint, tp, True)(0)
store.Close()

' Add certificate into request
request.ClientCertificates.Add(cert)
request.EnableSsl = True

' Upload
request.Method = WebRequestMethods.Ftp.UploadFile

Using fileStream As Stream = File.OpenRead("C:\local\path\file.zip"),
ftpStream As Stream = request.GetRequestStream()
fileStream.CopyTo(ftpStream)
End Using

关于.net - 在 VB.NET 中使用客户端证书通过 FTPS 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47419239/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com