私は、FTPS経由でサイトにファイルを送信できることが任されています。これは送信するファイルを生成するプロセスの一部である必要があります。私はサイトに接続できるプログラム(CoreFTP)が与えられていて、ファイルを見る/見ることができます。私はCoreFTPにCoreFTPにSystem.Diagnostics.Processを使って.Netサンプルプログラムを使ってコマンドラインを使用しようとしましたが、証明書がインポートされたユーザーになるようにユーザーを変更しましたが動作しませんでした。サーバー)、私はそれに.NETライブラリで接続しようとしています。VB.NETのクライアント証明書を使用してFTPSでファイルをアップロード
私が直面している問題は、サイトに接続するにはAUTH TLS
に接続する必要があり、Windows TLS/SSLを特定の証明書で使用する必要があるということです。
私は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ソリューション(私が支払う必要があるライブラリーを使用してください。
これは、私は、コマンドラインでCoreFTPを実行するために使用していたコードは、.NETプログラム内からのコマンド(多かれ少なかれ)である:
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
* "特定の証明書を使用してWindows TLS/SSL" *をあります少し曖昧。サーバー証明書またはクライアント証明書を意味しますか? –