HTTPS i ASP.NET Core fra bunden

for nylig, når man ser på, hvordan man konfigurerer godkendelse ved hjælp af eksterne loginudbydere (f. eks. Google, Facebook) med ASP.NET Core jeg bemærkede, at https nu er et krav for nogle af dem.

en anden ting jeg bemærkede var, hvor svært det var at finde ressourcer om at aktivere HTTPS på ASP.NET kerne.

dette blogindlæg handler om processen med at oprette en lokal ASP.NET Core hjemmeside kører med HTTPS uden fejl i Chrome (viser den grønne hængelås i adresselinjen) for din lokale udviklingstid. Og så hvordan du kan bruge Nginks eller IIS, når du er klar til at udsætte det for verden.

 HTTPS ASP.NET CORE

for at bruge HTTPS har vi brug for et digitalt certifikat. Hvis du har brug for at generere din egen til brug på udviklingstidspunktet, anbefaler jeg at bruge OpenSSL til at oprette certifikater. Det forklarer ikke kun, hvordan du kan oprette din egen certifikatmyndighed og certifikater, men også hvordan du kan konfigurere din bro.ser (Chrome) til at stole på certifikatmyndigheden.

hvis du også vil forstå, hvad certifikaternes rolle i HTTPS er, så kig på kort(ish) forklaring på, hvordan https fungerer.

fra nu af antager jeg, at du har genereret din certifikatmyndighed, certifikat og tilsvarende private nøgle, og du har en .fil (personlig informationsudveksling).

Opret et nyt projekt

jeg beskriver processen ved hjælp af Visual Studio Code og Yeoman.

hvis du ikke er bekendt med yeoman, er det et kommandolinjeværktøj, der giver dig mulighed for at oprette nye projekter fra en liste over projektskabeloner. Yeoman-generatoren (det er navnet på pakken til yeoman, der indeholder skabelonerne), vi skal bruge, er generator-aspnet. For at installere yeoman har du først brug for npm, og derefter kan du følge instruktionerne for installation af yeoman og ASP.NET Core skabeloner her.

årsagen til at bruge Visual Studio Code og yeoman er, at denne proces fungerer på MacOS.

at bruge yeoman med ASP.NET Kerneskabeloner kører følgende kommando:

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

Vælg tomt internetprogram. Der oprettes et simpelt internetprojekt, der bare har en side med teksten “Hej Verden”.

hvis du kører vinduer og har den fulde version af Visual Studio, kan du bare gøre fil – > nyt projekt, vælg. Net Core, ASP.NET og vælg derefter Tom.

konfiguration af HTTPS til Kestrel

Kestrel er den internetserver, der bruges som standard med ASP.NET kerne.

for at tilføje HTTPS-understøttelse til Kestrel Tilføj pakken Microsoft.AspNetCore.Server.Kestrel.Https som en afhængighed.

hvis du bruger project.json du kan gøre dette ved at redigere projekt.JSON ‘s” afhængigheder ” sektion og tilføje:

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

versionsnummeret kan være anderledes for dig, men det skal være det samme som det, der bruges i Microsoft.AspNetCore.Server.Kestrel – pakken.

hvis du bruger .csproj kan du tilføje afhængigheden ved at køre:

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

Certifikatkonfiguration

for at konfigurere Kestrel til at bruge vores .vi er nødt til at redigere Program.cs hvor WebHostBuilder oprettes og foretage et par ændringer:

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

ændringerne er:

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

hvilket er hvor vi angiver, hvad der er .fil, som vi ønsker at bruge, og dens adgangskode. UseHttps er en udvidelsesmetode, hvis du får en fejl, der siger, at den ikke findes, skyldes det, at du ikke tilføjede Microsoft.AspNetCore.Server.Kestrel.Https nuget-pakken, hvor den bor.

også:

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

som definerer, hvor Kestrel vil lytte til indgående forbindelser. Alternativt kan du bruge https://localhost:4430 i stedet for *. Med * kan du dog bruge ethvert domænenavn, for eksempel hvis du har denne internetapplikation i myDomain.com det ville stadig fungere, mens med localhost kun anmodninger til localhost ville blive serveret.

hvis du undrer dig over, hvorfor jeg ikke brugte standard HTTPS-porten, 443, skyldes det, at du har brug for særlige tilladelser til porte under 1024. I vinduer ville dette ikke være et problem. Men fordi det kun anbefales at gøre dette med Kestrel, når du er i udviklingstid, er det ikke et stort problem.

hvis du prøver dette i macOS eller ved hjælp af kommandolinjen i vinduer, kan du ringe til dotnet run, åbne Chrome og gå til https://localhost:43000 og se et grønt hængelåsikon.

hvis du bruger Full Visual Studio i vinduer, er måden at gøre dette på at angive, at du vil køre internetapplikationen direkte og ikke gennem IIS:

