在 Windows Web 服务器上使用公共证书运行/配置自托管控制台应用程序(ASP.net core 2.1、Kestrel)时出现问题

2023-11-29

我过去开发过各种使用 https 进行生产的 Web 服务(VB ASP.net Web-API 应用程序)。 我已经使用 http 完成了开发,然后在生产服务器上设置了 https。要在生产服务器上为 https 和证书设置端口,我有:

  1. 在证书存储中导入公共证书 Windows 服务器使用 netsh 配置了 https 的特定端口。 例如:

netsh http 添加 urlacl url=https://+:22224/用户=所有人

  1. 将证书(通过指纹)绑定到端口。例如:

netsh http 添加 sslcert ipport=0.0.0.0:22224 certhash=31cf73308a768100d4d32fe6e77638593e68ab57 appid={a33a711f-c587-44e5-96bc-dca8a7f3fc3c}

  1. 设置应用程序来监听特定端口,我有 在启动时从配置文件读取 url - 例如https://IP:端口并应用了 它到 (vb.net) HttpSelfHostConfiguration()

这工作没有问题,我可以根据需要配置应用程序(例如,在配置文件中为 http 配置一个端口以在 Intranet 服务器上进行测试,在配置文件中为生产环境配置 https 的另一个端口)。

现在,我想对一个做同样的事情ASP.NET核心2.1.6应用程序和它似乎不以同样的方式工作。
公共证书 (comodo) 安装在 Windows Web 服务器的证书存储中。
端口 22224 使用 netsh 配置为 https。
使用 netsh 将证书绑定到端口(使用 netsh http show sslcert ipport=0.0.0.0:22224 显示证书正确
In 程序.cs,我添加要使用 UseUrls 监听的端口:

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>() //;
            .UseUrls(GV.cURL, "http://localhost:5000"); 
    }

其中 GV.curl 包含https://IP:22224在运行时

如果我将应用程序配置为http-端口(例如http://IP:22222).
如果我设置(配置的)https 端口(https://IP:22224),应用程序无法启动并给出错误消息:
无法配置 HTTPS 端点。未指定服务器证书,并且找不到默认的开发者证书。

我在网上发现的信息令人困惑,似乎这个主题是一个“移动目标”(通常在 ASP.NET Core X-X 的基本处理中发生变化)。
我现在的发现:
被剪断的“未指定服务器证书” 错误消息中表示该证书必须在应用程序中配置吗?

我已经发现一个例子使用 .useKestrel 选项在 CreateWebHostBuilder 中指定证书:

.UseKestrel(options =>
        {
            options.Listen(IPAddress.Loopback, 5000);
            options.Listen(IPAddress.Loopback, 5001, listenOptions =>
            {
                listenOptions.UseHttps("certificate.pfx", "topsecret");
            });

注意:就我而言,我必须将 5001 更改为 22224。

问题:

  • 我真的必须配置(已经绑定到端口的)公共吗 证书也在asp.net core 2.1应用程序中?

  • 如果是,最好的方法是什么(上面的例子是一个好方法吗)?


经过多次尝试和错误,我找到了适合我的相关信息。
注:我与ASP.NET核心2.1.6现在(如果您使用旧版本,这可能不适合您......

You 不需要使用 netsh 进行任何配置,但您必须配置证书(包括密码)。
您还不需要更改program.cs...
配置可以完全在appsettings.json(包含在项目根目录中)
所以......在项目中(在我的机器上调试),我使用默认的appsettings.json(使用http):

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

On the intranet服务器,我使用另一个appsettings.json(仍然使用http):

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
,
    "Kestrel": {
      "EndPoints": {
        "Http1": { "Url": "http://localhost:5000" },
        "Http2": { "Url": "http://172.16.1.120:22222" }
        }
      }
    }

这样,应用程序可以通过内网服务器的IP地址在局域网中进行测试,也可以直接在内网服务器(localhost端口5000)上进行测试。

On the internet服务器,我使用另一个 appsettings.json (对于带有 http 的 localhost,对于带有 https 和证书的服务器 IP):

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
,
    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://localhost:5000"
            },
            "HttpsInlineCertFile": {
                "Url": "https://192.168.3.3:22224",
                "Certificate": {
                    "Path": "./certificate.pfx",
                    "Password": "NotReally",
                    "AllowInvalid": "true"
                }
            }
        }
    }
}

