HttpWebRequest 似乎没有发送客户端 SSL 证书

2024-01-16

我正在尝试使用HttpWebRequest查询运行 nginx 的远程服务器。我需要提供客户端证书才能完成连接。

我正在执行以下操作:

Dim Request As HttpWebRequest = DirectCast(WebRequest.Create(Url), HttpWebRequest)
Dim Cert = SSL.GetClientCertificate()
Request.ClientCertificates.Clear()
Request.ClientCertificates.Add(Cert)
Dim Response As WebResponse = Request.GetResponse()

(SSL.GetClientCertificate只是一个打开的辅助方法My存储在本地计算机上并检索适当的证书(作为X509Certificate2)。正在返回正确的证书。我也尝试过从具有相同结果的文件中加载证书。)

就目前情况而言,当我到达Dim Response As...它实际上尝试打开连接,我收到返回的 400 Bad Request,其正文如下:

400 Bad Request
No required SSL certificate was sent
-----------------------------------
nginx/1.0.10

我们使用我们自己的 CA,该 CA 的证书位于LocalMachine\TrustedRootCertificationAuthorities在我的机器上。客户端证书有效,但验证失败,因为我们的 CA 未公开OCSP http://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol端点。如果我创建一个 X509Chain 并要求它验证链而不检查吊销,那么一切都会通过。

所以我的问题是...为什么证书不随请求一起发送?我不认为它应该在发送客户端证书之前尝试验证客户端证书(这是服务器的工作)。

我不会在 Wireshark 日志中淹没您,但客户端不会发送证书。简而言之,我得到...

  • [出]客户您好
  • [在]服务器你好
  • [在]证书
  • [在]服务器你好完成
  • [Out] 证书、客户端密钥交换、更改密码规范、加密握手消息
  • [在]更改密码规范,加密握手消息
  • [Out] 应用程序数据(大概是 GET 请求)
  • [In] 应用程序数据(大概是 400)
  • [输入] 加密警报(终止通道)

I thinknginx 正在做一些聪明的事情,当我无法发送证书时,它不会死掉,而是重新协商以允许它发送 400 响应正文(而不是一开始就无法创建通道)

无论如何,我不会发送真正的问题证书。有谁知道为什么?

如果有帮助的话,nginx 的日志坚持认为没有发送证书(而不是证书无效):

2012/11/22 14:16:26 [info] 27755#0: *799 客户端在读取客户端请求标头时未发送所需的 SSL 证书,客户端:10.0.0.200,服务器:10.0.0.100,请求:“GET /state HTTP /1.1”,主机:“10.0.0.100”

请不要使用下面的代码 - 它效率低下、不可靠并且仅用于测试

回复:获取证书:

Public Shared Function GetClientCertificate() As X509Certificate2
    Dim Store As New X509Store(StoreName.My, StoreLocation.LocalMachine)
    Dim Ret As X509Certificate2 = Nothing

    Try
        Store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)
        For Each Certificate In Store.Certificates
            If Certificate.SubjectName.Name = "The subjectname of our certificate" Then
                Ret = Certificate
                Exit For
            End If
        Next
    Finally
        Store.Close()
    End Try
    Return Ret
End Function

您需要一个具有可访问私钥的证书,以便能够将其用作客户端(或服务器)证书。

只要您授予需要使用证书的任何用户对其私钥的访问权限,就可以将证书存储在计算机证书存储中。您无法使用 .cer 对客户端进行身份验证,因为它仅包含公钥。您可以通过为用户安装客户端证书并使用浏览器访问 URL 来测试所有内容。如果您收到一个弹出窗口来选择证书,则表明它已正确安装(对于该用户)。

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

