具有SSL的Web API允许非安全的GET请求

时间:2018-01-12 19:04:08

标签: c# ssl asp.net-web-api https asp.net-core

场景: 我有一个.NET Core 2.0 Web API应用程序配置为仅使用安全连接。我正在使用邮递员来测试请求。

如果我尝试使用非安全URL(HTTP)进行POST,PUT或DELETE,它将返回状态403(应该是这样)。 但是,它通过HTTP接受GET请求

我真的是一个关于SSL使用的业余爱好者,所以我不知道它是否应该是常见的行为(虽然,在我看来,它没有任何意义)。

Web API中的SSL配置如下所示:

certificate.json:

{
 "certificateSettings": {
    "fileName": "filename.pfx",
    "password": "password"
  }
}

的Program.cs:

public static IWebHost BuildWebHost(string[] args)
    {
        var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddEnvironmentVariables()
        .AddJsonFile("certificate.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"certificate.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true)
        .Build();

        var certificateSettings = config.GetSection("certificateSettings");
        string certificateFileName = certificateSettings.GetValue<string>("filename");
        string certificatePassword = certificateSettings.GetValue<string>("password");

        var certificate = new X509Certificate2(certificateFileName, certificatePassword);

        return WebHost.CreateDefaultBuilder(args)
            .UseKestrel(
                options =>
                {
                    options.AddServerHeader = false;
                    options.Listen(IPAddress.Loopback, 44312, listenOptions =>
                    {
                        listenOptions.UseHttps(certificate);
                    });
                }
            )
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .Build();
    }

Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<MvcOptions>(options =>
        {
            options.Filters.Add(new RequireHttpsAttribute());
        });
        services.AddAntiforgery(
            options =>
            {
                options.Cookie.Name = "_af";
                options.Cookie.HttpOnly = true;
                options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                options.HeaderName = "X-XSRF-TOKEN";
            }
        );

该应用程序托管在IIS 10上。它是一个子应用程序,位于一个网站内,本网站拥有我在端口443中使用的证书。该应用程序的根目录中有该证书的副本(尽管我不知道是否需要这样做。

所有HTTPS请求都像魅力一样。

我相信这是愚蠢的,我无法理解。我的网络搜索一无所获。

提前致谢。

0 个答案:

没有答案