如何更改 ASP.NET Core 中本地开发的默认 SSL 证书?

2023-11-21

在 Linux 上运行本地 ASP.NET Core 应用程序时,如何将自己的证书配置为 Kestrel 使用的“默认”证书?

我知道我可以运行dotnet dev-certs https命令生成新的开发证书,但这将生成新的自签名证书。我不想必须信任此证书 - 我已经拥有自己的本地 CA 用于开发,并且希望签署一个证书以供 ASP.NET core 使用。

我还知道您可以在我的应用程序代码中配置 Kestrel 使用的证书(https://devblogs.microsoft.com/aspnet/configuring-https-in-asp-net-core-across- different-platforms/),但我不认为这应该是应用程序的一部分。我个人倾向于在本地使用我自己的 CA 签名证书,并且如果其他开发人员愿意信任自动生成的证书,我不想强​​迫他们管理自己的证书。

我尝试将证书放入创建自签名开发证书的本地“我的”证书存储中(~/.dotnet/corefx/cryptography/x509stores/my/),但它没有被使用 - 当你根本没有证书时,我收到了发生的错误:

暴击:Microsoft.AspNetCore.Server.Kestrel[0] 无法启动 Kestrel。 System.InvalidOperationException:无法配置 HTTPS 端点。未指定服务器证书,默认开发者证书找不到或已过期。

是否可以配置我自己的证书,或者我是否被迫使用 dotnet core 生成的证书?


简短回答:

事实证明,ASP.NET Core 在配置 Kestrel 时会在其使用的默认证书上查找特定扩展。如果要获取证书,则需要设置扩展名“1.3.6.1.4.1.311.84.1.1”,并且该扩展名的原始字节值应 >= 2 (从阅读源代码).

将具有此扩展名(以及其他一些基本扩展名)的证书放入“我的”存储中允许默认使用该证书。

长答案:

(先阅读简短答案)

您不能使用现有的证书。由于 ASP.NET Core 需要对其使用的证书进行特定扩展,因此您需要创建一个要使用的新证书。然而,你还是can只要您正确生成请求,就可以使用由 CA 签名的证书。

假设使用 openssl,您可以在生成证书请求时通过配置文件来实现此目的:

asp_config.conf

[ req ]
default_bits = 2048
distinguished_name = dn
req_extensions = aspnet

[ dn ]
CN = localhost

[ aspnet ]
basicConstraints = critical, CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = critical, serverAuth
subjectAltName = critical, DNS:localhost
1.3.6.1.4.1.311.84.1.1 = DER:02

然后,您可以运行 openssl 命令以使用以下配置生成签名请求:

openssl req -new -config asp_config.conf -keyout local_asp_dev.key -out local_asp_dev.csr -nodes

生成请求后,使用您的 CA 对其进行签名。

openssl x509 -req -in local_asp_dev.csr -CA /path/to/CA.pem -CAkey /path/to/CA.key -CAcreateserial -out local_asp_dev.crt -days 365 -sha256 -extensions aspnet -extfile asp_config.conf

您需要使用以下命令指定要授予证书的扩展-extensions选项。此选项查看引用文件中指定的配置部分。

签名后,您需要将证书打包到 pfx 文件中:

openssl pkcs12 -in local_asp_dev.crt -inkey local_asp_dev.key -export -out local_asp_dev.pfx

打包证书后,只需将其放入“我的”存储中 - ASP.NET 将拾取它并使用它来为您的 HTTPS 端点提供服务。 (您可能需要删除在此商店中自动创建的任何其他开发证书)。

mv local_asp_dev.pfx ~/.dotnet/corefx/cryptography/x509stores/my/

请注意,该存储在 Linux 上的位置被视为内部实现细节,并且可能会发生变化。 ASP.NET core 的未来版本也完全有可能需要不同的扩展值。

该解决方案是针对 ASP.NET Core 3.1 开发和测试的

附加参考资料:

  • “我的”商店:https://learn.microsoft.com/en-us/dotnet/standard/security/cross-platform-cryptography#the-my-store
  • openssl 配置:https://www.openssl.org/docs/manmaster/man5/x509v3_config.html
  • 与 CA 签名时授予扩展:https://access.redhat.com/solutions/28965
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 ASP.NET Core 中本地开发的默认 SSL 证书? 的相关文章

  • 我们需要依赖注入的接口吗?

    我有一个 ASP NET Core 应用程序 该应用程序有一些帮助程序类可以完成一些工作 每个类都有不同的签名方法 我在网上看到很多 net core 示例 它们为每个类创建接口 然后向 DI 框架注册类型 例如 public interf
  • 使用您正在散列的内容的散列作为盐?

    假设用户注册了您的网站 您对他们选择的密码进行哈希处理 然后使用该哈希值作为盐 并使用该盐重新哈希其密码 Example String hash1 MD5 password String endHash MD5 hash1 password
  • 证书中的主机名不匹配:<>!=<> WSO2 APIM

    我有一个 https 端点 我需要从 wso2 API 管理器访问它 使用 1 10 我已经将证书文件添加到 client truststore jks 文件中 但现在它给出了如下错误 hostname in certificate did
  • 在 ASP.NET Core 的中间件中注入服务

    我想根据 HTTP 标头值注入服务 所以我有 2 个类 DbDataProvider 和 InMemDataProvider 它们都是从 IDataProvider 实现的 每当进行 API 调用时 客户端都会传递一个标头 该标头确定是需要
  • TestContext.DataRow["MyColumnName"] 的替代品是什么

    在 Net Core 单元测试项目中使用 MSTest 我正在尝试使用 csv 数据源来提供测试方法的数据 以前 我会在 Net Framework 测试项目中使用如下所示的内容 DataSource Microsoft VisualStu
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • 在 Razor Pages 中使用 @functions 块的错误和警告

    因为 helperASP NET Core Razor Pages 不再支持指令 我一直在使用 functions指令代替 functions void RenderTask Models Task task tr td class p c
  • set-key-partition-list codesign 后仍提示密钥访问

    我正在导入一个PEM使用以下命令包含我的代码签名身份的公钥和私钥的文件 security import PEM FILE k Library Keychains login keychain T usr bin codesign T usr
  • 在project.json .Net Core中本地管理nuget

    我不想依赖 nuget 服务来下载依赖项 我想在我的 Net Core 应用程序中本地下载并使用 nuget 包 是否可以 方法与之前相同 打开您的NuGet config https docs nuget org consume nuge
  • .NET 实体框架核心

    我已经阅读了过去两年中发布的几乎所有有关 EF 的其他问题 我下载其他软件包没有任何问题 只是实体框架不会为我安装 我什至尝试安装最新版本的 Nuget 并在我的项目目录中使用它的工具来恢复包 之后 我将这一行添加到我的 csproj 中
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • 遭受xss攻击后如何恢复站点?

    最近我正在研究XSS攻击以及它们对网站的破坏性有多大 让我惊讶的是 网络 even SO 充满了关于如何防止xss攻击但没有相关资源说明如何在网站受到 xss 攻击后恢复网站 我遇到过一些事情 比如 将备份网站代码上传回服务器 下载整个网站
  • 将 Microsoft.NETCore.App 更新到 v1.1.0 会导致 -2147450749 (0x80008083)

    我按照以下说明在 Visual Studio 2015 中创建了一个新的 NET Core 项目 https www microsoft com net core windowsvs2015 https www microsoft com
  • .NET core BackgroundService 不会作为守护进程正常关闭

    我正在开发 NET Core 3 1 后台服务 将其作为守护进程安装在 Debian AWS EC2 实例上 正常关闭守护进程以停止正在运行的任务并完成许多要处理的任务 发送一些事件等 非常重要 基本实现如下所示 using Microso
  • UseOpenIdConnectAuthentication - 无法取消对消息的保护。状态错误消息

    我正在尝试将 Google 和 Azure Active Directory 权限添加为我的应用程序中的 OpenIdConnect 选项 如果我单独添加它们 它就可以正常工作 但如果我将它们都添加 我会收到以下错误消息 无法取消对消息的保
  • 如何在 ASP.NET Core Web API 中传递 int 数组

    我有这个 Web API 方法 Route api controller ApiController public class SubjectsController ControllerBase HttpGet children publi
  • 如何在 Web 表单中进行 Html.Encode

    我有一个 ASP NET Web 窗体应用程序 有一个带有文本框的页面 用户在其中输入搜索词用于查询数据库 我知道我需要防止 JavaScript 注入攻击 我该怎么做呢 在 MVC 中我会使用Html Encode Web 表单中似乎无法
  • 如何检查 ASP.NET Core RC2/1.0 Razor 视图的编译错误?

    Razor 视图预编译已从 RC2 中删除 https github com aspnet Mvc issues 3917 due to 让它在 NET Core 中工作的问题 https github com aspnet Mvc iss
  • ASP.NET Core 基于自定义策略的授权 - 不清楚

    好的 ASP NET Core 中基于自定义策略的授权 我有点理解这个新身份框架的想法 但仍然不是 100 清楚你可以用它实现什么 假设我们在 HomeController 中有一个名为 List 的 Action 此操作将查询并显示数据库

随机推荐

  • 如何正确编辑阿拉伯字符串?

  • 浏览器控制台中的变量 [[FunctionLocation]]、[[Scopes]]: 是什么

    使用 jQuery Ajax 时 在浏览器控制台中 我可以看到 xhr 对象有两个 props 字段 采用一些奇怪的符号 双方括号 在这种情况下不认为它意味着数组 首先 它们到底是什么 其次 我可以从 JavaScript 代码访问这些值吗
  • Pandas:np.where 在数据帧上具有多个条件

    大家好 我查遍了SO和谷歌 但找不到任何类似的东西 我有一个数据框 x 基本上由一行和 300 列组成 和另一个大小相同但数据不同的数据框 y 我想修改 x 如果它与 y 有不同的符号并且 x 本身不为 0 则它为 0 否则保持原样 所以这
  • 自定义 RESTful 资源的 url_for(复合键;不仅仅是 id)

    给定以下资源定义 map resources posts except gt show map post year month slug controller gt posts action gt show 我会做url for为我工作 使
  • 打印列表的所有可能的子集

    我有一个元素列表 1 2 3 我需要获取该列表的超集 幂集 不重复元素 所以基本上我需要创建一个列表列表 如下所示 1 2 3 1 2 1 3 2 3 1 2 3 实现此目的的最佳方法是什么 在这种情况下简单 gt 效率 列表不会很大 最好
  • CMake交叉编译生成无效的链接器选项

    我使用 CMake 使用特定的工具链 nios2 linux gnu g exe Sourcery CodeBench Lite 2013 05 43 4 7 3 在 Linux 和 Windows 中进行编译 从 CMake 生成到链接器
  • numpy 数据类型中的 |、> 和 <

    这可能是一个非常愚蠢的问题 但我尝试用谷歌搜索关键字 例如less and greater signs in data type of numpy并没有找到参考 In the doc of numpy x np array 1 0 2 3
  • .NET DropDownList SelectedIndexChange 事件在 IE 10 中未触发

    在 IE 10 中 当下拉列表所选项目发生更改时 不会发生任何情况 它不会回发 除下拉列表外 所有其他控件均有效 当我切换到 IE 10 兼容模式时 它似乎可以工作 斯科特 汉塞尔曼 Scott Hanselman 在他的博客上解释了这一点
  • 更改打印机默认纸张尺寸

    我在打印机上定义了几种自定义纸张尺寸 打印机设置为默认值 我需要能够选择其中一种格式作为默认格式 编程 C 解决方案是理想的 但命令行解决方案也可以 现在 我可以获得打印机上定义的纸张尺寸 名称 尺寸 列表 并且可以找出哪一个是默认的 为了
  • HTA 的;使用其他浏览器托管?

    如果微软使用 IE 作为 HTA 本地主机的方法 那么我可以使用任何其他浏览器吗 你不能 有一个类似的 Mozilla 项目名为XUL跑者 但 HTA 仅适用于 Internet Explorer 这两种技术不兼容 为了澄清这一点 HTA可
  • Stream.Dispose 是否总是调用 Stream.Close (和 Stream.Flush)

    如果我有以下情况 StreamWriter MySW null try Stream MyStream new FileStream asdf txt MySW new StreamWriter MyStream MySW Write bl
  • 如何使用 Spark 创建用于文本分类的 TF-IDF?

    我有一个格式如下的 CSV 文件 product id1 product title1 product id2 product title2 product id3 product title3 product id4 product ti
  • -fopenmp 提供什么预处理器定义?

    我有一些可以使用 或不使用 OpenMP 运行的代码 这取决于用户如何设置 makefile 如果他们想使用 OpenMP 运行 那么他们只需添加 fopenmp to CFLAGS and CXXFLAGS 我正在尝试确定可以使用什么预处
  • 统计:Python 中的组合

    我需要在 Python 中计算组合 nCr 但找不到执行此操作的函数math numpy or stat图书馆 类似以下类型的函数 comb calculate combinations n r 我需要可能的组合数量 而不是实际的组合 所以
  • 让 gprof 根据挂钟时间进行分析?

    我的理解是 默认情况下 gprof 会考虑 CPU 时间 有没有办法让它根据挂钟时间进行分析 我的程序执行大量磁盘 I O 因此它使用的 CPU 时间仅代表实际执行时间的一小部分 我需要知道磁盘 I O 的哪些部分占用最多时间 您可以使用以
  • 如何访问 R v3 中的 Windows COM 对象?

    前段时间 您曾经可以安装rcom在 R 中打包以使用 COM 脚本 例如 访问外部程序 不幸的是 它似乎已停产 包 rcom 已从 CRAN 存储库中删除 以前可用的版本可以从存档中获取 这取决于 statconnDCOM 它现在限制使用
  • C++ 中的 RESTful 客户端 API

    是否有任何可用的开源库可以在 C 中实现 RESTful Client 用于将 HTTP 请求解释为 REST 服务调用的库 我的要求是连接到 Amazon Web Services 并获取 C 中给定用户帐户可用的 EC2 实例列表 及其
  • 在Scheme中捕获宏

    使用定义捕获宏的最简单方法是什么define syntax or define syntax rule在球拍 作为一个具体的例子 这是一个简单的例子aif在 CL 风格的宏系统中 defmacro aif test if true opti
  • Chrome - 多个请求

    每当我使用 chrome 向我的 web 应用程序发送 GET 请求时 根据我的 apache 访问日志 两个相同的请求 并非总是如此 但大多数时候 我无法重现它 它不是针对 favicon 发送到服务器 尽管 chrome 开发工具中只显
  • 如何更改 ASP.NET Core 中本地开发的默认 SSL 证书?

    在 Linux 上运行本地 ASP NET Core 应用程序时 如何将自己的证书配置为 Kestrel 使用的 默认 证书 我知道我可以运行dotnet dev certs https命令生成新的开发证书 但这将生成新的自签名证书 我不想