gpt4 book ai didi

c# - 如何验证证书?

转载 作者:太空狗 更新时间:2023-10-29 22:59:14 25 4
gpt4 key购买 nike

我刚刚开始一个项目,我需要使用 FTPS 连接到第 3 方服务器。他们将向我们提供他们的证书我还没有,所以我要创建我们自己的开发环境以开始。我使用 Alex FTPS 客户端作为起点 ( http://ftps.codeplex.com/ )...但我也愿意使用 WinSCP 作为不同的客户端。

我的以下问题是 - 如何在 .Net 中验证证书?

到目前为止完成的步骤

  1. 安装并配置 FileZilla Server

  2. 使用 FileZilla 创建了一个自签名证书

3。在 Alex FTPS 客户端中,他们有一个带有此签名的回调

private static bool ValidateTestServerCertificate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
// what goes here?
}

我的(各种问题)是:

  1. 方法中应该包含什么?

  2. 我对证书的了解有限。 FileZilla 自生成的证书甚至是 X509 证书吗?我必须承认,我不知道不同类型的证书格式。

  3. 我要写什么类型的代码?当我在 WCF 或 HTTP 中使用 SSL 时,已经为我处理了很多管道。 FTPS 不是这样吗?即,我会在 Windows 中使用 MMC 管理单元控制台导入或安装证书。

  4. 如果我不在 Alex FTPS 中实现回调方法,我会收到消息:“根据验证程序,远程证书无效”

感谢您的任何提示和指示

最佳答案

哎呀,没有答案...所以我会回答我自己的问题,这可能对其他人有帮助。这是我的步骤,不确定是否每个人都需要,但这就是我最终做的。

1) 安装 FileZilla 服务器

  • 用它来创建自己的自签名证书
  • 菜单:设置 | SSL/TSL 设置 |生成新证书
  • 输入适当的值
  • 确保我的通用名称 = 服务器地址正确。
  • 这在 .crt 中生成了一个带有私钥的证书扩展名/格式

2) 由于我是在 Windows 上,我发现我无法在证书存储中安装此证书,所以额外的步骤是我需要先转换它

3) 启动 windows MMC 管理单元控制台

  • 将证书安装到计算机帐户,受信任的根证书颁发机构商店

4) 在我的代码中(在 FTPS 库中,在本例中为 Alex FTPS我的连接如下所示:

var credential = new NetworkCredential(username, password);
string message = _client.Connect(hostname, port, credential,
ESSLSupportMode.Implicit,
null, // new RemoteCertificateValidationCallback(ValidateTestServerCertificate),
null, 0, 0, 0, null);

.net/Windows 基础架构管道已经为我处理了所有验证

5) 但是如果您想要自定义验证,或者如果您不想在 Windows 商店中安装证书,您可以在此处使用此示例代码: http://msdn.microsoft.com/en-us/library/office/dd633677%28v=exchg.80%29.aspx

private static bool ValidateTestServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// If the certificate is a valid, signed certificate, return true.
if (sslPolicyErrors == System.Net.Security.SslPolicyErrors.None)
{
return true;
}

// If there are errors in the certificate chain, look at each error to determine the cause.
if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0)
{
if (chain != null && chain.ChainStatus != null)
{
foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus)
{
if ((certificate.Subject == certificate.Issuer) &&
(status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot))
{
// Self-signed certificates with an untrusted root are valid.
continue;
}
else
{
if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError)
{
// If there are any other errors in the certificate chain, the certificate is invalid,
// so the method returns false.
return false;
}
}
}
}

// When processing reaches this line, the only errors in the certificate chain are
// untrusted root errors for self-signed certificates. These certificates are valid
// for default Exchange server installations, so return true.
return true;
}
else
{
// In all other cases, return false.
return false;
}
}

希望对大家有所帮助。

关于c# - 如何验证证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076184/

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