HTTPS in ASP.NET Core tyhjästä

äskettäin, kun tarkastellaan, miten määrittää todennus käyttämällä ulkoisia kirjautumispalveluja (esim. Google, Facebook) ASP.NET Core huomasin, että https on nyt vaatimus joillekin heistä.

toinen asia, jonka huomasin, oli kuinka vaikeaa oli löytää resursseja HTTPS: n käyttöönotosta ASP.NET ydin.

tämä blogikirjoitus kertoo paikallisen ASP: n luomisprosessista.NET Core verkkosivuilla käynnissä HTTPS ilman virheitä Chrome (näyttää vihreä riippulukko osoiterivillä) paikallisen kehityksen aikaa. Ja sitten miten voit käyttää Nginxiä tai IIS: ää, kun olet valmis paljastamaan sen maailmalle.

 HTTPS ASP.NET CORE

HTTPS: n käyttöön tarvitaan digitaalinen varmenne. Jos haluat luoda oman käyttöösi kehitysvaiheessa, suosittelen käyttämään OpenSSL: ää varmenteiden luomiseen. Siinä ei selitetä vain, miten voit luoda oman varmenneviranomaisen ja varmenteet, vaan myös, miten voit määrittää selaimesi (Chrome tai Firefox) luottamaan varmenneviranomaiseen.

myös, jos haluat ymmärtää, mikä on varmenteiden rooli HTTPS: ssä, katso lyhyt(ish) selitys https: n toiminnasta.

tästä lähtien oletan, että olet luonut varmenneviranomaisen, varmenteen ja vastaavan yksityisen avaimen ja sinulla on .PFX (Personal Information Exchange) – tiedosto.

Luo uusi projekti

kuvaan prosessia Visual Studion koodin ja Yeomanin avulla.

jos et tunne yeomania, se on komentorivityökalu, jonka avulla voit luoda uusia projekteja projektipohjien luettelosta. Yeoman generator (se on nimi paketti yeoman, joka sisältää malleja) aiomme käyttää on generaattori-aspnet. Asentaa yeoman tarvitset ensin npm ja sitten voit seurata ohjeita asennus yeoman ja ASP.NET Keskeiset mallit täällä.

syy Visual Studio Code ja yeoman käyttöön on se, että tämä prosessi toimii Windowsissa, Linuxissa ja macOS: ssa.

käyttää yeomania ASP.NET Ydinmallineet suorita seuraava komento:

$ 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#) 

Valitse tyhjä Web-sovellus. Luodaan yksinkertainen verkkoprojekti, jossa on vain sivu, jossa on teksti ”Hello World”.

jos käytät Windowsia ja sinulla on Visual Studion täysversio, voit vain tehdä tiedoston – > uusi projekti, valitse. Net Core, ASP.NET Core Web-sovellus ja valitse Tyhjä.

HTTPS: n määrittäminen Kestrelille

Kestrel on WWW-palvelin, jota käytetään oletuksena ASP.NET ydin.

jos haluat lisätä KESTRELIIN HTTPS-tuen, lisää Microsoft.AspNetCore.Server.Kestrel.Https – paketti riippuvuutena.

jos käytät projektia.JSON voit tehdä tämän muokkaamalla projekti.JSONin” riippuvuudet ” – osio ja lisääminen:

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

versionumero voi olla sinulle eri, mutta sen pitäisi olla sama kuin Microsoft.AspNetCore.Server.Kestrel – paketissa käytetty.

jos käytät .csproj voit lisätä riippuvuuden juoksemalla:

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

Certificate Configuration

to configure Kestrel to use our .PFX-tiedostoa (varmenne ja yksityinen avain) meidän on muokattava Program.cs, jossa WebHostBuilder luodaan, ja tehtävä muutamia muutoksia:

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

muutokset ovat:

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

mikä on, jos täsmennämme, mikä on .PFX tiedosto, jota haluamme käyttää ja sen salasana. UseHttps on laajennusmenetelmä, jos saat virheen sanomalla, että sitä ei ole olemassa, se johtuu siitä, ettet lisännyt Microsoft.AspNetCore.Server.Kestrel.Https NuGet-pakettia, jossa se elää.

myös:

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