这样,应用程序可以直接在内联网服务器上使用 http 进行测试,并通过互联网使用 https 和证书进行测试。

处理:

  • 在服务器上,我有一个应用程序的根目录。
  • 直接在根目录下,我存储了“每台机器”不同文件的副本(包括 appsettings.json)
  • 要发布新版本,我在我的开发计算机上发布,然后将 \publish\ 目录复制到服务器(根目录下)并覆盖存储的文件。
  • 为了获得正确的配置,我创建了一个简单的.cmd,它从我在新发布后运行的子目录 \publish\ 的根目录复制(特定于服务器的)配置文件...

https 和证书的注释:

  • 证书必须存储在 \publish\ 文件夹中。
  • 由于(我的)公共 contoso 证书确实保护了一些域,因此只有在通过域调用应用程序时,https 才能正常工作(否则,会显示“不安全”消息)。
  • 为了能够使用 https 测试应用程序,我在 Windows 和“真正的”防火墙上打开了端口 22224。
  • DNS 指向我们互联网服务器的公共 IP。
    为了进行测试,我使用以下命令调用该应用程序https://www.Domain.xx:22224

而且...它有效...

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

在 Windows Web 服务器上使用公共证书运行/配置自托管控制台应用程序(ASP.net core 2.1、Kestrel)时出现问题 的相关文章

  • ASP.NET Core/MVC 6 ViewModel 中的依赖注入 (DI)

    我使用构造函数注入在控制器中成功使用了 ASP NET 5 MVC 6 DI 我现在有一个场景 我希望我的视图模型在实现 IValidatableObject 时在 Validate 方法中使用服务 ViewModel 中的构造函数注入不起
  • 访问 Asp.Net Core 应用程序中的 Web.config 设置?

    据我所知 asp net core 有一个新的配置系统 非常灵活 非常棒 但我喜欢 net 4 x 中基于 web config 的配置系统 例如 可以在 web config 文件中添加注释 因为它是一个 xml 文件 对我来说 值得坚持
  • HttpHostConnectException:连接被拒绝 Android

    我正在尝试通过 HttpPost 连接并将用户名和密码发送到网站 然后从该网站接收字符串 我过去尝试过各种对我有用的方法 但现在当我发送用户名和密码标识符时 应用程序超时长达 4 分钟 然后抛出以下异常 07 16 16 32 32 897
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • 尽管受信任的根 CA,WCF 错误“X.509 证书链构建失败”

    我收到了中提到的错误这个问题 https stackoverflow com questions 4256520 wcf error the x 509 certificate cn localhost chain building fai
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • ASP.NET Core 应用程序生命周期

    目前是否有关于生命周期的 ASP NET Core 文档 我希望能够在正确的点融入生命周期 它与现有的 ASP NET MVC 5 生命周期相似吗 http www asp azureedge net v 2016 09 01 001 me
  • Squid+iptables:如何允许https通过并绕过Squid?

    今天基本上是从 Squid 和 iptables 开始的 google 是你的朋友 这东西会害死我的 我在 Ubuntu 9 04 服务器上设置了 Squid3 作为透明代理 当我使用代理盒作为我的默认网关等时 它工作得很好 此设置的 ip
  • HttpClient SSLException

    我尝试向 Web 服务发送 https 请求 经过几次成功的尝试后 我开始不断收到此错误 这个错误是什么意思 为什么它第一次发生 javax net ssl SSLException java lang RuntimeException C
  • 通过 SSL 发布 UTF-8 时,HEROKU 上出现“EOFError:已到达文件结尾”

    我在 heroku 上遇到了奇怪的错误 为了重现它 我必须使用请求正文中的任何 UTF 8 字符制作大的 超过几 KB HTTPS POST 这是一个例子 require net https require uri Accutally I
  • GET 数据是否也在 HTTPS 中加密?

    当你拿到时 https crypted google com search q s https encrypted google com search q s Is the s查询已加密 还是只是回应 如果不是 为什么谷歌还要对其公共内容进
  • Maven:无法传输文件 XXX 返回代码为: 501 ,ReasonPhrase:HTTPS 必需

    我在构建 Maven 项目时收到意外的 501 错误代码 该消息显示需要 HTTPS 但我没有更改我的 settings xml 如何检查我的配置是否发生更改 我怎样才能让事情正常运转 其原因解释于Maven 依赖项失败并出现 501 错误
  • 如何使用 QWAC 和 QSealC 配置文件(PSD2 特定属性)创建 eIDAS 证书以进行测试

    我想使用 QWAC 和 QSealC 配置文件创建一个 eIDAS 证书 并具有文档中提到的 PSD2 特定属性 请帮助我 这只是为了测试目的 https docbox etsi org ESI Open Latest Drafts ts
  • 即使从 ca 目录删除 CA 后,starttls 仍成功

    我无法验证我的软件的正确行为 以下是我为验证操作是否正确而执行的步骤 我有使用 openldap 库并对 ldap 服务器执行启动 tls 的示例代码 我第一次设置了 ca cert 目录和 tlx 上下文的全局选项 之后 我对服务器执行了
  • 运行 Fiddler 作为 HTTPS 服务器的反向代理

    我有以下情况 2台主机 一台是客户端 另一台是HTTPS服务器 Client
  • 无法生成 Apple Passbook 签名

    我正在编写一个 shell 脚本 以使用 p12 证书从 manifest json 自动生成 Apple Passbook 签名文件 这是我所做的 openssl pkcs12 passin pass mypass in mycert p
  • 为什么我无法使用 http3/quic 访问 google?

    Chrome已经打开了enable quic开关 但是当我访问google时 它仍然使用http2协议 如何使用浏览器的http3 quic功能 启用快速 https i stack imgur com Bkeg6 png http2协议
  • 我可以使用 443 以外的其他端口进行 HTTPS/SSL 通信吗?

    443 端口通常用于 HTTPS SSL 但这是我们可以选择 HTTPS SSL 通信的唯一选项吗 如果没有 为什么 端口号并不 神奇 您可以使用 1 65535 之间的任何您喜欢的端口 只有2个条件 服务器和客户端都必须 同意 使用相同的
  • ASIHTTPRequest 登录页面

    我尝试制作一个 iPhone 应用程序 可以登录到使用 https 保护用户信息的 Web 应用程序 现在我陷入了登录页面 我不知道通过我的应用程序登录时如何检查用户网站中的真实帐户 即使我输入错误的帐户 我也只收到 200 的回复 这是我

