c# - 有没有一种方法可以使用 FtpWebRequest 在 C# 中使用客户端证书对 FTP 进行身份验证?

标签 c# ssl ftp client-certificates ftps

我正在尝试将文件上传到 FTP 服务器,我需要使用客户端证书进行身份验证,而不是用户名和密码。

var fullFtpPath = String.Concat(ftpItem.FtpAddress, "/", record, ".txt");

FtpWebRequest request = (FtpWebRequest) WebRequest.Create(fullFtpPath);
request.Credentials = new NetworkCredential(ftpItem.Username, ftpItem.Password);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;
request.UsePassive = ftpItem.UsePassive;
request.EnableSsl = ftpItem.UseSSL;

request.ContentLength = bytes.Length;
using(Stream s = request.GetRequestStream()) {
    s.Write(bytes, 0, bytes.Length);
}

FtpWebResponse response = (FtpWebResponse) request.GetResponse();
Debug.WriteLine("Upload File Complete, status {0}", response.StatusDescription);

db.LogExport(siteId, fullFtpPath, record, true, response.StatusDescription);
response.Close();

以上是我当前的代码,但我不确定如何实现证书身份验证,或者是否有可能实现。我必须创建证书吗?还是服务器会给我一个证书,我只需在我的请求中设置它?

最佳答案

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

request.Credentials = new NetworkCredential("username", "");

// Query certificate from store
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
const string tp = "2b6f8ac51a85cbaf429474a55304313968667611";
X509Certificate2 cert2 =
    store.Certificates.Find(X509FindType.FindByThumbprint, tp, true)[0];
store.Close();

// Add certificate into request
request.ClientCertificates.Add(cert2);

关于c# - 有没有一种方法可以使用 FtpWebRequest 在 C# 中使用客户端证书对 FTP 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109291/

相关文章:

javascript - 如何从后面的代码关闭 Bootstrap 模式?

c# - 如何将字符串的长度限制为 150 个字符?

ssl - 配置嵌入式 Tomcat 以使用 BouncyCaSTLe 提供符合 FIPS 的 HTTP2

xml - Mule SSL 连接器中的协议(protocol)

c# - 如何使 LINQ 执行 (SQL) LIKE 范围搜索

c# - 即使我在退出菜单时调用了 Cursor.Visible 函数,退出暂停菜单时我的光标仍然可见

android - 从 android app 绕过 ssl 证书好/推荐吗?如果证书每年都在生产中更改

jenkins - 在 Jenkins 工作中通过 FTP 下载文件?

algorithm - 在FTP中实现mktree最快的方法

PHP:ftp_connect - 获取任何错误详细信息