YARP (Yet Another Reverse Proxy)をWindows サービスとして実行し、SSLのアクセスを受け付けられるようにする
リバースプロキシソフトウェアの YARP (Yet Another Reverse Proxy) をWindows サービスとして実行し、SSLのアクセスも受け付けられるよう設定します。
概要
こちらの記事では、YARPをインストールする手順を紹介しました。
この記事では、YARPをWindowsサービスとして実行し、かつ、SSLのアクセスも受け付けられる設定手順を紹介します。
プログラム
プロジェクト作成
ASP.NET Core アプリケーションを作成し、YARPのパッケージをインストールします。
手順の詳細は、
こちらの記事を参照してください。
SSL証明書の準備
SSLの証明書を作成します。今回はLet's Encrypt でワイルドカード証明書を取得しています。証明書はpfxファイルとして保存します。
Let's Encryptでpfxファイルを取得する手順については
こちらの記事を参照してください。
取得した証明書のpfxファイルをプロジェクトのフォルダに配置し、ソリューションエクスプローラーで証明書のpfxファイルを選択して
[出力ディレクトリにコピー]の設定を"常にコピーする"に変更します。手順の詳細は
こちらの記事を参照してください。
今回の例ではpfxのファイル名は"_.ipentec.com.pfx"としています。
コード
以下のコードを記述します。
using Microsoft.Extensions.Hosting.WindowsServices;
var webApplicationOptions = new WebApplicationOptions {
ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default,
Args = args,
};
var builder = WebApplication.CreateBuilder(webApplicationOptions);
builder.Host.UseWindowsService();
builder.Services.AddReverseProxy().LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
/*追加*/
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://*:80"
},
"Https": {
"Url": "https://*:443",
"ClientCertificateMode": "AllowCertificate",
"Certificate": {
"Path": "_.ipentec.com.pfx",
"Password": ""
}
}
}
},
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
}
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"destination1": {
"Address": "https://example.com/"
}
}
}
}
}
}
解説
Program.cs
Program.csでは、ASP.NET Coreアプリケーションをサービスとして実行できるようにするためのコードを追加しています。
コードの詳細については
こちらの記事を参照してください。
appsettings.json
Kestrel, Endpoints, Https の記述を追加し、Kestrel WebサーバーでリッスンするURLとポート番号を設定します。
Certificateオブジェクトを記述し、SSLアクセス時のpfx証明書のパスを設定しています。
書式の詳細は
こちらの記事を参照してください。
ファイルの配置
プロジェクトを発行し、サーバーに配置します。今回は
C:\yarp\
に配置しています。pfxファイルのSSL証明書も同じディレクトリに配置します。
サービス登録/削除スクリプトの作成
以下のバッチファイルを作成します。実行ファイルのパスは配置したYARPのリバースプロキシ ASP.NET Coreアプリケーションのexeファイルを指定します。
sc create YARPDemo binPath= "C:\yarp\ServiceYarpSslDemo.exe" start= auto displayname= "YARP Demo Service"
sc delete YARPDemo
サービスの作成
作成したサービスの作成コマンドを実行し、サービスを作成します。
作成したサービスを起動します。
実行結果
https のURLでYARPのサーバーにアクセスします。SSLのワーニングが表示されずにexample.comのコンテンツをプロキシできています。
接続を確認します。[接続がセキュリティで保護されています]のメッセージが表示されています。
証明書を確認します。有効な証明書が設定されている旨が表示されます。
作成したpfxファイルの証明書が設定されています。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用