如何在 SslStream.AuthenticateAsClient 方法中使用证书回调?

2023-12-02

当我在 IE 中手动导入证书(工具/Internet 选项/内容/证书)时,我的 C#.NET SSL 连接可以正常工作,但如何通过代码加载证书? 这是我的代码:

TcpClient client = new TcpClient(ConfigManager.SSLSwitchIP, Convert.ToInt32(ConfigManager.SSLSwitchPort));

SslStream sslStream = new SslStream(
                client.GetStream(),
                false,
                new RemoteCertificateValidationCallback(ValidateServerCertificate),
                null
                );
sslStream.AuthenticateAsClient("Test");

如果我在 Internet Explorer 中手动导入证书文件,上面的代码可以正常工作。但是,如果我从 IE 中删除证书并使用以下代码,则会出现身份验证异常:

sslStream.AuthenticateAsClient("Test", GetX509CertificateCollection(), SslProtocols.Default, false);

这是“获取 X509CertificateCollection”方法:

public static X509CertificateCollection GetX509CertificateCollection()
        {
            X509Certificate2 certificate1 = new X509Certificate2("c:\\ssl.txt");
            X509CertificateCollection collection1 = new X509CertificateCollection();
            collection1.Add(certificate1);
            return collection1;
        }

我应该怎么做才能动态加载我的证书?


为了构建 owlstead 的答案,以下是我如何在验证回调中使用单个 CA 证书和自定义链来避开 Microsoft 商店。

I have not弄清楚如何使用这个链(chain2如下)默认情况下,这样就不需要回调。也就是说,将其安装在 ssl 套接字上,连接将“正常工作”。我有not弄清楚如何安装它以便将其传递到回调中。也就是说,我必须为回调的每次调用构建链。我认为这些是 .Net 中的架构缺陷,但我可能会遗漏一些明显的东西。

函数的名称并不重要。以下,VerifyServerCertificate与回调相同RemoteCertificateValidationCallback。您还可以将它用于ServerCertificateValidationCallback in ServicePointManager.

