如何使用ASP.NET Core和Nginx强制实施SSL

特拉维斯船夫

我启动了一个运行Ubuntu 16.04的新VM并运行了命令。dotnet new -t web这将创建一个新的基本MVC Web模板。接下来,我运行了该应用程序,连接成功。

之后,我修改了nginx.conf以使用SSL

server {
    listen                      443 http2 ssl default;

    ssl_certificate             /etc/ssl/certs/testCert.crt;
    ssl_certificate_key         /etc/ssl/certs/testCert.key;
    ssl_protocols               TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    ssl_ciphers                 "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve              secp384r1;
    ssl_session_cache           shared:SSL:10m;
    ssl_session_tickets         off;
    ssl_stapling                on;
    ssl_stapling_verify         on;

    location / {
        proxy_pass              http://localhost:5000;
        proxy_cache_bypass      $http_upgrade;
        proxy_redirect          off;
        proxy_set_header        Host $host;
        proxy_http_version      1.1;
        proxy_set_header        Upgrade $http_upgrade;
        proxy_set_header        Connection keep-alive;
        client_max_body_size    10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout   90;
        proxy_send_timeout      90;
        proxy_read_timeout      90;
        proxy_buffers           32 4k;

    }
}

再次运行该应用程序,它在HTTPS下运行且没有错误。

然后,我在Startup.cs中配置了MVC服务以实施HTTPS。

services.AddMvc(config =>
{
    config.Filters.Add(new RequireHttpsAttribute());
});

最后,我尝试再次连接但得到ERR_TOO_MANY_REDIRECTS但是,如果我仅在Kestrel上运行并配置一些选项,它将可以正常工作。

services.Configure<KestrelServerOptions>(options =>
{
    options.AddServerHeader = false;
    options.UseHttps("devcert.pfx", "password");
});

似乎必须是nginx,但是MVC / ASP.NET Core可能存在问题。如何进一步诊断或解决此问题?

德米特里

您的SSL连接以nginx终止,它以纯HTTP与Kestrel通信。Kestrel将用户重定向到https,https再次终止于nginx,一次又一次地传递给Kestrel。那是无尽的循环。

将nginx配置为要求使用https(将http重定向到https),请勿触摸Kestrel。您的网站本身始终可以在没有SSL的情况下正常工作,nginx会使用SSL将其交付给用户(和向用户提供)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章