Net Core 2.2 с Letsencrypt на CentOS 7 - PullRequest
       11

Net Core 2.2 с Letsencrypt на CentOS 7

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

Я пытаюсь использовать сертификат letsencrypt в моем asp.net core 2.2, сертификат letsencrypt уже установлен и работает правильно (проверено SSL Labs)

== выброшенное исключение ==

[FTL] Unable to start Kestrel. Interop+Crypto+OpenSslCryptographicException: error:2006D002:BIO routines:BIO_new_file:system lib at Interop.Crypto.CheckValidOpenSslHandle(SafeHandle handle) at Internal.Cryptography.Pal.CertificatePal.FromFile(String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags) at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(String fileName, String password, X509KeyStorageFlags keyStorageFlags) at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password) at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.LoadCertificate(CertificateConfig certInfo, String endpointName) at Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load() at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.ValidateOptions() at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)

my appsettings.json

...
,
  "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://localhost:5000"
      },
      "HttpsInlineCertFile": {
        "Url": "https://localhost:5001",
        "Certificate": {
          "Path": "/etc/myletsencrypt/cert.pfx"  // ==> this is converted from .pem to pfx
        }
      }
    }
  }

== program.cs ==

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)

        .UseStartup<Startup>()   
        .UseUrls("http://0.0.0.0:5000","https://0.0.0.0:5001");

== startup.cs ==

public void Configure (приложение IApplicationBuilder, IHostingEnvironment env, ILoggerFactory loggerFactory) {loggerFactory.AddSerilog ();

        // linux setting
        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });

        app.UseAuthentication();
        app.UseHttpsRedirection();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{api}/{controller}/{action}");
        });

}

}

что я пропустил?кто-нибудь сталкивался с этим?

нужно посоветовать

заранее большое спасибо Дон

1 Ответ

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

Наконец, я исправил это, настроив обратный прокси в apache:

Я использую только порт 5000 и устанавливаю proxypass для / api /, так что если пользователи получают доступ к https://dev.myexample.com/api/xxxx, то он переходит к http://localhost:5000/api/xxxx Я думал, что это хорошо, вместо того, чтобы делать порт NAT 5000

Пожалуйста, дайте мне знать, если есть лучшая мысль

спасибо и с уважением Don

=== httpd.conf ===

<VirtualHost dev.example.com:443>
  ServerName dev.example.com
  DocumentRoot /var/www/html/dev.example.com
  ErrorLog /var/log/httpd/dev.example.com.error.log
  CustomLog /var/log/httpd/dev.example.com.access.log combined

  SSLEngine On

 <Directory "/var/www/html/dev.example.com">
    allow from all
    Options None
  </Directory>

  Include /etc/letsencrypt/options-ssl-apache.conf
  SSLCertificateFile /etc/letsencrypt//dev.example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/dev.example.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/dev.example.com/chain.pem

<Location /api/>
ProxyPass http://localhost:5000/api/
</Location>
</VirtualHost>

== program.cs ==

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

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

== == startup.cs ==

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddSerilog();

            if (!env.IsDevelopment())
            {
                app.UseHsts();

                // linux setting
                app.UseForwardedHeaders(new ForwardedHeadersOptions
                {
                    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
                });
            }

            app.UseAuthentication();
            app.UseHttpsRedirection();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{api}/{controller}/{action}");
            });


        }
...