HTTPSでASP.NET Core from Scratch

最近、外部ログインプロバイダー(Google、Facebookなど)を使用して認証を設定する方法を見てみると、次のようになりますASP.NET コア私はhttpsが今それらのいくつかのための要件であることに気づきました。

私が気づいたもう一つのことは、HTTPSを有効にするためのリソースを見つけることがいかに難しいかでしたASP.NET コア。

このブログ記事は、ローカルASPを作成するプロセスについてです。ローカルの開発時にChromeでエラーなしでHTTPSで実行されているNET Core webサイト(アドレスバーに緑色の南京錠が表示されます)。 そして、それを世界に公開する準備ができたら、NginxまたはIISをどのように使用することができますか。

ASP.NET コア

HTTPSを使用するには、デジタル証明書が必要です。 開発時に使用する独自のものを生成する必要がある場合は、OpenSSLを使用して証明書を作成することをお勧めします。 独自の認証局と証明書を作成する方法だけでなく、認証局を信頼するようにブラウザ(ChromeまたはFirefox)を構成する方法についても説明しています。また、HTTPSでの証明書の役割を理解したい場合は、httpsの仕組みについての簡単な(ish)説明をご覧ください。

これから私はあなたがあなたの認証局、証明書および対応する秘密鍵を生成したと仮定しています、そしてあなたは持っています。pfx(Personal Information Exchange)ファイル。

新しいプロジェクトを作成します

私は、Visual StudioのコードとYeomanを使用してプロセスを説明します。

yeomanに慣れていない場合は、プロジェクトテンプレートのリストから新しいプロジェクトを作成できるコマンドラインツールです。 使用するyeomanジェネレータ(テンプレートを含むyeomanのパッケージの名前です)はgenerator-aspnetです。 Yeomanをインストールするには、最初にnpmが必要です。yeomanをインストールするための指示に従うことができます。ASP.NET コアテンプレートはこちら。

Visual Studio Codeとyeomanを使用する理由は、このプロセスがWindows、Linux、macOSで動作するためです。

とyeomanを使用するにはASP.NET コアテンプレートは、次のコマンドを実行します:

