如何验证自签名认证

2023-12-29

我会清楚地向您提供我的问题,以便您可以回答我

我有一个使用 SslStream 保护的客户端-服务器(套接字)连接,据我所知,使用 ssl 确保我的客户端只会连接到我的服务器

为此,我必须向客户端添加一个函数来验证服务器认证并确保服务器是真实的服务器(我的服务器)

但我真的不明白如何验证我的自签名证书并需要你的帮助

问候,并提前致谢


想象一下,如果证书不是自签名的 - 它是由受信任的证书颁发机构签名的。它起作用的原因是因为您的客户端设备 - Windows、Mac、Linux、iPhone、Android 设备已经拥有所有知名证书颁发机构的证书。当您建立连接时,操作系统会为您完成工作。它确保在连接期间发送到客户端的证书由知名证书颁发机构签名。这样做的唯一原因是客户端已经拥有所有知名证书颁发机构的证书。

如果您选择使用自签名证书 - 或由自签名证书颁发机构签名的证书 - 您必须完成这项工作,而不是操作系统。但是 - 任务基本相同 - 您需要验证在连接期间发送到客户端的证书是否与预期相符。您将需要使用与签名证书相同的策略 - 您的客户端必须预先安装预期的证书(或证书链)。

您需要以某种方式确保您的客户已经拥有自签名证书。具体来说就是证书中的所有公开信息。客户端不会拥有私钥——因为那是……私有的。然后,您可以向应用程序添加代码,验证连接期间发送的证书的哈希值是否与预安装的证书的哈希值匹配。

我注意到你以前问过类似的问题,你可能已经知道这一切了。这里还需要补充一点:

只要您保证自签名证书的私钥绝对安全,任何人都无法伪造您的自签名证书。这是做不到的。如果有人尝试,他们将不得不生成一个与您的不匹配的新私钥 - 因为他们不知道您的私钥,因为您保证了它的安全。

然后一切都崩溃了。如果他们有不同的私钥,他们将需要不同的公钥。这意味着他们将拥有不同的证书哈希。并且您的应用程序已经知道正确的公钥和哈希值(如上所述),因此当他们尝试使用错误的公钥和哈希值进入时,您的应用程序将拒绝连接。这是您必须在应用程序中执行的部分。

如果他们尝试使用您的公钥和哈希但使用不同的私钥,SSL 将不允许他们建立连接。

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