随机推荐

  • 如何动态获取文本框中datagridview列的总和

    我想获得 datagridview 列的总和并将其显示在文本框中 每次输入后 总和应动态更改 为此 我使用文本框的 textChanged 事件 但是当输入内容时 它不会显示任何结果 我想在文本框中动态获取结果 我想避免使用求和按钮 下面是
  • 导出android库项目以供重用,无需源代码

    出于安全原因 我需要导出没有源代码的库项目 不幸的是 库项目中生成的 jar 文件不包含资源 我不能指望这个图书馆的用户能够处理图书馆所需的任何资源 已经有类似的帖子了 但我还没有看到解决方案 以下食谱曾经有效 尽管我最近没有尝试过 步骤
  • Java 进程 - 无法解压缩 zip 文件

    我正在尝试解压缩一些 zip 文件 它大约有 65 兆 代码片段如下 这个方法实际上解压一个文件 public synchronized void execute Path zipFile final ProcessBuilder buil
  • 动态创建匿名类型? [复制]

    这个问题在这里已经有答案了 我想创建一个可以动态设置属性名称的匿名类型 它不必是匿名类型 我想要实现的就是动态设置任何对象属性名称 它可以是 ExpandoObject 但字典对我不起作用 您有什么建议 Only ExpandoObject
  • Python 3.2.2 open('C:\file.txt') 不起作用

    诚然 我是一个新手 但是 我认为 我按照教程所说的进行了操作 对于我安装的版本 但我无法让 Python 读取文件 其他人遇到过长文件名或路径的问题 但我让我的文件名或路径简短而甜蜜 所以我想 文件本身在一行中包含一个单词 print st
  • XSLT 中的词频计数器

    我正在尝试用 XSLT 制作一个词频计数器 我希望它使用停用词 我开始了迈克尔 凯的书 但我很难让停用词发挥作用 此代码适用于任何源 XML 文件
  • 为空数据框创建异常

    我正在接受用户输入来获取特定股票的历史数据 我想处理 2 个可能的错误 第一个是由于错误输入而生成的错误 并且代码生成错误 第二个是如果输入错误但代码被执行并且我得到一个空数据框 while True try us input Enter
  • 获取对 std::thread::_M_start_thread 的未定义引用

    我正在构建一个使用我从源代码构建的第三方库 Box2D MT 的应用程序 链接时 我收到此未定义的引用错误 b2Threading cpp text ZNSt6threadC2IM12b2ThreadPoolFviEJPS1 iEEEOT
  • 滚动 PCA 并绘制主成分的比例方差

    我使用以下代码来执行 PCA PCA lt prcomp Ret1 center TRUE scale TRUE summary PCA 我得到以下结果 Importance of components PC1 PC2 PC3 PC4 St
  • 替换函数内的异步加载

    我正在使用 Javascript 进行替换 我做了这样的事情 var replacedText originalText replace regex function value i return value some additional
  • 如何为具有 SRC、OBJ 和 BIN 子目录的 C 项目创建 Makefile?

    几个月前 我想出了以下通用的Makefile对于学校作业 Generic Makefile Author email protected Date 2010 11 05 Changelog 0 01 first version projec
  • Thymeleaf 嵌套迭代触发 org.thymeleaf.exceptions.TemplateInputException

    我正在尝试迭代对象列表并生成一个div class card deck every 4对象和嵌套div class card 对于每个对象 这是生成异常的代码line 234 UPDATE Note line 234中提到html并拥有由于
  • 如何在使用出站网关上传文件之前检查 aws s3 存储桶是否可用

    在 Spring Boot 应用程序中使用 aws s3 出站适配器 尝试上传 s3 存储桶中的文件 想在上传文件之前检查存储桶是否可用 如果存储桶不可用 则需要抛出错误 对此提出建议
  • 在 javascript (lodash) 中合并部分重复的数组

    我有一个很大的 javascript 数组 其中包含一些人在不同年份购买的汽车 简化后的数组是这样的 const owners name john hasCar true yearBought 2002 name john hasCar t
  • 具有多个已定义的入口点错误

    我有以下代码 namespace WpfApplication2
  • 从异步方法返回多个结果?

    我目前有一个看起来像这样的方法 typedef void MyCallback int status String body void makeRequest String url MyCallback callback async if
  • Dynamic 类型如何工作以及如何使用它?

    我听说与Dynamic以某种方式可以在 Scala 中进行动态类型 但我无法想象它会是什么样子或者它是如何工作的 我发现一个人可以继承特质Dynamic class DynImpl extends Dynamic The API说可以这样使
  • Volley 收到错误响应

    我正在使用齐射发送一些帖子数据 这是我的代码 这是后台服务的一个片段 如果您还需要其他文件 请告诉我 我已经添加了互联网权限 public void onLocationChanged final Location location mCu
  • Google Drive API/SDK 转让所有权

    我试图将特定文件的所有权转移给另一个用户 总代码 foreach Permission permission in RetrievePermissions service file Id if permission Role EnumCla
  • 在 Windows Web 服务器上使用公共证书运行/配置自托管控制台应用程序(ASP.net core 2.1、Kestrel)时出现问题

    我过去开发过各种使用 https 进行生产的 Web 服务 VB ASP net Web API 应用程序 我已经使用 http 完成了开发 然后在生产服务器上设置了 https 要在生产服务器上为 https 和证书设置端口 我有 在证书