场景: 我有一个.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请求都像魅力一样。
我相信这是愚蠢的,我无法理解。我的网络搜索一无所获。
提前致谢。