Цепочка сертификатов была выпущена не доверенным органом - PullRequest
0 голосов
/ 09 июня 2018

Я изучил справку по обновлению до aspnetcore 2.1.0

Моя база данных SQLExpress 2016SP1

Я могу добавить миграцию, но когда я выдаю

update-database

на консоли диспетчера пакетов я получаю сообщение об ошибке

Соединение с сервером успешно установлено, но во время входа в систему произошла ошибка.
(провайдер: поставщик SSL, ошибка: 0 - цепочка сертификатов была выдана ненадежным органом.)

Строка подключения имеет вид

   Server="Server=myserver;Initial Catalog=mydatabase;Trusted_Connection=True;MultipleActiveResultSets=true

The DbContext is

public class ApiDbContext : IdentityDbContext<ApplicationUser>
{
    public ApiDbContext(DbContextOptions<ApiDbContext> options)
        : base(options)
    {
    }
}

Фабрика контекста:

public class MyContextFactory : IDesignTimeDbContextFactory<ApiDbContext>
{
    public ApiDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<ApiDbContext>();
        var builder = new ConfigurationBuilder();
        builder.AddJsonFile("appsettings.json");
        var config = builder.Build();
        var connectionString = config.GetConnectionString("MyDatabase");
        optionsBuilder.UseSqlServer(connectionString);
        return new ApiDbContext(optionsBuilder.Options);
    }
}

[Update]

Если я жестко закодирую строку подключения внутри реализации IDesignTimeDbContextFactory, то могу запуститьмиграции

public class MyContextFactory : IDesignTimeDbContextFactory<ApiDbContext>
{
    public ApiDbContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<ApiDbContext>();
        var connectionString =    "Server=myserver;Initial Catalog=mydatabase;Trusted_Connection=True;MultipleActiveResultSets=true";
        optionsBuilder.UseSqlServer(connectionString);
        return new ApiDbContext(optionsBuilder.Options);
    }
}

Жесткое кодирование строки подключения нежелательно, поэтому я хотел бы получить лучший ответ.

Мне неясно, зачем нужна реализация IDesignTimeDbContextFactory.(моя миграция завершается неудачно без нее)

Я обновил мои Startup.cs и Progam.cs, чтобы они соответствовали недавно созданной программе, где реализация не нужна.

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<ApiDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("MyDatabase")));
        services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<ApiDbContext>();

services. .AddMvc () SetCompatibilityVersion (CompatibilityVersion.Version_2_1);}

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();

        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseAuthentication();
        app.UseMvc();
    }
}

[Update]

Я обновился до VS2017 версии 15.7.3.Когда я решил повторить проблему и создать первую миграцию, PM отобразил сообщение

The configuration file 'appsettings.json' was not found and is not optional

Когда я всегда отмечал эту копию файла, тогда работали и add-миграция, и update-database.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Настройка «TrustServerCertificate = True» и использование проверки подлинности Windows решили эту проблему для меня.

0 голосов
/ 11 июня 2018

Попробуйте добавить TrustServerCertificate=True к строке подключения согласно Это сообщение StackOverflow

...