HttpWebRequest 似乎没有发送客户端 SSL 证书 的相关文章

  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • 为什么当要求修剪“PRN.NUL”时,TrimStart 会更多地修剪字符?

    这是代码 namespace TrimTest class Program static void Main string args string ToTrim PRN NUL Console WriteLine ToTrim string
  • 如何等待远程 .NET 调试器连接

    今天我遇到了一个问题 我需要远程调试程序 该程序是从另一个系统启动的 所以我真的没有机会在命令行上与它交互 不过我可以很容易地改变它的来源 我需要做的是让程序正常启动 然后等待我用调试器附加到它 我想不出一个让我快乐的方法 我确实发现了这个
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • 时间跨度格式[重复]

    这个问题在这里已经有答案了 当您将时间跨度声明为以下形式时 如何优雅地格式化时间跨度以表示 1 小时 10 分钟 TimeSpan t new TimeSpan 0 70 0 我当然知道你可以为此做一些简单的数学计算 但我有点希望 NET
  • 当操作系统显示语言为非英语时获取本地时区标识符

    奇怪的是 TimeZone CurrentTimeZone StandardName根据计算机显示语言返回本地化名称 我想要一个可以提供给的程序化标识符TimeZoneInfo在下面的代码中 TimeZoneInfo timeZoneInf
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 比较已编译的 .NET 程序集?

    有没有什么好的程序可以与编译 NET 程序集进行比较 例如 我有 HelloWorld dll 1 0 0 0 和 HelloWorld dll 2 0 0 0 我想比较差异 我该怎么做 我知道我可以使用 NET Reflector 并使用
  • 如何有效确保小数值至少有 N 位小数

    我想在进行算术运算之前有效地确保十进制值至少有 N 个位置 在下面的示例中 3 显然我可以格式化 0 000 然后解析 但它的效率相对较低 我正在寻找一种避免与字符串转换的解决方案 我尝试过以下解决方案 decimal d 1 23M d
  • 如何消除字符串中的所有换行符?

    我需要删除字符串中出现的所有换行符 来自数据库 我使用下面的代码来做到这一点 value Replace r n Replace n Replace r 我可以看到至少有一个角色的行为就像行尾一样幸存了下来 字符代码是8232 http w
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • WordPress 3.0 .htaccess 到 nginx 重写规则的转换

    RewriteEngine On RewriteBase BASE uploaded files RewriteRule files index php L RewriteCond REQUEST URI wp content plugin
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 使用 VB/ASP classic 可以向 API 发出 HTTP 请求吗?

    是否可以使用 ASP classic 向 Web API 发出请求 例如 像 Flickr API 这样简单的东西 或者这种东西很久以前就不支持了 这是很有可能的 Dim req Set req Server CreateObject MS
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 并行过程的最佳种子

    我需要在不同的机器上并行运行蒙特卡洛模拟 代码是用 C 编写的 但程序是使用 python 脚本设置和启动的 该脚本设置了很多东西 特别是随机种子 函数 setseed 获取一个 4 字节无符号整数 使用一个简单的 import time
  • 如何在渲染前获取textview的行数?

    如何获取字符串在 a 中占用的行数TextView在渲染之前 A ViewTreeObserver不起作用 因为它们仅在渲染后才会被触发 当将整个单词放在下一行以避免破坏单词时 接受的答案不起作用 hello world 100 确定行数的
  • Google Play 商店正在向用户提供额外积分? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们正在使用服务器端验证来验证 Play 商店中的应用内订阅 谷歌针对其中一个请求返回了这样的响应 kind androidpublisher sub
  • 处理大量rtsp摄像头,无实时限制

    问题定义 假设我有大量 rtsp 摄像机 gt 100 我想对其执行一些操作 例如图像特征提取 重要提示 我对实时性能不感兴趣 我什至可以在一分钟内进行 4 次特征提取 显然 越多越好 As now 瓶颈是图像采集 帧是通过以下方式获取的c
  • iOS WebView远程html与本地图像文件

    以前也有人问过类似的问题 但我一直找不到解决方案 这是我的情况 我的 UIWebView 加载远程 html 页面 网页中使用的图像在构建时是已知的 为了使页面加载速度更快 我想将iOS应用程序中的图像文件打包并在运行时替换它们 请注意 h
  • 如何修复错误:(psycopg2.errors.NotNullViolation)“id”列中的空值违反非空约束?

    为什么会出现下面的错误 我知道db session add 方法但是我想使用原始 SQL 来学习 UUID 不应该自动生成吗 也许我在 postgresql 文本中遗漏了一些内容或者模型中的 id 不正确 error Error psyco
  • 如何配置概率占用地图人员检测器

    概率占用图是一种多摄像头人体检测程序 其c 免费实施可在以下位置获取 http cvlab epfl ch software pom http cvlab epfl ch software pom 为了利用这个方便的软件 需要 经过背景去除
  • 如何比较两个文件的创建日期?

    使用 XP 的批处理 如何使用返回 true 或 false 的函数 isMoreRecentThan pathToFile1 pathToFile2 来比较两个文件的创建日期 该解决方案应在没有管理员权限的情况下运行 特别是不应使用 wm
  • 将 Array Of String 转换为 Double,然后在 Swift 中计算总和

    我有一个字符串数组 我想将其转换为双精度 然后我想将数组中的每个项目加在一起并得到总和 到目前为止 这是我的代码 枚举数组后 我在将它们全部添加在一起时遇到问题 update Xcode 10 1 Swift 4 2 1 或更高版本 let
  • 为什么事件上的composedPath在延迟时返回不同的值?

    因为简单来说path不存在于MouseEvent or WheelEvent类型 我正在使用替代方案 composedPath方法 直到现在我还无法体验到它们之间的区别 我包裹了我的wheel听众与requestAnimationFrame
  • 使用 Apache2 在 Ubuntu 12.04 上启用 htaccess 错误

    我尝试启用 htaccess 我变了
  • 找出当前选择的是哪个 gtk 小部件

    我有一个收藏GtkEntry小部件 其中一些是可编辑和可聚焦的 而另一些则不是 我想找出其中哪些 如果有 当前选择了文本 以便实现 编辑 gt 复制 菜单项 除了迭代所有小部件直到gtk editable get selection bou
  • 删除 iOS Swift 发布版本的 println()

    我想全局忽略所有println 如果我不在调试版本中 则调用我的 Swift 代码 我找不到任何可靠的分步说明 希望得到指导 有没有办法在全球范围内做到这一点 或者我需要包围每个println with IF DEBUG ENDIF声明 最
  • 为什么二进制序列化比 xml 序列化更快?

    为什么二进制序列化比 xml 序列化更快 考虑序列化双精度 例如 二进制序列化 将内存地址中的 8 个字节写入流中 二进制反序列化 读取相同的8个字节 xml 序列化 写入标记 转换为文本 写入结束标记 I O 增加近三倍 CPU 利用率增
  • 使用 localToScene(x,y) 获取节点场景中的位置返回错误值

    我想将弹出的窗格的位置绑定到调用它的按钮的位置 我尝试通过调用来这样做button localToScene button getLayoutX button getLayoutY 然而 返回的 Point2D 变量中的 X 坐标错误 我在
  • 如何在scala中返回一个函数

    How can I return a function side effecting lexical closure https stackoverflow com questions 22288329 side effecting lex
  • 空文本框上的 JQuery 默认文本

    我有一个电子邮件表单文本框 虽然它是空的 但我希望它具有值 电子邮件 当您单击它时 文本就会消失 如果有人点击它但没有输入文本 关于模糊 我希望它恢复为默认文本 我一直在尝试一些事情 但没有任何效果 有人可以指出我正确的方向吗 或者你可以只
  • Linux中如何从另一个终端访问一个终端上运行的进程?

    我想知道该过程 以便我可以从终端访问或控制 Linux 中其他终端上运行的进程 两个终端属于同一系统 也许你想要类似的东西reptyr https github com nelhage reptyr https github com nel
  • GoCQL:将字符串编组到时间戳中

    我正在开发一个带有聚类列的时间序列数据模型 即 CREATE TABLE events id text time timestamp type text val double PRIMARY KEY id time WITH CLUSTER
  • HttpWebRequest 似乎没有发送客户端 SSL 证书

    我正在尝试使用HttpWebRequest查询运行 nginx 的远程服务器 我需要提供客户端证书才能完成连接 我正在执行以下操作 Dim Request As HttpWebRequest DirectCast WebRequest Cr