vælg programmet i kørselsindstillingerne

vælg også den bro.ser, du vil prøve den på. Chrome (hvis du er forvirret af denne erklæring, anbefaler jeg, at du læser kort(ish) forklaring på, hvordan https fungerer og bruger OpenSSL til at oprette certifikater):

Vælg Chrome som bro. ser for at prøve applikationen på

Rediger endelig projektegenskaberne (højreklik og vælg Egenskaber):

højreklik og vælg Egenskaber

og ændre start url:

 Skift launch url

brug ASP.NET kerne med en omvendt fuldmagt

selvom det helt sikkert er muligt at betjene en internetapplikation ved hjælp af ASP.NET kerne bruger kun Kestrel, det anbefales ikke. Dette skyldes, at Kestrel ikke er en fuldt udstyret internetserver og stadig mangler nogle sikkerhedsfunktioner.

selvom det ikke anbefales, vil du måske bare vise noget, du har gjort til nogen, og springe over den del af installationen og konfigurationen af en internetserver. Med tjenester som DigitalOcean eller Linode kan du oprette en VPS på meget lidt tid og bare have din ASP.NET Core tilgængelig gennem der kun at skulle installere. net core.

men hvis du vil have noget mere seriøst (og det gør du sandsynligvis, da du er her på grund af aktivering af HTTPS), skal du bruge en fuldt udstyret internetserver som f. eks ASP.NET Core ansøgning.

en server med omvendt fuldmagt er en server, der accepterer anmodninger og sender dem til en anden server, som faktisk opretter svarene på disse anmodninger. Svarene sendes tilbage til fuldmægtigserveren, der videresender dem til de klienter, der har udstedt de tilsvarende anmodninger.

når Nginks fungerer som en omvendt fuldmagt, ville det se sådan ud:

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

det gode ved denne opsætning er, at vi kan drage fordel af, at (eller IIS) er en fuld internetserver og aktivere HTTPS på den:

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

så vi behøver ikke engang at konfigurere Kestrel med HTTPS, bare Ngink.

konfiguration af HTTPS med Ngink

først skal du installere Ngink. Jeg bruger Ubuntu 16.04 til dette, men du kan endda installere det på vinduer.

hvis du kører Ubuntu, skal du åbne en terminal og skrive

$ sudo apt-get install nginx

næste ting, vi skal gøre, er at redigere Nginks konfiguration. Men før vi gør det, er det nyttigt at vide, hvad der er placeringen af konfigurationsfilerne, og hvordan de bliver aktiveret. Mappen, hvor konfigurationsfilerne normalt placeres, er /etc/nginx/sites-available/ (denne placering kan være anderledes, hvis du bruger en anden distribution).

den konfigurationsfil, der er til stede, når du installerer Ngink, hedder default.

for at en konfiguration kan aktiveres, skal den være placeret i mappen /etc/nginx/sites-enabled. Så efter oprettelse af en ny konfigurationsfil (i sites-available) oprettes et symbolsk link i sites-enabled, der peger på den nye fil.

Forestil dig, at vi netop havde oprettet en ny konfigurationsfil med navnet my-site-https i sites-available. Derefter vil du gå til sites-enabled mappe og køre følgende kommando for at oprette et symbolsk link:

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

denne nye konfiguration kører kommandoen:

$ sudo nginx -s reload

nu hvor vi ved, hvordan vi opretter og aktiverer ngink-konfigurationer, skal vi oprette konfigurationsfilen til opsætning af Ngink som en omvendt fuldmagt til en ASP.NET Core program, der kører på http://localhost:5000.

Opret først en ny fil i /etc/nginx/sites-available navngivet, for eksempel aspnetcore, med følgende indhold:

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

her konfigurerer vi Ngink til listen til port 443 ved hjælp af SSL (443 er standard for HTTPS). Dernæst angiver vi, hvor certifikatet (ssl_certificate) og den private nøgle (ssl_certificate_key) er placeret, og til sidst instruerer vi Nginks om at videresende alle anmodninger (location / matcher alle anmodninger) til http://localhost:5000.

Opret endelig det symbolske link til denne fil i sites-enabled (du kan slette linket til default filen, Dette sletter ikke den originale fil, da det er et symbolsk link).

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

Indlæs denne konfiguration:

$ sudo nginx -s reload

hvis du har din ASP.NET Kerneapplikation, der kører på http://localhost:5000 du skal nu kunne åbne https://localhost og se, at den serveres via HTTPS.

der er et almindeligt problem, der kan opstå, når du genindlæser konfigurationen, hvilket er, at du bliver bedt om en adgangskode. Specielt til privat nøgle adgangskode. Dette er muligvis ikke praktisk for dig, så hvis du vil fjerne adgangskoden fra den private nøgle, kan du køre følgende kommando:

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