如何验证自签名认证 的相关文章

  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 如何在另一个应用程序中挂钩 api 调用

    我正在尝试挂钩另一个应用程序的 ExtTextOut 和 DrawTextExt GDI 方法调用 我知道我需要使用 GetProcAddress 来查找 gdi32 dll 中那些方法的地址 并用我的函数的地址覆盖我想要挂钩的进程中的地址
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 为什么每次创建新视图模型时不调用视图构造函数?

    我正在将 WPF 与模型 视图 视图模型模式一起使用 我有一个 ResultsView 和 ResultsViewModel 它们的连接方式如下
  • Angular 5:装饰器中不支持函数调用

    我正在从 Angular 应用程序构建 PWA 运行时出现以下错误ng build prod ERROR in app app module ts 108 64 Error during template compile of AppMod
  • 不允许远程表值函数调用

    我怎样才能做到这一点 我正在从远程链接服务器运行表值函数 我尝试在这 4 部分命名中不添加锁定 但仍然遇到相同的错误 我使用 mssql 2008 select from 110 10 10 100 testdbname dbo ufn g
  • 如何将 Micrometer 与 @WebMvcTest 连接起来

    我正在尝试测试 Spring Boot 2 3 Controller通过 Actuator Prometheus 执行指标 WebMvcTest 不幸的是 这在 NPE 中失败了 可能是因为测试中不存在 Micrometer Prometh
  • 如何使用 Visual Studio 2015(企业版)构建 boost 版本 1.58.0

    我喜欢使用 新的 Visual Studio 2015 企业版 构建 boost 1 58 0 过去我是按以下方式进行的 从以下位置下载 boost 1 58 0www boost org http www boost org 提取文件 例
  • HTTPServletRequest.getInputStream() 总是接收空行

    客户端 public List
  • Sproutcore 和 Ember 之间的区别

    在 Ember 从 sproutcore 分叉之前 我就选择了 sproutcore 作为框架 我不确定该走哪条路 而且对碎片化造成的努力明显稀释感到有点沮丧 因为这很少会带来更好的事情 Sproutcore 2 0 现在的 Ember 的
  • NDB:对查询结果进行排序

    在 App Engine NDB 中 我正在查询具有重复属性的实体 我想按表示该属性的数组的长度对结果进行排序 我希望我能做什么 Entity query order len Entity repeatedProp 您需要添加一个ndb I
  • gcloud 命令突然根本不起作用

    All gcloud命令突然给出这个错误 错误 gcloud 加载失败 没有名为 google appengine ext 的模块 这通常表明您的 gcloud 安装或 你的Python解释器有问题 请验证以下是否是有效的 Python 2
  • 如何在 Clojure 中使用 definterface?

    Clojure 1 2 0 似乎有一个definterface形式 显然是为了创建 Java 接口 有些人建议使用它 例如 一个答案这个数字运算问题 https stackoverflow com questions 3124344 clo
  • 当 xsl 本身第一页就足够时避免第二页

    我已经找到了问题的解决方案 要感谢你们所有人 因为如果没有你们及时的解决方案和建议 这是不可能实现和解决的 非常感谢 这个问题的解决方案已经实现 非常感谢 要解决您的问题 请将以下所有内容保留在单个表中并将其添加到表标题中 参考您的 xsl
  • JavaScript 正则表达式捕获小数点的重复部分

    寻找最佳方法来获取具有可能重复的小数部分的任意数字 并发现重复部分 如果存在 最终 我需要用上划线符号 使用 css 文本装饰或 MathML mline 来装饰数字 所以我还需要知道重复开始的索引 所以我需要正则表达式来得到 或者可以在算
  • 无法将有序数据写入 Spark 中的镶木地板

    我正在使用 Apache Spark 生成镶木地板文件 我可以按日期对它们进行分区 没有任何问题 但在内部我似乎无法按正确的顺序排列数据 在处理过程中顺序似乎丢失了 这意味着镶木地板元数据不正确 具体来说 我想确保镶木地板行组反映排序顺序
  • 将回归结果输出到 R 中的数据帧中

    我想知道是否有任何命令可以将 lm 模型的结果输出到 R 中的数据帧中 就像 SAS 中的 outest 一样 有任何想法吗 我正在运行多个模型 我希望结果如下所示 Model alpha Beta Rsquared F df model0
  • 为什么 BigQuery 加载作业统计信息会返回查询信息?

    我们有一些加载作业 可以从 GCS 中获取文件 并将它们加载到 BigQuery 中进行分析 我们使用JobConfigurationLoad class https developers google com resources api
  • Android:将sqlite数据库内容加载到webview

    我有一个sqlite我有一个要加载的内容的数据库webview 如我所愿从数据库中选择并在网页视图中显示 有什么办法可以做到吗 public class TataworatYawmeeh extends Activity WebView w
  • 共享内存与 Go 通道通信

    Go 的口号之一是不要通过共享内存进行通信 相反 通过通信来共享内存 http golang org doc effective go html concurrency 我想知道 Go 是否允许在同一台机器上运行的两个不同的 Go 编译的二
  • Jupyter python3笔记本无法识别pandas

    我正在使用 Jupyter 笔记本并选择了 Python 3 在单元格的第一行我输入 import pandas as pd 我从笔记本中得到的错误是 ImportError 没有名为 pandas 的模块 如何将pandas安装到jupy
  • 使用 matplotlib 设置网络中的动态节点形状

    第一次在这里发帖 请大家多多包涵 我正在尝试在 Networkx 中绘制不同类型的字符网络 并希望为每种类型设置不同的节点形状 例如 我希望角色是圆形 生物是三角形等 我已经尝试了几个小时来解决这个问题并进行了广泛的搜索 但我还没有找到一种
  • 如何验证自签名认证

    我会清楚地向您提供我的问题 以便您可以回答我 我有一个使用 SslStream 保护的客户端 服务器 套接字 连接 据我所知 使用 ssl 确保我的客户端只会连接到我的服务器 为此 我必须向客户端添加一个函数来验证服务器认证并确保服务器是真