$ yo aspnet _-----_ ╭──────────────────────────╮ | | │ Welcome to the │ |--(o)--| │ marvellous ASP.NET Core │`---------´ │ generator! │ ( _´U`_ ) ╰──────────────────────────╯ /___A___\ / | ~ | __'.___.'__ ´ ` |° ´ Y ` ? What type of application do you want to create? (Use arrow keys)❯ Empty Web Application Empty Web Application (F#) Console Application Console Application (F#) Web Application Web Application Basic Web Application Basic (F#) 

空のWebアプリケーションを選択します。 簡単なウェブプロジェクトが作成されたばかりのページのテキスト”こんにちはます。Windowsを実行していて、Visual Studioのフルバージョンを使用している場合は、File->New Projectを実行し、.Net Coreを選択します。ASP.NET コアWebアプリケーションを選択し、[空]を選択します。

KESTRELのHTTPSの設定

Kestrelは、デフォルトで使用されるwebサーバーです。ASP.NET コア。

HTTPSサポートをKestrelに追加するには、Microsoft.AspNetCore.Server.Kestrel.Httpsパッケージを依存関係として追加します。プロジェクトを使用している場合は

。jsonプロジェクトを編集することでこれを行うことができます。jsonの「依存関係」セクションと追加:

"Microsoft.AspNetCore.Server.Kestrel.Https": "1.1.0"

バージョン番号は異なる場合がありますが、Microsoft.AspNetCore.Server.Kestrelパッケージで使用されているものと同じである必要があります。

.csprojを使用している場合は、次のように実行して依存関係を追加できます:

dotnet add package Microsoft.AspNetCore.Server.Kestrel.Https

証明書の設定

私たちを使用するようにKestrelを設定します。pfxファイル(証明書と秘密鍵)WebHostBuilderが作成されているProgram.csを編集し、いくつかの変更を加える必要があります:

var host = new WebHostBuilder() .UseConfiguration(config) .UseKestrel(options => { options.UseHttps("localhost.pfx", "password"); }) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseUrls("https://*:4430") .UseStartup<Startup>() .Build();

変更は次のとおりです:

.UseKestrel(options => { options.UseHttps("localhost.pfx", "password");})

私たちが何であるかを指定する場所です。私たちが使用したいpfxファイルとそのパスワード。 UseHttpsは拡張メソッドですが、存在しないというエラーが発生した場合は、Microsoft.AspNetCore.Server.Kestrel.Httpsnugetパッケージを追加しなかったためです。

も:

.UseUrls("https://*:4430")

これは、kestrelが着信接続をリッスンする場所を定義します。 または、*の代わりにhttps://localhost:4430を使用することもできます。 ただし、*では、任意のドメイン名を使用できます。myDomain.comにこのwebアプリケーションがある場合でも動作しますが、localhostではlocalhostへの要求のみが処理されます。

なぜデフォルトのHTTPSポート443を使用しなかったのか疑問に思っている場合、それは1024未満のポートに対してLinux上で特別な権限が必要なためです。 Windowsではこれは問題ではありません。 ただし、Kestrelでこれを行うことは、開発時にのみ推奨されるため、大きな問題ではありません。Linux、macOS、またはWindowsのコマンドラインを使用してこれを試している場合は、dotnet runを呼び出し、Chromeを開いてhttps://localhost:43000に移動し、緑色の南京錠アイコンが表示されます。Windowsで完全なVisual Studioを使用している場合、これを行う方法は、IIS Expressではなくwebアプリケーションを直接実行することを指定することです:

実行オプション

でアプリケーションを選択し、試してみたいブラウザも選択します。 テストルート認証局の証明書を特定のブラウザにインストールした場合は、そのブラウザ、たとえばChromeを使用します(この声明で混乱している場合は、httpsの):

ブラウザとしてChromeを選択し、

でアプリケーションを試す最後に、プロジェクトのプロパティを編集します(右クリックしてプロパティを選択します):

右クリックしてプロパティ

を選択し、起動urlを変更します:

を使用して起動urlを変更します

ASP.NET コアはリバースプロキシ

を使用してwebアプリケーションを提供することは確かに可能ですが、ASP.NET コアのみKestrelを使用して、それはお勧めしません。 これは、Kestrelが完全な機能を備えたwebサーバーではなく、まだいくつかのセキュリティ機能が欠けているためです。

それは推奨されていませんが、あなただけの誰かにやったことを表示し、webサーバーのインストールと設定の部分をスキップしたい場合があります。 DigitalOceanやLinodeのようなサービスを使用すると、非常に少しの時間でVPSを作成し、ちょうどあなたを持つことができますASP.NET .net coreをインストールするだけでそこから利用可能なCore。ただし、より深刻なものが必要な場合(HTTPSを有効にしているためにここにいるのでおそらくそうします)、NginxやIIS(Windowsの場合)などのフル機能のwebサーバーを、ASP.NET コアアプリケーション。

リバースプロキシサーバーは、要求を受け入れ、それらを実際にそれらの要求の応答を作成する別のwebサーバーに送信するwebサーバーです。 応答は、対応する要求を発行したクライアントにそれらを転送するプロキシサーバーに送り返されます。

nginxがリバースプロキシとして機能すると、次のようになります:

Browser <----> Nginx <----> Kestrel

この設定の良い点は、完全なwebサーバーであるNginx(またはIIS)を利用してHTTPSを有効にできることです:

Browser <---- HTTPS ---> Nginx <---- HTTP ----> Kestrel

そのため、KESTRELをHTTPSで設定する必要はなく、Nginxだけです。

NGINXでHTTPSを設定する

まずNginxをインストールする必要があります。 私はこれにUbuntu16.04を使用していますが、Windowsにインストールすることもできます。Ubuntuを実行している場合は、ターミナルを開き、

$ sudo apt-get install nginx

次に行う必要があるのは、Nginxの設定を編集することです。 しかし、それを行う前に、設定ファイルの場所とそれらがどのように有効になるかを知ることは有益です。 通常、設定ファイルが配置されるフォルダは/etc/nginx/sites-available/です(別のLinuxディストリビューションを使用している場合は、この場所が異なる場合があります)。

Nginxをインストールするときに存在する設定ファイルの名前はdefaultです。

Nginx設定を有効にするには、/etc/nginx/sites-enabledフォルダにある必要があります。 そのため、新しい設定ファイル(sites-available内)を作成した後、新しいファイルを指すシンボリックリンクがsites-enabled内に作成されます。

sites-availablemy-site-httpsという名前の新しい設定ファイルを作成したとします。 その後、sites-enabledフォルダに移動し、次のコマンドを実行してシンボリックリンクを作成します:

$ ln -s /etc/nginx/sites-available/my-site-htts

Nginxにこの新しい設定を読み込ませるには、次のコマンドを実行します:

$ sudo nginx -s reload

Nginx設定を作成して有効にする方法がわかったので、nginxをリバースプロキシとして設定するための設定ファイルを作成しましょう。ASP.NET http://localhost:5000で実行されているコアアプリケーション。

まず、/etc/nginx/sites-availableaspnetcoreなどの名前の新しいファイルを作成し、次の内容を指定します:

server { listen 443 ssl; ssl_certificate PATH_TO_CERTIFICATE/CERTIFICATE_NAME.pem; ssl_certificate_key PATH_TO_PRIVATE_KEY/PRIVATE_KEY.pem; location / { proxy_pass http://localhost:5000; }}

ここでは、SSLを使用してnginxをlistenにポート443に設定しています(443はHTTPSのデフォルトです)。 次に、証明書(ssl_certificate)と秘密鍵(ssl_certificate_key)がどこにあるかを指定し、最後にすべての要求(location /はすべての要求に一致します)をhttp://localhost:5000に転送するようにNginxに指示します。

最後に、sites-enabledでこのファイルへのシンボリックリンクを作成します(defaultファイルへのリンクを削除できますが、元のファイルはシンボリックリンクな

/etc/nginx/sites-enabled$ sudo ln -s /etc/nginx/sites-available/aspnetcore

Nginxにこの設定をロードさせるには:

$ sudo nginx -s reload

あなたが持っている場合ASP.NET http://localhost:5000で実行されているコアアプリケーションhttps://localhostを開き、HTTPS経由で提供されていることを確認できるようになりました。

Nginx設定をリロードすると、パスワードの入力を求められる一般的な問題が発生する可能性があります。 具体的には、秘密鍵のパスワードのために。 これは実用的ではない可能性があるため、秘密キーからパスワードを削除する場合は、次のコマンドを実行できます:

$ openssl rsa -in privateKeyWithPassword.pem -out privateKeyWithoutPassword.pem

Nginxでできるもう1つの便利なことは、HTTPへのすべての要求をHTTPSにリダイレクトすることです。 これを有効にしたい場合は、この追加の設定をaspnetcoreNginx設定ファイルに追加します:

server { listen 80; return 301 https://$host$request_uri;}

私たちが気にしなければならないことの一つは、私たちが私たちのものを維持する必要があるということですASP.NET コアwebアプリケーションが実行されています。

supervisorというツールがあり、起動時にアプリケーションを起動するように設定し、クラッシュした場合は

をバックアップする必要があります。 私はこれのためにUbuntu16.04を使用しています、そしてこの配布でそれをインストールすることは非常に簡単です:

$ sudo apt-get install supervisor

次に行う必要があるのは、webアプリケーション用のsupervisor設定ファイルを作成することです。 それをaspnetcore.confと呼び、それを/etc/supervisor/conf.dに追加しましょう(sudoを使用してこれを行う必要があります):

これを設定ファイル内に配置します:

command=/usr/bin/dotnet PATH_TO_YOUR_PUBLISHED_PROJECT/YOURWEBAPP.dlldirectory=PATH_TO_YOUR_PUBLISHED_PROJECTautostart=trueautorestart=truestdout_logfile=/var/log/aspnetcore.out.logstderr_logfile=/var/log/aspnetcore.err.logenvironment=ASPNETCORE_ENVIRONMENT="Production"

最初の行は、supervisorでwebアプリケーションを参照できる名前(aspnetcore)を定義します。

commandの行は、実行するコマンドを定義します。 この場合、dotnetの後にwebアプリケーションのdllが続きます。 これは、プロジェクトのルートでdotnet runを実行するのと同じです。

次の行(directory=)は、プロジェクトが置かれている場所として作業ディレクトリを設定します。

autostart=trueは、アプリケーションが起動時に起動されることを意味します。

autorestart=trueは、アプリケーションがクラッシュした場合、または停止した場合でも(たとえばkillを使用して)再起動されることを意味します。 クラッシュした場合にのみアプリケーションを再起動したい場合は、autorestart=unexpectedに変更します。

次の二つの行は、標準出力とエラー出力がそれぞれどのファイルに書き込まれるかを定義します。

最後にenvironmentは環境変数を設定することを可能にします、この場合はASPNETCORE_ENVIRONMENT=Productionを設定しています。

この新しい構成ファイルを有効にするには、次のコマンドを実行します:

$ sudo supervisorctl reread$ sudo supervisorctl update

supervisorで実行されているプロセスのステータスを確認するには、

$ sudo supervisorctl

次のようなものが表示されます。

aspnetcore RUNNING pid18817,uptime0:05:29
supervisor>

supervisor>

supervisor>

supervisor>

supervisor>

supervisor>

supervisorhelpと入力して、使用可能なコマンドのリストを入力します。 終了するには、quitと入力します。

IISを使用したHTTPSの設定

IISを使用してHTTPSを有効にする最初のステップは、証明書と秘密キーをインストールすることです(a.両方を含むpfxファイル)。

IISマネージャーを開き、サーバー証明書を選択します

IISでサーバー証明書を開きます

証明書のインポートをクリックします:

インポート証明書

を選択します。pfxファイルと対応するパスワードを入力し、個人として店を残します:

pfxを選択し、パスワードを入力します

続行する前に、あなたが持っている必要があることを言及することが重要ですASP.NET コアモジュール搭載。 .Net Core SDKをインストールするときにインストールされているため、すでに実行している可能性が非常に高いです。

しかし、そうでない場合(モジュールを開いてIISマネージャーで確認し、AspNetCoreModuleがそこにリストされているかどうかを確認することができます)、インストール手順はこASP.NET コアサーバーホスティングバンドルはこちら。

このモジュールが行うことは、あなたのASP.NET コアウェブサイトと(それがクラッシュした場合、それを再起動)実行し続けます。 このモジュールは、HTTP要求をwebアプリに転送し、応答をクライアントに転送する役割も果たします。

AspNetCoreModuleについて知っておくべき重要なことは、プロジェクトのルートにあるweb.configファイルによって構成されていることです。 プロジェクトでdotnet publishを実行して、publishフォルダーでweb.configsetupを適切に取得する必要があります。

次の手順では、新しいアプリケーションプールを作成し、.NET CLRバージョンとしてマネージコードなしを選択します。 通常、webサイトはIISワーカープロセス内で実行されますが、.NET Coreでは別のプロセスとして実行されるため、アプリプールに.Netランタイムは必要ありません:

新しいアプリケーションプールを作成します

最後に、IIS内に新しいwebサイトを作成してみましょうASP.NET コアアプリケーション。 作成したアプリプールを選択し、公開されたwebサイトへのパスを物理パスとして選択し、バインドとしてHTTPSを選択し、SSL証明書ドロップダウンで証明:

新しいウェブサイトを作成する

httpsを使用してあなたのウェブサイトを閲覧できるようになりましたASP.NET コアアプリ。

それは共有するだけで公正です。..Facebookでシェア

Facebook

Twitterでシェア

Twitter

LinkedInでシェア

Linkedinでシェア

FacebookTwitterでシェア

Twitter

LinkedInでシェア

Linkedinでシェア

コメントを残す

メールアドレスが公開されることはありません。