en anden nyttig ting, du kan gøre med , er at få alle anmodninger om HTTP omdirigeret til HTTPS. Hvis du vil aktivere dette tilføj denne ekstra konfiguration til dig aspnetcore :

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

Configuring Supervisor

en ting, vi skal beskæftige os med, er, at vi skal holde vores ASP.NET Core Internet applikation kører.

der er et værktøj kaldet supervisor, der giver os mulighed for at konfigurere, at et program skal startes ved opstart, og hvis det går ned, skal det bringes op igen

første ting, vi skal gøre, er at installere det. Jeg bruger Ubuntu 16.04 til dette, og i denne distribution er det meget enkelt at installere det:

$ sudo apt-get install supervisor

næste ting vi skal gøre er at oprette en supervisor konfigurationsfil til vores hjemmeside ansøgning. Lad os kalde det aspnetcore.conf og tilføje det til /etc/supervisor/conf.d(du skal gøre dette ved hjælp af sudo):

Placer dette inde i konfigurationsfilen:

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"

den første linje definerer navnet (aspnetcore), hvormed vi kan henvise til internetapplikationen i vejleder.

linjen med command definerer kommandoen, der skal køres. I dette tilfælde er det dotnet efterfulgt af din internetapplikations dll. Dette svarer til at køre dotnet run i roden af dit projekt.

den næste linje (directory=) indstiller arbejdsmappen som den, hvor dit projekt er placeret.

autostart=true betyder, at programmet vil blive startet ved opstart.

autorestart=truebetyder, at applikationen genstartes, hvis den går ned, eller endda hvis den stoppes (for eksempel ved hjælp af kill). Hvis du ønsker, at din ansøgning kun skal genstartes i tilfælde af et nedbrud, skal du ændre den til autorestart=unexpected.

de næste to linjer definerer, hvilke filer standard-og fejludgangen er skrevet til henholdsvis.

endelig environmentgiver os mulighed for at indstille miljøvariabler, i dette tilfælde indstiller vi ASPNETCORE_ENVIRONMENT=Production.

for at aktivere denne nye konfigurationsfil skal du køre følgende kommandoer:

$ sudo supervisorctl reread$ sudo supervisorctl update

du kan kontrollere status for de processer, der kører under supervisor, ved at køre

$ sudo supervisorctl

det skal vise noget, der ligner:

aspnetcore kører pid 18817, oppetid 0:05:29
supervisor>

der er flere flere kommandoer, du kan bruge til at styre processer under supervisor, skriv help for en liste over de tilgængelige kommandoer. For at afslutte skal du bare skrive quit.

konfiguration af HTTPS med IIS

det første trin i aktivering af HTTPS, mens du bruger IIS, er at installere vores certifikat og private nøgle (ved hjælp af en .fil, der indeholder begge).

Åbn IIS Manager og vælg servercertifikater

Åbn servercertifikater i IIS

Klik på Importer certifikat:

Import certifikat

Vælg .indtast den tilsvarende adgangskode, forlad butikken som personlig:

Vælg PF og indtast adgangskode

før vi fortsætter er det vigtigt at nævne, at du skal have ASP.NET Core modul installeret. Det er meget sandsynligt, at du allerede gør, da det er installeret for dig, når du installerer.Net Core SDK.

hvis det ikke er tilfældet (Du kan bekræfte det i IIS Manager ved at åbne moduler og kontrollere, om AspNetCoreModule er angivet der), kan du finde installationsinstruktioner her og et direkte link til hentning af ASP.NET Core Server Hosting Bundle her.

hvad dette modul gør er at starte din ASP.NET Core hjemmeside og holde det kørende (genstarte det, hvis det går ned). Dette modul er også ansvarlig for at videresende HTTP-anmodninger til din internetapp og derefter videresende svarene tilbage til klienten.

en vigtig ting at vide om AspNetCoreModule er, at den er konfigureret af filen web.config i roden af dit projekt. Du skal køre dotnet publish på dit projekt for at få web.config opsætning korrekt i din publish-mappe.

det næste trin er at oprette en ny Applikationspulje og vælge Ingen administreret kode som.Net CLR-versionen. Normalt hjemmesider køre inde i en IIS arbejdstager proces, men i. net Core de kører som en separat proces, så der er ikke behov for en. NET Runtime i app pulje:

 Opret ny applikationspulje

endelig, lad os oprette en ny hjemmeside inde i IIS til vores ASP.NET Core ansøgning. Vi skal vælge den apppulje, vi lige har oprettet, vælg som den fysiske sti stien til den offentliggjorte hjemmeside, vælg HTTPS som binding og vores certifikat i rullemenuen SSL-certifikat:

Opret ny hjemmeside

du skal nu kunne bruge https til at gå til din ASP.NET Core app.

det er kun rimeligt at dele… Del på Facebook

Facebook

kvidre om dette på kvidre

kvidre

 Del på LinkedIn

Linkedin

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.