static bool VerifyServerCertificate(object sender, X509Certificate certificate,
    X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    try
    {
        String CA_FILE = "ca-cert.der";
        X509Certificate2 ca = new X509Certificate2(CA_FILE);

        X509Chain chain2 = new X509Chain();
        chain2.ChainPolicy.ExtraStore.Add(ca);

        // Check all properties
        chain2.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;

        // This setup does not have revocation information
        chain2.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;

        // Build the chain
        chain2.Build(new X509Certificate2(certificate));

        // Are there any failures from building the chain?
        if (chain2.ChainStatus.Length == 0)
            return true;

        // If there is a status, verify the status is NoError
        bool result = chain2.ChainStatus[0].Status == X509ChainStatusFlags.NoError;
        Debug.Assert(result == true);

        return result;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }

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

如何在 SslStream.AuthenticateAsClient 方法中使用证书回调? 的相关文章

  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • 为什么 LinkedList 通常比 List 慢?

    我开始在我的一些 C 算法中使用一些 LinkedList 而不是列表 希望能够加快速度 然而 我注意到他们只是感觉更慢 像任何优秀的开发人员一样 我认为我应该尽职调查并验证我的感受 所以我决定对一些简单的循环进行基准测试 我认为用一些随机
  • 当我尝试使用 AVX 功能时,Clang 生成错误

    我使用的是 Windows 10 使用 Clang 版本 5 最近安装 当我编译以下内容时 define AVX define AVX2 include
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • 首先EntityFramework数据库 - 类型映射 - 将binary(8)从SQL映射到C#中的int

    在 SQL 内部 我有一个主键为二进制 8 的表 当我使用该表添加到我的模型中时Update Model from Database我可以看到该列有 type Binary 在 C 中 我将该列设为byte 我可以将该列映射到 int 吗
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • Unity 2.0 和处理 IDisposable 类型(特别是使用 PerThreadLifetimeManager)

    我知道类似的问题被问过好几次 例如 here https stackoverflow com questions 987761 how do you reconcile idisposable and ioc here https stac
  • 向每个收件人发送一封包含不同内容的电子邮件(使用抄送字段)

    在你因为这个问题 毫无意义 和 不可能 而驳回之前 请听我说完 问题 我们在使用我们的系统发送的每封电子邮件中实施跟踪像素 即具有唯一 URL 的可下载 GIF 文件 这有助于我们跟踪电子邮件的打开情况 问题是 当我们抄送一些收件人时 跟踪
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 为什么从绑定返回的对象会忽略额外的参数?

    假设我有一个带有两个参数的函数 void f int x int y 我想绑定其中之一 我可以用std bind如下 auto partiallyBoundF std bind f 10 1 partiallyBoundF仅需要一个参数 但
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • webview 未在 javafx 中打开弹出窗口

    我正在尝试使用 javafx 在 webview 中打开网页 单击超链接时 此网页将打开一个新的弹出窗口 我如何打开新的弹出窗口 当尝试在默认网络浏览器 如 chrome IE 中打开相同的网页时 它们会打开弹出窗口 为了创建弹出窗口 我使
  • PHP:将接口作为参数传递

    在 NET 中 我将接口作为类方法中的参数传递 我想知道PHP可以实现吗 我的场景是我有一个处理 mqin 系统功能的类 现在我想将通知系统与其集成 我想将通知系统分开 因为它不是系统的主要部分 而且我可以在其他地方使用它 如果我有以下结构
  • ORA-00913 值太多

    我有这个查询 INSERT INTO hist museum SELECT from of owner museum al JOIN SELECT vd city data id FROM of owner city data vd WHE
  • 如何在鼠标移动窗口时接收通知?

    I tried setFrame display and windowDidMove 但移动窗口时不会发送它们 如果你想追踪NSWindow现场搬家 默认情况下是不可能的 您必须自己完成 可以在以下情况下收到通知NSWindow开始拖动 移
  • 全屏显示图像

    我正在研究Windows Phone 8 app并在 XAML 中有一个像这样的图像视图
  • Redis 缓存与直接使用内存

    我还没有使用过Redis 但我听说过它并计划尝试使用它来缓存数据 我听说Redis使用内存作为缓存存储数据库 既然我可以使用对象或字典来存储数据 那么 Redis 的意义何在 像这样 var cache key key 使用Redis有什么
  • IE8 和 jQuery 空指针

    我正在构建一个带有一些动画翻转的网站 我在其中对背景图像进行动画处理以提供颜色淡入淡出效果 它在 FF3 Safari chrome 中工作正常 但 IE8 会抛出 未定义为 null 或不是对象 错误 全文 Message undefin
  • CListCtrl 中的垂直滚动条

    我在图标视图中使用 CListCtrl 但它水平滚动 1 3 5 7 gt 2 4 6 8 gt 我宁愿它水平滚动 1 2 3 4 5 6 V V 有没有办法做到这一点 将设计器中的对齐方式从左更改为上
  • Drupal 到 Drupal 迁移

    我正在尝试迁移主机 但在从一个 Drupal 实例迁移到另一个实例时遇到问题 我有一个多站点安装 我正在尝试维护文件 代码以及数据库 我已将 Drupal 实例中的文件从旧服务器传输到新服务器 我已经通过 phpmyadmin 导出了数据库
  • 如何在没有 root 权限的情况下以编程方式截取其他应用程序的屏幕截图,例如 Screenshot UX Trial?

    如何在没有 root 权限的情况下以编程方式截取其他应用程序的屏幕截图 例如 Screenshot UX Trial 我知道我可以在我的应用程序中捕获根视图的位图 但是当我的应用程序在后台运行时 我无法获取其他应用程序的根视图 bitmap
  • 如何在servlet中获取本地文件

    我在本地设置 Tomcat 服务器 并将文本文件放置在 C 盘 c test myfile txt 中 在我的 servlet 中 我指定了文件的确切路径来读取它 我成功地做到了这一点 我的问题是 在部署之前我应该 将 txt 文件放在哪里
  • 采用对数来向量化重复乘法是正确的方法吗?

    I recently wrote an implementation of Naive Bayes to classify examples into one of 5 different groups The number of feat
  • 没有默认构造函数的 C++ 私有变量 - 无法编译?

    我有一个没有默认构造函数的类 obj1 以及也没有默认构造函数的类 obj2 并且具有 obj1 的一个元素作为私有变量 我想要类似下面的代码 但实际上这不能编译 告诉我 obj1 没有默认构造函数 class obj1 obj1 some
  • 从“管理员用户”重新验证用户 x 以删除用户 x

    在其他带有removeUser的Firebase版本中 我们只能使用电子邮件和密码删除用户 在新的 Firebase 版本中 似乎您只能删除与该用户连接的用户 但是当我与管理员用户连接并尝试删除其他用户时 问题就出现了 这是代码 final
  • 您的 Ruby 版本是 1.9.3,但您的 Gemfile 指定为 2.1.0

    当我跑步时 rails server 我得到了错误 加载宝石集时出现一些问题 rvm list rvm rubies ruby 1 9 3 p484 i686 ruby 2 0 0 p353 i686 ruby 2 1 0 i686 gt
  • 如何从 Android 调用 Python 脚本

    Android中可以调用Python脚本吗 我已经有一些 Python 2 7 脚本 我想从 Android 调用它 该脚本创建文件并填充数据 更具体地说 我尝试在手机上执行 Python 脚本 该脚本连接到某个站点 下载数据并执行一些智能
  • 从 api 调用通过服务返回到组件的数据是一个对象,对于 Angular 来说似乎需要是一个数组

    我收到返回的数据 效果很好 工作数据是 data Array 16 不起作用的数据是这样的 data Menu1Items Array 5 gt 0 etc 我正在使用 Angular 5 因此服务返回这样的数据 map response
  • 错误:MacOS 上“全局命名空间中没有名为‘uint8_t’的成员”

    Chriss MacBook Pro 2 build louisduplessis cmake make In file included from Library Developer CommandLineTools usr includ
  • vim 映射

    我正在与 Cygwin Mintty Vim 合作 With
  • 如何在 SslStream.AuthenticateAsClient 方法中使用证书回调?

    当我在 IE 中手动导入证书 工具 Internet 选项 内容 证书 时 我的 C NET SSL 连接可以正常工作 但如何通过代码加载证书 这是我的代码 TcpClient client new TcpClient ConfigMana