, joka määrittelee, missä Kestrel kuuntelee saapuvia yhteyksiä. Vaihtoehtoisesti voit käyttää https://localhost:4430 sijasta *. * voit kuitenkin käyttää mitä tahansa verkkotunnusta, esimerkiksi jos sinulla on tämä verkkosovellus myDomain.com , se toimisi edelleen, kun taas localhost, vain pyyntöjä localhost vastattaisiin.

jos ihmettelet, miksi en käyttänyt oletusarvoista HTTPS-porttia, 443, se johtuu siitä, että tarvitset Linuxissa erityisoikeuksia alle 1024-portteihin. Windowsissa tämä ei olisi ongelma. Kuitenkin, koska tämän tekeminen Kestrelin kanssa on suositeltavaa vain silloin, kun olet kehitysvaiheessa, se ei ole suuri ongelma.

jos yrität tätä Linuxissa, macOS: ssa tai komentorivillä Windowsissa, voit soittaa dotnet run, avata Chromen ja mennä https://localhost:43000 ja nähdä vihreän riippulukon ikonin.

jos käytät täyttä Visual Studiota Windowsissa, voit tehdä tämän määrittämällä, että haluat suorittaa web-sovelluksen suoraan etkä IIS Expressin kautta:

Valitse sovellus ajo-asetuksista

valitse myös selain, jolla haluat kokeilla sitä. Jos olet asentanut Test root certificate Authorityn varmenteen tiettyyn selaimeen, käytä kyseistä selainta, esimerkiksi Chromea (jos olet hämmentynyt tästä lausunnosta, suosittelen, että luet lyhyen(Ish) selityksen https: n toiminnasta ja OpenSSL: n käyttämisestä varmenteiden luomiseen):

valitse selaimeksi Chrome, jos haluat kokeilla sovellusta kohteessa

muokkaa lopuksi projektin ominaisuuksia (napsauta hiiren kakkospainikkeella ja valitse Ominaisuudet):

napsauta hiiren oikealla painikkeella ja valitse Ominaisuudet

ja muuta laukaisu-osoitetta:

 vaihda laukaisu-url

käyttäen ASP.NET Core käänteisellä välityspalvelimella

vaikka on varmasti mahdollista palvella web-sovellus käyttäen ASP.NET Core käyttäen vain Kestrel, se ei ole suositeltavaa. Tämä johtuu siitä, että Kestrel ei ole täysin varusteltu web-palvelin ja siitä puuttuu vielä joitakin tietoturvaominaisuuksia.

vaikka sitä ei suositella, haluat ehkä vain näyttää jollekin jotain, mitä olet tehnyt, ja jättää web-palvelimen asentamisen ja määrittämisen väliin. Palvelut kuten DigitalOcean tai Linode voit luoda VPS hyvin vähän aikaa ja vain on ASP.NET Core saatavilla kautta vain tarvitse asentaa. Net core.

Jos kuitenkin haluat jotain vakavampaa (ja luultavasti haluat, koska olet täällä HTTPS: n käyttöönoton vuoksi) , sinun tulisi käyttää täysin varusteltua www-palvelinta, kuten nginx tai IIS (Windowsissa), käänteisenä välityspalvelimena ASP.NET Ydinsovellus.

käänteinen välityspalvelin on verkkopalvelin, joka hyväksyy pyynnöt ja lähettää ne toiselle verkkopalvelimelle, joka itse asiassa luo vastaukset kyseisiin pyyntöihin. Vastaukset lähetetään takaisin välityspalvelimelle, joka välittää ne asiakkaille, jotka ovat antaneet vastaavat pyynnöt.

Nginxin toimiessa käänteismerkintänä se näyttäisi jokseenkin tältä:

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

hyvä asia tässä setup on, että voimme hyödyntää Nginx (tai IIS) on täysi web-palvelin ja ottaa HTTPS sitä:

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

joten meidän ei tarvitse edes määrittää KESTRELIÄ HTTPS: llä, vain Nginx.

HTTPS: n määrittäminen nginxillä

ensin on asennettava Nginx. Käytän Ubuntu 16.04 tätä varten, mutta voit jopa asentaa sen Windowsiin.

jos käytät Ubuntua, avaa pääte ja kirjoita

$ sudo apt-get install nginx

