最近、外部ログインプロバイダー(Google、Facebookなど)を使用して認証を設定する方法を見てみると、次のようになりますASP.NET コア私はhttpsが今それらのいくつかのための要件であることに気づきました。
私が気づいたもう一つのことは、HTTPSを有効にするためのリソースを見つけることがいかに難しいかでしたASP.NET コア。
このブログ記事は、ローカルASPを作成するプロセスについてです。ローカルの開発時にChromeでエラーなしでHTTPSで実行されているNET Core webサイト(アドレスバーに緑色の南京錠が表示されます)。 そして、それを世界に公開する準備ができたら、NginxまたはIISをどのように使用することができますか。
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.Https
nugetパッケージを追加しなかったためです。
も:
.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の):
でアプリケーションを試す最後に、プロジェクトのプロパティを編集します(右クリックしてプロパティを選択します):
を選択し、起動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-available
にmy-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-available
にaspnetcore
などの名前の新しいファイルを作成し、次の内容を指定します:
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にリダイレクトすることです。 これを有効にしたい場合は、この追加の設定をaspnetcore
Nginx設定ファイルに追加します:
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マネージャーを開き、サーバー証明書を選択します
証明書のインポートをクリックします:
を選択します。pfxファイルと対応するパスワードを入力し、個人として店を残します:
続行する前に、あなたが持っている必要があることを言及することが重要ですASP.NET コアモジュール搭載。 .Net Core SDKをインストールするときにインストールされているため、すでに実行している可能性が非常に高いです。
しかし、そうでない場合(モジュールを開いてIISマネージャーで確認し、AspNetCoreModuleがそこにリストされているかどうかを確認することができます)、インストール手順はこASP.NET コアサーバーホスティングバンドルはこちら。
このモジュールが行うことは、あなたのASP.NET コアウェブサイトと(それがクラッシュした場合、それを再起動)実行し続けます。 このモジュールは、HTTP要求をwebアプリに転送し、応答をクライアントに転送する役割も果たします。
AspNetCoreModuleについて知っておくべき重要なことは、プロジェクトのルートにあるweb.config
ファイルによって構成されていることです。 プロジェクトでdotnet publish
を実行して、publishフォルダーでweb.config
setupを適切に取得する必要があります。
次の手順では、新しいアプリケーションプールを作成し、.NET CLRバージョンとしてマネージコードなしを選択します。 通常、webサイトはIISワーカープロセス内で実行されますが、.NET Coreでは別のプロセスとして実行されるため、アプリプールに.Netランタイムは必要ありません:
最後に、IIS内に新しいwebサイトを作成してみましょうASP.NET コアアプリケーション。 作成したアプリプールを選択し、公開されたwebサイトへのパスを物理パスとして選択し、バインドとしてHTTPSを選択し、SSL証明書ドロップダウンで証明:
httpsを使用してあなたのウェブサイトを閲覧できるようになりましたASP.NET コアアプリ。