You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1控制台应用仅本地报WindowsCryptographicException

问题描述

调试.NET Core 3.1应用时,本地抛出异常:

Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 系统找不到指定的文件

仅本地电脑出现该问题,其他环境正常,程序无证书依赖要求,已尝试管理员权限运行,问题未解决。

异常触发代码:

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;

namespace AppNamespace
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
             Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
                webBuilder
                    .UseStartup<Startup>())
            .ConfigureAppConfiguration((context, builder) =>
                builder
                    .AddEnvironmentVariables()); 
        
    }
}

堆栈跟踪:

在 Internal.Cryptography.Pal.CertificatePal.FromBlobOrFile(Byte[] rawData, String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
   在 System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags)
   在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
   在 Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.LoadCertificate(CertificateConfig certInfo, String endpointName)
   在 Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.LoadDefaultCert(ConfigurationReader configReader)
   在 Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load()
   在 Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.ValidateOptions()
   在 Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.<StartAsync>d__21`1.MoveNext()
   在 Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__31.MoveNext()
   在 Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>d__12.MoveNext()
   在 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
   在 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
   在 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   在 Application.Program.Main(String[] args) 位于 C:\Application\Application\Program.cs: 第12行

问题分析

从堆栈信息可以看出,Kestrel服务器启动时会自动尝试加载默认HTTPS开发证书,但本地环境中该证书不存在、路径配置错误或证书损坏,导致触发"找不到文件"的异常。其他电脑可能已正确生成开发证书,或配置了无需HTTPS的运行环境。

解决方案

1. 重新生成并信任本地HTTPS开发证书

打开PowerShell或CMD,执行以下命令清理并重建开发证书:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

执行完成后重启应用,验证问题是否解决。

2. 强制Kestrel使用HTTP端口

在CreateHostBuilder方法中显式指定HTTP端口,跳过HTTPS证书加载逻辑:

public static IHostBuilder CreateHostBuilder(string[] args) =>
     Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
        webBuilder
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5000")); // 添加该行指定HTTP端口
    .ConfigureAppConfiguration((context, builder) =>
        builder
            .AddEnvironmentVariables()); 

3. 检查并清理证书相关配置

查看项目的appsettings.json、appsettings.Development.json或系统环境变量,是否存在Kestrel证书路径配置,例如:

{
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "xxx.pfx",
        "Password": "xxx"
      }
    }
  }
}

如果存在此类配置且本地无对应证书文件,直接删除该配置段。

4. 清理项目缓存并重建

删除项目目录下的bin、obj文件夹,执行以下命令重新构建:

dotnet clean
dotnet restore
dotnet build

内容的提问来源于stack exchange,提问作者CarlosS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:45:29