seuraavaksi meidän on muokattava Nginxin asetuksia. Mutta ennen kuin teemme, että on hyödyllistä tietää, mikä on asetustiedostojen sijainti ja miten ne tulevat käyttöön. Kansio, johon asetustiedostot yleensä sijoitetaan, on /etc/nginx/sites-available/ (tämä sijainti voi olla erilainen, jos käytät eri Linux-jakelua).

Nginxin asennuksen yhteydessä oleva asetustiedosto on nimeltään default.

jotta nginx-konfiguraatio tulisi käyttöön, sen on sijaittava kansiossa /etc/nginx/sites-enabled. Uuden asetustiedoston luomisen jälkeen (sites-available) sites-enabled luodaan symbolinen linkki, joka osoittaa uuteen tiedostoon.

Kuvittele, että olimme juuri luoneet uuden asetustiedoston nimeltä my-site-https sites-available. Tämän jälkeen siirryt sites-enabled – kansioon ja suoritat seuraavan komennon luodaksesi symbolisen linkin:

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

jos haluat saada Nginxin lukemaan tämän uuden kokoonpanon, suorita komento:

$ sudo nginx -s reload

nyt kun osaamme luoda ja ottaa käyttöön nginx-kokoonpanot, luodaan asetustiedosto Nginxin asettamista varten käänteislähettimenä an ASP.NET Ydinsovellus ,joka on käynnissä http://localhost:5000.

luo ensin /etc/nginx/sites-available uusi tiedosto nimeltä esimerkiksi aspnetcore, jonka sisältö on seuraava:

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; }}

tässä määritämme nginx: n arvoon listen porttiin 443 SSL: n avulla (443 on HTTPS: n oletusarvo). Seuraavaksi tarkennamme, missä varmenne (ssl_certificate) ja yksityinen avain (ssl_certificate_key) sijaitsevat, ja lopuksi ohjeistamme Nginxiä välittämään kaikki pyynnöt (location / vastaa kaikkia pyyntöjä) osoitteeseen http://localhost:5000.

luo lopuksi symbolinen linkki tähän tiedostoon kohdassa sites-enabled (voit poistaa linkin default tiedostoon, tämä ei poista alkuperäistä tiedostoa, koska se on symbolinen linkki).

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

jotta Nginx lataisi tämän kokoonpanon:

$ sudo nginx -s reload

jos sinulla on ASP.NET Core application käynnissä http://localhost:5000 sinun pitäisi nyt pystyä avaamaan https://localhost ja nähdä, että se tarjoillaan HTTPS: n kautta.

on olemassa yleinen ongelma, joka saattaa tapahtua, kun lataat nginx-asetukset uudelleen, eli sinulta kysytään salasanaa. Erityisesti private Keyn salasanalle. Tämä ei ehkä ole käytännöllistä sinulle, joten jos haluat poistaa salasanan yksityisestä avaimesta, voit suorittaa seuraavan komennon:

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

toinen hyödyllinen asia voit tehdä Nginx on saada kaikki pyynnöt HTTP ohjataan HTTPS. Jos haluat ottaa tämän käyttöön, lisää tämä lisäasetukset aspnetcore Nginx-asetustiedostoon:

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

configuring Supervisor

One thing we must concern ourselves with that we need to keep our ASP.NET Core web-sovellus käynnissä.

on työkalu nimeltä supervisor, jonka avulla voimme määrittää, että sovellus käynnistetään käynnistyksen aikana, ja jos se kaatuu, se tulee palauttaa ylös

ensimmäiseksi meidän täytyy asentaa se. Käytän Ubuntu 16.04: ää tähän, ja tässä jakelussa sen asentaminen on hyvin yksinkertaista:

$ sudo apt-get install supervisor

seuraavaksi meidän täytyy tehdä on luoda valvojan määritystiedoston web-sovellus. Kutsutaan sitä nimellä aspnetcore.conf ja lisätään se numeroon /etc/supervisor/conf.d (sinun täytyy tehdä tämä käyttäen sudoa):

Aseta tämä asetustiedoston sisään:

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"

ensimmäinen rivi määrittelee nimen (aspnetcore), jolla voimme viitata verkkosovellukseen valvojassa.

rivi command määrittelee suoritettavan komennon. Tällöin se on dotnet, jota seuraa verkkosovelluksesi dll. Tämä vastaa juoksua dotnet run projektin juuressa.

