c# - 从站点内检查哪个证书绑定(bind)到 asp.net 站点

标签 c# asp.net iis ssl

我有一个 IIS 托管的 asp.net(mvc/api 等)应用程序,该应用程序在有限的上下文(例如应用程序池标识或类似)下运行。 环回不可用。 如何从应用程序内检查哪个证书绑定(bind)到托管我的应用程序的网站?

例如当管理员在 IIS 中指定 ssl 绑定(bind)时。

最佳答案

使用Microsoft.Web.Administration想到 API,您需要向您的 AppPool 身份授予对 ApplicationHost.config 文件的读取权限。

但是,即使该文件具有您网站的绑定(bind),但没有使用哪个证书的信息,因此 API 没有帮助。

在命令行上您可以执行以下操作:

netsh http show

.

SSL Certificate bindings:
IP:port                      : 0.0.0.0:443
Certificate Hash             : aef3b8daaaabe075555534943c53f8727c32c96ef
Application ID               : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name       : My

要解析输出,您需要知道可以通过 Microsoft.Web.Administration API 获取的绑定(bind)。

证书哈希也是指纹,您可以在 PowerShell 中获取更多信息:

Get-Item Cert:\LocalMachine\My\aef3b8daaaabe075555534943c53f8727c32c96ef| fl *

这两个命令在作为标准用户使用时都可以工作,这可能意味着它们也可以在 AppPool 身份下工作?

我不确定要调用哪些 API 来获取此信息,在最坏的情况下,您可以尝试执行这些命令并解析它们的输出。

拥有每天运行的 PowerShell 脚本会容易得多,并在每个站点中创建一个包含证书信息的文本文件。然后您的代码只需读取该文件。

关于c# - 从站点内检查哪个证书绑定(bind)到 asp.net 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099537/

相关文章:

c# - LINQ - 使用 OrderBy EnumValue 和 Union 结果集对对象列表进行排序?

c# - Ninject InThreadScope 绑定(bind)

asp.net - 为什么 ASP.NET 中的母版页没有 PreInit 事件?

javascript - IE8显示图像,Chrome/Firefox使用BlockUI不显示图像

asp.net - 如何将 token 身份验证添加到我的 IIS 以保护文件夹中的文件?

c# - 查找数字与特定数字集的所有加法组合的算法?

c# - 如果我处置我的 Webclient,我是否需要取消订阅 WebClient 的事件

c# - PredicateBuilder.New 与 PredicateBuilder.True

asp.net - 在 IIS/ASP.Net 的 .NET 1.1 应用程序中创建 .NET 3.0 子应用程序

asp.net - 基于表单的身份验证在 .Net 2.0 和 .Net 4.0 应用程序之间不起作用