【问题标题】:Check which certificate is bound to an asp.net site from within site从站点内检查哪个证书绑定到 asp.net 站点
【发布时间】:2015-09-14 23:07:27
【问题描述】:

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

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

【问题讨论】:

  • 由于 IIS 是守护者,除非有我不知道的 API,否则我不确定您是否可以。我认为 ASP.NET 中唯一可能拥有的区域是它可以通过 HttpContext.Server 或 HttpContext.Request.ServerVariables 获得。不知道关键是什么,但您通常可以在网上找到一个列表。

标签: c# asp.net iis ssl


【解决方案1】:

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

但是,即使该文件具有您网站的绑定,也没有使用哪个证书的信息,因此 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 获得的绑定。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2011-09-01
    • 2012-12-01
    • 2012-03-24
    相关资源
    最近更新 更多