seuraava rivi (directory=) määrittää työhakemiston sellaiseksi, jossa projektisi sijaitsee.

autostart=true tarkoittaa, että sovellus käynnistetään käynnistyksen yhteydessä.

autorestart=truetarkoittaa, että sovellus käynnistetään uudelleen, jos se kaatuu tai vaikka se pysäytetään (esimerkiksi käyttämällä kill). Jos haluat, että sovellus käynnistetään uudelleen vain kaatumisen sattuessa, muuta se arvoon autorestart=unexpected.

seuraavat kaksi riviä määrittelevät, mille tiedostoille vakio-ja virhetuloste kirjoitetaan.

lopulta environment mahdollistaa ympäristömuuttujien asettamisen, tässä tapauksessa asetamme ASPNETCORE_ENVIRONMENT=Production.

ottaaksesi tämän uuden asetustiedoston käyttöön suorita seuraavat komennot:

$ sudo supervisorctl reread$ sudo supervisorctl update

valvojan alaisuudessa kulkevien prosessien tilan voi tarkistaa ajamalla

$ sudo supervisorctl

sen pitäisi näyttää jotain samaa kuin:

aspnetcore RUNNING pid 18817, uptime 0:05:29
supervisor>

on useampia komentoja, joilla voit hallita valvojan alaiset prosessit, kirjoita help luettelo käytettävissä olevista komennoista. Jos haluat lopettaa, kirjoita vain quit.

HTTPS: n määrittäminen IIS: llä

ensimmäinen askel HTTPS: n käyttöönotossa IIS: ää käytettäessä on varmenteen ja yksityisen avaimen asentaminen (käyttämällä a .PFX-tiedosto, joka sisältää molemmat).

avaa IIS-hallinta ja valitse Palvelinvarmenteet

 avaa palvelinvarmenteet IIS: ssä

napsauta Tuo varmenne:

tuo todistus

valitse .PFX-tiedosto ja anna vastaava salasana, poistu kaupasta henkilökohtaisena:

valitse PFX ja anna salasana

ennen kuin jatkamme on tärkeää mainita, että sinulla on oltava ASP.NET ydinmoduuli asennettu. On hyvin todennäköistä, että teet jo, koska se on asennettu sinulle, kun asennat.Net Core SDK.

mikäli näin ei ole (voit tarkistaa sen IIS-hallinnasta avaamalla moduulit ja tarkistamalla, onko AspNetCoreModule luettelossa), löydät asennusohjeet täältä ja suoran linkin lataamiseen ASP.NET Core Server Hosting Bundle täällä.

tämä moduuli käynnistää ASP.NET Core verkkosivuilla ja pitää sen käynnissä (uudelleenkäynnistyksen, jos se kaatuu). Tämä moduuli vastaa myös HTTP-pyyntöjen välittämisestä verkkosovellukseesi ja vastausten välittämisestä takaisin asiakkaalle.

Aspnetcoremodulesta on tärkeää tietää, että se on määritetty web.config – tiedostossa projektisi juuressa. Sinun täytyy suorittaa dotnet publish projektissasi saadaksesi web.config asetukset oikein julkaisukansiossasi.

seuraava askel on luoda uusi sovellussarja ja valita. Net CLR-versioksi Ei hallittua koodia. Normaalisti sivustot toimivat IIS: n työprosessin sisällä, mutta. Net-ytimessä ne toimivat erillisenä prosessina, joten. Net-ajoaikaa ei tarvita sovelluspoolissa:

 Create new application pool

lopuksi, let ’ s create a new website inside IIS for our ASP.NET Ydinsovellus. Meidän on valittava juuri luomamme sovellussarja, valittava fyysiseksi poluksi julkaistun verkkosivuston polku, valittava sitova HTTPS ja sertifikaattimme SSL-varmenteen pudotusvalikossa:

Luo uusi verkkosivusto

sinun pitäisi nyt pystyä käyttämään https: tä selataksesi ASP.NET Ydinsovellus.

on vain reilua jakaa…Jaa Facebook

Facebook

 Tweet tästä Twitterissä

Twitter

 Jaa LinkedInissä

Linkedin

Vastaa

Sähköpostiosoitettasi ei julkaista.