Nylig, når man ser på hvordan man konfigurerer autentisering ved hjelp av eksterne innloggingsleverandører (F. Eks. Google, Facebook) med ASP.NET Kjerne jeg la merke til at https nå er et krav for noen av dem.
En annen ting jeg la merke til var hvor vanskelig det var å finne ressurser om å aktivere HTTPS på ASP.NET Kjerne.
dette blogginnlegget handler om prosessen med å opprette en lokal ASP.NET Core-nettsted som kjører MED HTTPS uten feil I Chrome (viser den grønne hengelåsen i adressefeltet) for din lokale utviklingstid. Og så hvordan du kan bruke Nginx eller Iis når du er klar til å utsette den for verden.
FOR Å bruke HTTPS trenger vi et digitalt sertifikat. Hvis du trenger å generere din egen til bruk på utviklingstid, anbefaler Jeg At Du Bruker OpenSSL Til Å Lage Sertifikater. Det forklarer ikke bare hvordan du kan opprette din egen sertifiseringsinstans og sertifikater, men også hvordan du kan konfigurere nettleseren Din (Chrome eller Firefox) for å stole på sertifiseringsinstansen.
Også, Hvis Du vil forstå hva som er rollen til sertifikater I HTTPS, så ta en titt På Kort(ish) forklaring på hvordan https fungerer.
fra nå av antar jeg at du har generert din sertifikatmyndighet, sertifikat og tilhørende privat nøkkel, og du har en .pfx (Personlig Informasjon Utveksling) fil.
Opprett et nytt prosjekt
jeg skal beskrive prosessen ved Hjelp Av Visual Studio Code og Yeoman.
hvis du ikke er kjent med yeoman, er det et kommandolinjeverktøy som lar deg lage nye prosjekter fra en liste over prosjektmaler. Yeoman generator (det er navnet på pakken for yeoman som inneholder malene) vi skal bruke er generator-aspnet. For å installere yeoman må du først npm og deretter kan du følge instruksjonene for å installere yeoman og ASP.NET Kjerne maler her.
grunnen til Å bruke Visual Studio Code og yeoman er at denne prosessen fungerer På Windows, Linux og macOS.
for å bruke yeoman med ASP.NET Kjernemaler kjø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#)
Velg Tøm Webprogram. Et enkelt webprosjekt vil bli opprettet som bare har side med teksten «Hello World».
hvis Du kjører Windows og har fullversjonen Av Visual Studio, kan Du bare Gjøre Fil- > Nytt Prosjekt, velg. Net Core, ASP.NET Kjerne Webapplikasjon, og velg Deretter Tom.
Konfigurere HTTPS For Kestrel
Kestrel Er webserveren som brukes som standard med ASP.NET Kjerne.
for Å legge TIL HTTPS-støtte til Kestrel, legg til Microsoft.AspNetCore.Server.Kestrel.Https
– pakken som en avhengighet.
hvis du bruker project.json du kan gjøre dette ved å redigere prosjektet.jsons» avhengigheter » – seksjon og legge til:
"Microsoft.AspNetCore.Server.Kestrel.Https": "1.1.0"
versjonsnummeret kan være forskjellig for deg, men det bør være det samme som det som brukes i Microsoft.AspNetCore.Server.Kestrel
– pakken.
hvis du bruker .csproj
kan du legge til avhengigheten ved å kjøre:
dotnet add package Microsoft.AspNetCore.Server.Kestrel.Https
Sertifikatkonfigurasjon
for å konfigurere Kestrel til å bruke vår.pfx-fil (sertifikat og privat nøkkel) vi må redigere Program.cs
der WebHostBuilder
blir opprettet og gjøre noen endringer:
var host = new WebHostBuilder() .UseConfiguration(config) .UseKestrel(options => { options.UseHttps("localhost.pfx", "password"); }) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseUrls("https://*:4430") .UseStartup<Startup>() .Build();
endringene er:
.UseKestrel(options => { options.UseHttps("localhost.pfx", "password");})
Det er der vi spesifiserer hva som er det .pfx fil som vi ønsker å bruke og dens passord. UseHttps
er en utvidelsesmetode, hvis du får en feil som sier at den ikke eksisterer, er det fordi du ikke la til nuget-pakken, som er der den bor.
Også:
.UseUrls("https://*:4430")
som definerer hvor Kestrel vil lytte etter innkommende tilkoblinger. Alternativt kan du bruke https://localhost:4430
i stedet for *
. Med *
kan du imidlertid bruke et hvilket som helst domenenavn, for eksempel hvis du har denne webapplikasjonen i myDomain.com
, vil det fortsatt fungere, mens med localhost
vil bare forespørsler til localhost
bli servert.
hvis du lurer på hvorfor jeg ikke brukte STANDARD HTTPS-port, 443, er det fordi du trenger spesielle tillatelser På Linux for porter under 1024. I Windows ville dette ikke være et problem. Men fordi det å gjøre Dette med Kestrel bare anbefales når du er i utviklingstid, er det ikke et stort problem.
hvis du prøver Dette I Linux, macOS eller bruker kommandolinjen I Windows, kan du ringe dotnet run
, åpne Chrome og gå til https://localhost:43000
og se et grønt hengelåsikon.
hvis du bruker full Visual Studio I Windows måten å gjøre dette er å angi at du vil kjøre webprogrammet direkte og ikke gjennom IIS Express:
velg også nettleseren du vil prøve den på. Hvis du har installert test root certificate authority-sertifikatet i en bestemt nettleser, bruker du den nettleseren, For Eksempel Chrome (hvis Du er forvirret av denne erklæringen, anbefaler jeg at du leser Kort (ish) forklaring på hvordan https fungerer og Bruker OpenSSL Til Å Lage Sertifikater):
til slutt rediger prosjektegenskapene (høyreklikk og velg egenskaper):
og endre startadressen:
Ved Å Bruke ASP.NET Kjerne med omvendt proxy
Selv om det er sikkert mulig å betjene et webprogram ved hjelp av ASP.NET Core bruker bare Kestrel, er det ikke anbefalt. Dette skyldes At Kestrel ikke er en fullverdig webserver og mangler fortsatt noen sikkerhetsfunksjoner.
selv om det ikke anbefales, vil du kanskje bare vise noe du har gjort til noen og hoppe over delen av å installere og konfigurere en webserver. Med tjenester Som DigitalOcean Eller Linode kan du opprette EN VPS på svært kort tid og bare ha din ASP.NET Kjerne tilgjengelig gjennom det bare å måtte installere. net core.
Men Hvis du vil ha noe mer seriøst (og du sannsynligvis gjør siden du er her på GRUNN AV å aktivere HTTPS), bør du bruke en fullverdig webserver, som Nginx eller Iis (I Windows), som en omvendt proxy til DIN ASP.NET Kjerne søknad.
en omvendt proxy-server er en webserver som godtar forespørsler og sender dem til en annen webserver som faktisk skaper svarene for disse forespørslene. Svarene sendes tilbake til proxy-serveren som videresender dem til klientene som utstedte de tilsvarende forespørslene.
Med Nginx som fungerer som en omvendt proxy, vil det se slik ut:
Browser <----> Nginx <----> Kestrel
det gode med dette oppsettet er at Vi kan dra nytte Av At Nginx (eller Iis) er en full webserver og aktiverer HTTPS på den:
Browser <---- HTTPS ---> Nginx <---- HTTP ----> Kestrel
Så vi trenger ikke engang å konfigurere Kestrel med HTTPS, bare Nginx.
Konfigurere HTTPS Med Nginx
først må du installere Nginx. Jeg bruker Ubuntu 16.04 for dette, men du kan til og med installere Den På Windows.
hvis Du kjører Ubuntu, åpner Du en terminal og skriver
$ sudo apt-get install nginx
Neste ting vi må gjøre er å redigere Nginxs konfigurasjon. Men før vi gjør det, er det nyttig å vite hva som er plasseringen av konfigurasjonsfilene og hvordan de blir aktivert. Mappen der konfigurasjonsfilene vanligvis er plassert er /etc/nginx/sites-available/
(denne plasseringen kan være annerledes hvis Du bruker En Annen Linux-distribusjon).
konfigurasjonsfilen som finnes når Du installerer Nginx heter default
.
For At En Nginx-konfigurasjon skal aktiveres, må Den være plassert i mappen /etc/nginx/sites-enabled
. Så etter å ha opprettet en ny konfigurasjonsfil (i sites-available
) opprettes en symbolsk lenke i sites-enabled
som peker på den nye filen.
Tenk deg at vi nettopp hadde opprettet en ny konfigurasjonsfil kalt my-site-https
i sites-available
. Deretter går du til mappen sites-enabled
og kjører følgende kommando for å lage en symbolsk lenke:
$ ln -s /etc/nginx/sites-available/my-site-htts
For Å få Nginx til å lese denne nye konfigurasjonen, kjør kommandoen:
$ sudo nginx -s reload
nå som vi vet hvordan du oppretter Og aktiverer Nginx-konfigurasjoner, la oss lage konfigurasjonsfilen for å sette Opp Nginx som en omvendt proxy til en ASP.NET Kjerneprogram som kjører på http://localhost:5000
.
opprett Først en ny fil i /etc/nginx/sites-available
navngitt, for eksempel aspnetcore
, med følgende innhold:
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 Nginx til listen
til port 443 ved HJELP AV SSL (443 er standard FOR HTTPS). Deretter spesifiserer vi hvor sertifikatet (ssl_certificate
) og privat nøkkel (ssl_certificate_key
) er plassert, og til slutt instruerer Vi Nginx om å videresende alle forespørsler (location /
vil matche alle forespørsler)til http://localhost:5000
.
opprett til Slutt den symbolske lenken til denne filen i sites-enabled
(du kan slette lenken til default
filen, dette vil ikke slette den opprinnelige filen siden det er en symbolsk lenke).
/etc/nginx/sites-enabled$ sudo ln -s /etc/nginx/sites-available/aspnetcore
For Å få Nginx til å laste denne konfigurasjonen:
$ sudo nginx -s reload
hvis du har din ASP.NET Kjerneprogram som kjører på http://localhost:5000
du skal nå kunne åpne https://localhost
og se at den blir servert OVER HTTPS.
Det er et vanlig problem som kan skje når Du laster Inn Nginx-konfigurasjonen, som du blir bedt om et passord. Spesielt for privat nøkkel passord. Dette kan ikke være praktisk for deg, så hvis du vil fjerne passordet fra den private nøkkelen, kan du kjøre følgende kommando:
$ openssl rsa -in privateKeyWithPassword.pem -out privateKeyWithoutPassword.pem
En annen nyttig ting Du kan gjøre Med Nginx er å få alle forespørsler OM HTTP omdirigert TIL HTTPS. Hvis du vil aktivere dette, legg til denne ekstra konfigurasjonen til deg aspnetcore
Nginx konfigurasjonsfil:
server { listen 80; return 301 https://$host$request_uri;}
Konfigurere Veileder
En ting vi må bry oss med er at vi trenger å holde Vår ASP.NET Kjerne web-applikasjon kjører.
Det er et verktøy som heter supervisor som lar oss konfigurere at et program skal startes ved oppstartstid, og hvis det krasjer, bør det hentes opp
Det Første vi må gjøre er å installere det. Jeg bruker Ubuntu 16.04 for dette, og i denne distribusjonen er det veldig enkelt å installere:
$ sudo apt-get install supervisor
Neste ting vi trenger å gjøre er å lage en veileder konfigurasjonsfil for vår web-applikasjon. La oss kalle det aspnetcore.conf
og legge det til /etc/supervisor/conf.d
(du må gjøre dette ved hjelp av sudo):
Plasser dette i konfigurasjonsfilen:
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 linjen definerer navnet (aspnetcore
) som vi kan referere til webapplikasjonen i veileder.
linjen med command
definerer kommandoen som skal kjøres. I dette tilfellet er det dotnet
etterfulgt av webapplikasjonens dll. Dette tilsvarer å kjøre dotnet run
i roten av prosjektet.
neste linje (directory=
) angir arbeidskatalogen som den der prosjektet ligger.
autostart=true
betyr at programmet vil bli startet ved oppstartstid.
autorestart=true
betyr at programmet vil bli startet på nytt hvis det krasjer eller selv om det er stoppet (for eksempel ved hjelp av kill
). Hvis du vil at programmet skal bare startes på nytt i tilfelle en krasj endre den til autorestart=unexpected
.
de neste to linjene definerer hvilke filer standard-og feilutgangen skrives til, henholdsvis.
Endelig environment
lar oss sette miljøvariabler, i dette tilfellet setter vi ASPNETCORE_ENVIRONMENT=Production
.
for å aktivere denne nye konfigurasjonsfilen, kjør følgende kommandoer:
$ sudo supervisorctl reread$ sudo supervisorctl update
du kan sjekke statusen til prosessene som kjører under supervisor ved å kjøre
$ sudo supervisorctl
det skal vise noe som ligner på:
aspnetcore SOM KJØRER pid 18817, oppetid 0:05:29
supervisor>
det er flere flere kommandoer du kan bruke til å administrere prosesser under veileder skriver du inn help
for en liste over tilgjengelige kommandoer. For å avslutte, skriv bare quit
.
Konfigurere HTTPS med IIS
det første trinnet i å aktivere HTTPS mens du bruker IIS, er å installere sertifikatet og den private nøkkelen (ved hjelp av en .pfx-fil som inneholder begge).
Åpne Iis Manager Og velg Serversertifikater
Klikk importer sertifikat:
Velg Den .pfx-fil og skriv inn det tilsvarende passordet, la butikken være Som Personlig:
Før vi fortsetter, er det viktig å nevne at du må ha ASP.NET Kjernemodul installert. Det er svært sannsynlig at du allerede gjør siden det er installert for deg når Du installerer. Net Core SDK.
Men hvis det ikke er (du kan bekrefte det i IIS Manager ved å åpne Moduler og sjekke Om AspNetCoreModule er oppført der), kan du finne installasjonsinstruksjoner her og en direkte link for nedlasting av ASP.NET Kjerne Server Hosting Pakke her.
hva denne modulen gjør er å starte ASP.NET Kjerne nettsted og holde den i gang(starte den hvis den krasjer). Denne modulen er også ansvarlig for å videresende HTTP-forespørsler til web app og deretter videresende svarene tilbake til klienten.
en viktig ting å vite Om AspNetCoreModule er at den er konfigurert av filen web.config
i roten til prosjektet. Du må kjøre dotnet publish
på prosjektet for å få web.config
oppsett riktig i publiser-mappen.
neste trinn er å opprette et Nytt Applikasjonsutvalg og velge Ingen Administrert Kode som.NET CLR-Versjonen. Normalt kjører nettstedene i EN iis-arbeidsprosess, MEN i. NET Core kjører de som en egen prosess, så det er ikke behov For En. Net-Kjøretid i apputvalget:
Til Slutt, la oss lage et nytt nettsted i IIS for vår ASP.NET Kjerne søknad. Vi må velge app-bassenget vi nettopp har opprettet, velg Som Den Fysiske Banen banen til den publiserte nettsiden, velg HTTPS som bindingen og sertifikatet vårt I SSL-sertifikat-rullegardinmenyen:
Du skal nå kunne bruke https for å bla til din ASP.NET Kjerne app.