質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

770閲覧

ASP.NET BlazorServer+Nginxで証明書更新したら.NET起動時にエラーで立ち上がらなくなった

kentaro_inoue

総合スコア45

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2023/01/27 13:02

編集2023/01/27 13:04

前提

.NET6 + Nginx+ Linux(さくらVPS)でWEBサービスを1年ほど運用しています。
先日SSL証明書の更新を行いました。
最終的にNginxの再起動を行い、ブラウザの証明書ビューアから有効期限が更新されていること確認できました。
後日、.NET6のアプリケーションを修正したのでいつものように更新を行い、サービスを起動しましたが、起動失敗しており、ブラウザで確認すると502エラーが発生いているとNginxが返してきました。

質問

エラーメッセージについて、調査方法・考えられる原因など、なんでもいいので皆さんからアドバイス頂けたらありがたいです。
些細な情報、誤情報でも構いません。

発生している問題・エラーメッセージ

.NETのアプリ起動ログを確認したところ以下のエラーが発生していました。

Unhandled exception. System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date. To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'. For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054. at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions, Action`1 configureOptions) at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(IEnumerable`1 listenOptions, AddressBindContext context, CancellationToken cancellationToken) at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host) at orgsys.Program.Main(String[] args) in /home/userA/gitwork/orgsys/orgsys/Program.cs:line 16

試したこと

翻訳すると以下の内容ですが、証明書更新したはずなので、調査に行き詰っております。

HTTPS エンドポイントを構成できません。 サーバー証明書が指定されていません。 デフォルトの開発者証明書が見つからないか、期限が切れています。

補足情報(FW/ツールのバージョンなど)

Program.cs

public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); //★エラー発生のline 16はここです。 } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }

Startup.cs

public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddHeadElementHelper(); services.AddDbContextFactory<ApplicationDbContext>( dbContextOptions => dbContextOptions .UseMySql(Configuration.GetConnectionString("DefaultConnection"), new MySqlServerVersion(new Version())) .EnableSensitiveDataLogging(true) .EnableDetailedErrors(true)); services.AddDbContextPool<ApplicationDbContext>( dbContextOptions => dbContextOptions .UseMySql(Configuration.GetConnectionString("DefaultConnection"), new MySqlServerVersion(new Version())) .EnableSensitiveDataLogging(true) .EnableDetailedErrors(true) ); services.AddRazorPages(); services.AddServerSideBlazor(); services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<ApplicationUser>>(); services.AddDatabaseDeveloperPageExceptionFilter(); services.AddHttpClient(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHeadElementServerPrerendering(); //app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); } }

Nginxのerror.logは以下の通りです。
そもそもservice立ち上がってないのでそこにアクセスできていないだけなので情報価値はあまりないかもしれません。

2023/01/27 21:14:24 [error] 4053259#0: *6689 connect() failed (111: Connection refused) while connecting to upstream, client: XXX.XXX.XXX.XX, server: XXXXXXXX.jp, request: "GET /admin/ HTTP/1.1", upstream: "http://127.0.0.1:5000/admin/", host: "XXX.XXX.XXX.XX"

証明書ビューアの状態
イメージ説明

ブラウザの状態
イメージ説明

ご協力何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/01/27 13:25

,NET 6.0 で Program.cs と Startup.cs があるのはいいのですか?
kentaro_inoue

2023/01/27 14:03

コメントありがとうございます。 .NET5.0から.NET6.0に2022年3月頃に移行したのですが、.NET5.0の名残でそのままになってます。 1年近く運用していたので、下位互換が働いているのだと思います。
kentaro_inoue

2023/01/27 14:06

また、ローカル環境でも問題なく動作しております。
退会済みユーザー

退会済みユーザー

2023/01/27 14:08

.NET 5 ⇒ .NET 6 の破壊的変更とかそのあたりは大丈夫ですか? 移行した時問題なかったのでしょうが、その後それに引っかかる何かをしたとか? 全くの想像ですので違ったらすみません。
kentaro_inoue

2023/01/27 14:21

ありがとうございます。助かります。 そこまでチェックできておりませんでした。 Program.cs と Startup.csから見直すのも一つ調査してみたいと思います。
退会済みユーザー

退会済みユーザー

2023/01/28 02:49 編集

> ローカル環境でも問題なく動作しております。 「ローカル環境」というのは Visual Studio から IIS Express または Kestrel で動かしたのですよね。その際は HTTPS で問題ないとすれば、サーバー証明書は Visual Studio がインストールした開発用のサーバー証明書を使っているはずです。mmc などを使って、現在のユーザー > 信頼されたルート証明書 > 証明書を見ると発行元に localhost という証明書があるはずです。 開発用サーバー証明書を使って「ローカル環境」では問題なくアプリが動いているが、運用環境では動かない。エラーメッセージは証明書が見つからないか期限切れと言っている・・・ということは、運用環境にインストールした証明書自体に問題があるかインストールの方法に問題があるということが疑われるのですが、そのあたりは確認されましたか?
kentaro_inoue

2023/01/28 11:03

ご協力ありがとうございます。 おかげさまで解決できましたのでお知らせ申し上げます。 今回「Nginx <--> Kestrel」というMW構成です。 KestrelはHTTPSでの通信を可能にするように構成されており、開発用サーバー証明書を利用していました。 開発用サーバー証明書の期限が切れてしまったことで、run時にKestrel構成時に証明書エラー発生。 結果、Kestrelサーバー自体が立ち上がらないという内容でした。 KestrelとNginx間ではHTTPのみで通信していると思い込んでいましたが、HTTPS通信を行っていました。 不要な為、appsettings.jsonのurlsからhttpsの利用を削除することで、証明書エラーを回避することができました。 ご協力いただきましたSurferOnWww様には深く感謝申し上げます。 ありがとうございました。
guest

回答1

0

自己解決

今回「Nginx <--> Kestrel」というMW構成です。
KestrelはHTTPSでの通信を可能にするように構成されており、開発用サーバー証明書を利用していました。
開発用サーバー証明書の期限が切れてしまったことで、run時にKestrel構成時に証明書エラー発生。
結果、Kestrelサーバー自体が立ち上がらないという内容でした。

KestrelとNginx間ではHTTPのみで通信していると思い込んでいましたが、appsettings.jsonのurlsでhttp, httpsの両方を指定していたことでHTTPS通信を行っていました。
不要な為、appsettings.jsonのurlsからhttpsの利用を削除することで、証明書エラーを回避することができました。

ご協力いただきましたSurferOnWww様には深く感謝申し上げます。
ありがとうございました。

投稿2023/01/28 11:09

kentaro_inoue

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問