Hvordan Lage Et Selvsignert SSL-Sertifikat For Apache I Ubuntu 16.04
Introduksjon
TLS, eller transport layer security, og dets forgjenger SSL, som står for secure sockets layer, er webprotokoller som brukes til å pakke normal trafikk i et beskyttet, kryptert omslag.
ved hjelp av denne teknologien kan servere sende trafikk trygt mellom serveren og klientene uten mulighet for at meldingene blir fanget opp av utenforstående parter. Sertifikatsystemet hjelper også brukere med å verifisere identiteten til nettstedene de kobler til.
i denne veiledningen vil vi vise deg hvordan du konfigurerer et selvsignert SSL-sertifikat for Bruk Med En Apache-webserver på En Ubuntu 16.04-server.
Merk: et selvsignert sertifikat vil kryptere kommunikasjon mellom serveren din og eventuelle klienter. Men fordi det ikke er signert av noen av de klarerte sertifikatmyndighetene som følger med nettlesere, kan brukere ikke bruke sertifikatet til å validere identiteten til serveren din automatisk.
et selvsignert sertifikat kan være aktuelt hvis du ikke har et domenenavn knyttet til serveren din, og for tilfeller der det krypterte webgrensesnittet ikke er vendt mot brukeren. Hvis du har et domenenavn, er det i mange tilfeller bedre å bruke ET CA-signert sertifikat. Du kan finne ut hvordan du setter opp et gratis klarert sertifikat med Let ‘ S Encrypt-prosjektet her.
Forutsetninger
før du begynner, bør du ha en ikke-root-bruker konfigurert med sudo
privilegier. Du kan lære å sette opp en slik brukerkonto ved å følge vårt første serveroppsett For Ubuntu 16.04.
Du må også ha Apache webserveren installert. Hvis du vil installere EN hel LAMP (Linux, Apache, MySQL, PHP) stabel på serveren din, kan du følge vår guide for å sette OPP LAMP på Ubuntu 16.04. Hvis Du bare vil Ha Apache webserveren, hopp over trinnene knyttet TIL PHP og MySQL i guiden.
når du har fullført forutsetningene, fortsett nedenfor.
Trinn 1: Opprett SSL-Sertifikatet
tls / SSL fungerer ved å bruke en kombinasjon av et offentlig sertifikat og en privat nøkkel. SSL-nøkkelen holdes hemmelig på serveren. Den brukes til å kryptere innhold sendt til klienter. SSL-sertifikatet deles offentlig med alle som ber om innholdet. Den kan brukes til å dekryptere innholdet signert AV den tilhørende SSL-nøkkelen.
vi kan opprette et selvsignert nøkkel – og sertifikatpar Med OpenSSL i en enkelt kommando:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
Du vil bli spurt en rekke spørsmål. Før vi går over det, la oss ta en titt på hva som skjer i kommandoen vi utsteder:
- openssl: dette er det grunnleggende kommandolinjeverktøyet for å opprette Og administrere OpenSSL-sertifikater, nøkler og andre filer.
- req: denne delkommandoen angir At Vi vil bruke x. 509 certificate signing request (CSR) management. «X. 509» er en offentlig nøkkel infrastrukturstandard SOM SSL og TLS overholder for sin nøkkel-og sertifikatadministrasjon. Vi ønsker å opprette Et Nytt x. 509 cert, så vi bruker denne underkommandoen.
- – x509: Dette endrer videre den forrige underkommandoen ved å fortelle verktøyet at vi vil lage et selvsignert sertifikat i stedet for å generere en sertifikatsigneringsforespørsel, som normalt ville skje.
- – noder: Dette forteller OpenSSL å hoppe over muligheten til å sikre sertifikatet vårt med en passordfrase. Vi trenger Apache for å kunne lese filen, uten brukermedvirkning, når serveren starter opp. En passordfrase vil forhindre at dette skjer fordi vi må skrive det inn etter hver omstart.
- – dagen 365: Dette alternativet angir hvor lenge sertifikatet skal anses som gyldig. Vi satte det i ett år her.
- – newkey rsa: 2048: dette angir at vi ønsker å generere et nytt sertifikat og en ny nøkkel samtidig. Vi opprettet ikke nøkkelen som kreves for å signere sertifikatet i et tidligere trinn, så vi må opprette det sammen med sertifikatet. Delen
rsa:2048
forteller den å lage EN RSA-nøkkel som er 2048 bits lang. - – keyout: denne linjen forteller OpenSSL hvor du skal plassere den genererte private nøkkelfilen som vi lager.
- – ut: Dette forteller OpenSSL hvor du skal plassere sertifikatet som vi oppretter.
som vi nevnte ovenfor, vil disse alternativene opprette både en nøkkelfil og et sertifikat. Vi vil bli spurt noen spørsmål om vår server for å legge inn informasjonen riktig i sertifikatet.
Fyll ut instruksjonene på riktig måte. Den viktigste linjen er den som ber om Common Name (e.g. server FQDN or YOUR name)
. Du må skrive inn domenenavnet som er knyttet til serveren din eller, mer sannsynlig, serverens offentlige IP-adresse.
hele instruksjonene vil se omtrent slik ut:
OutputCountry Name (2 letter code) :USState or Province Name (full name) :New YorkLocality Name (eg, city) :New York CityOrganization Name (eg, company) :Bouncy Castles, Inc.Organizational Unit Name (eg, section) :Ministry of Water SlidesCommon Name (e.g. server FQDN or YOUR name) :server_IP_addressEmail Address :admin@your_domain.com
begge filene du opprettet, vil bli plassert i de aktuelle underkatalogene i katalogen /etc/ssl
.
Mens Vi bruker OpenSSL, bør Vi også skape en sterk Diffie-Hellman-gruppe, som brukes til å forhandle Frem Perfekt Hemmelighold med klienter.
Vi kan gjøre Dette ved å skrive:
- sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Dette kan ta noen minutter, men når det er gjort, vil du ha en sterk DH-gruppe på /etc/ssl/certs/dhparam.pem
som vi kan bruke i vår konfigurasjon.
Trinn 2: Konfigurer Apache Til Å Bruke SSL
vi har opprettet våre nøkkel-og sertifikatfiler under katalogen /etc/ssl
. Nå trenger vi bare å endre Vår Apache-konfigurasjon for å dra nytte av disse.
Vi vil gjøre noen justeringer i konfigurasjonen vår:
- vi vil opprette en konfigurasjonskodebit for å angi sterke STANDARD SSL-innstillinger.
- vi vil endre DEN inkluderte SSL Apache Virtual Host-filen til å peke på våre genererte SSL-sertifikater.
- (Anbefales) vi vil endre den ukrypterte Virtuelle Vertsfilen for å automatisk omdirigere forespørsler til den krypterte Virtuelle Verten.
når vi er ferdige, bør VI ha en sikker SSL-konfigurasjon.
Opprett En Apache – Konfigurasjonskodebit Med Sterke Krypteringsinnstillinger
Først oppretter Vi En Apache-konfigurasjonskodebit for å definere NOEN SSL-innstillinger. Dette vil sette Apache opp med en sterk SSL cipher suite og aktivere noen avanserte funksjoner som vil bidra til å holde vår server sikker. Parametrene vi vil sette kan brukes av Alle Virtuelle Verter som aktiverer SSL.
Opprett en ny kodebit i katalogen /etc/apache2/conf-available
. Vi vil navngi filen ssl-params.conf
for å gjøre formålet klart:
- sudo nano /etc/apache2/conf-available/ssl-params.conf
for å sette Opp Apache SSL sikkert, bruker Vi anbefalingene Fra Remy van Elst på Cipherli.st nettstedet. Dette nettstedet er designet for å gi enkle krypteringsinnstillinger for populær programvare. Du kan lese mer om hans beslutninger om Apache-valgene her.
de foreslåtte innstillingene på nettstedet som er koblet til ovenfor, gir sterk sikkerhet. Noen ganger, dette kommer på bekostning av større klient kompatibilitet. Hvis du trenger å støtte eldre klienter, er det en alternativ liste som kan nås ved å klikke på linken på siden merket » Ja, gi meg en ciphersuite som fungerer med eldre / gammel programvare.»Den listen kan erstattes av elementene som er kopiert nedenfor.
valget av hvilken config du bruker vil i stor grad avhenge av hva du trenger å støtte. De vil begge gi stor sikkerhet.
for vårt formål kan vi kopiere de angitte innstillingene i sin helhet. Vi vil bare gjøre to små endringer.
Sett SSLOpenSSLConfCmd DHParameters
direktivet til å peke På Diffie-Hellman-filen vi genererte tidligere. Også ta deg tid til å lese OPP PÅ HTTP Strict Transport Security, ELLER HSTS, og spesielt om» preload » funksjonalitet. Forhåndsinnlasting AV HSTS gir økt sikkerhet, men kan ha vidtgående konsekvenser hvis det ved et uhell er aktivert eller aktivert feil. I denne veiledningen vil vi ikke forhåndslaste innstillingene, men du kan endre det hvis du er sikker på at du forstår implikasjonene:
# from https://cipherli.st/# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.htmlSSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDHSSLProtocol All -SSLv2 -SSLv3SSLHonorCipherOrder On# Disable preloading HSTS for now. You can use the commented out header line that includes# the "preload" directive if you understand the implications.#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"Header always set X-Frame-Options DENYHeader always set X-Content-Type-Options nosniff# Requires Apache >= 2.4SSLCompression off SSLSessionTickets OffSSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)"SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
Lagre og lukk filen når du er ferdig.
Endre Standard Apache SSL Virtuell Vertsfil
Neste, la oss endre /etc/apache2/sites-available/default-ssl.conf
, standard Apache SSL Virtuell Vertsfil. Hvis du bruker en annen serverblokkfil, kan du erstatte navnet i kommandoene nedenfor.
før Vi går videre, la oss sikkerhetskopiere DEN opprinnelige SSL Virtual Host-filen:
- sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
åpne NÅ SSL Virtual Host-filen for å gjøre justeringer:
- sudo nano /etc/apache2/sites-available/default-ssl.conf
Inne, med de fleste kommentarene fjernet, Bør Den Virtuelle Vertsfilen se slik ut som standard:
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> # BrowserMatch "MSIE " \ # nokeepalive ssl-unclean-shutdown \ # downgrade-1.0 force-response-1.0 </VirtualHost></IfModule>
vi vil gjøre noen mindre justeringer av filen. Vi vil sette de vanlige tingene vi ønsker å justere I En Virtuell Vertsfil(ServerAdmin e-postadresse, Servernavn, etc.), juster SSL-direktivene for å peke på vårt sertifikat og nøkkelfiler, og uncomment en seksjon som gir kompatibilitet for eldre nettlesere.
etter å ha gjort disse endringene, bør serverblokken din se ut som dette:
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin [email protected] ServerName server_domain_or_IP DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE " \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost></IfModule>
Lagre og lukk filen når du er ferdig.
(Anbefalt) Endre Den Ukrypterte Virtuelle Vertsfilen For Å Omdirigere TIL HTTPS
som den står nå, vil serveren gi både ukryptert HTTP og kryptert HTTPS-trafikk. For bedre sikkerhet anbefales det i de fleste tilfeller å omdirigere HTTP til HTTPS automatisk. Hvis du ikke vil eller trenger denne funksjonaliteten, kan du trygt hoppe over denne delen.
for å justere ukryptert Virtuell Vertsfil for å omdirigere all trafikk TIL SSL-kryptert, kan vi åpne filen /etc/apache2/sites-available/000-default.conf
:
- sudo nano /etc/apache2/sites-available/000-default.conf
Inne, innenfor VirtualHost
konfigurasjonsblokker, trenger vi bare å legge til et Redirect
-direktiv som peker all trafikk TIL SSL-versjonen av nettstedet:
<VirtualHost *:80> . . . Redirect "/" "https://your_domain_or_IP/" . . .</VirtualHost>
Lagre og lukk filen når du er ferdig.
Trinn 3: Juster Brannmuren
hvis du har brannmuren ufw
aktivert, som anbefalt av de nødvendige veiledningene, må du kanskje justere innstillingene for Å tillate SSL-trafikk. Heldigvis registrerer Apache noen profiler med ufw
ved installasjon.
vi kan se de tilgjengelige profilene ved å skrive:
- sudo ufw app list
Du bør se en liste som dette:
OutputAvailable applications: Apache Apache Full Apache Secure OpenSSH
du kan se gjeldende innstilling ved å skrive:
- sudo ufw status
hvis du bare tillot vanlig HTTP-trafikk tidligere, kan utgangen din se slik ut:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereApache ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Apache (v6) ALLOW Anywhere (v6)
for å i tillegg slippe INN HTTPS-trafikk, kan vi tillate» Apache Full «- profilen og deretter slette den overflødige» Apache » – profilgodtgjørelsen:
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 'Apache'
din status skal se slik ut nå:
- sudo ufw status
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereApache Full ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Apache Full (v6) ALLOW Anywhere (v6)
Trinn 4: Aktiver Endringene I Apache
Nå som vi har gjort endringene våre Og justert brannmuren, kan vi aktivere SSL-og toppmodulene I Apache, aktivere VÅR SSL-klare Virtuelle Vert og starte Apache På Nytt.
vi kan aktivere mod_ssl
, Apache SSL-modulen og mod_headers
, som trengs av noen av innstillingene i VÅR SSL-kodebit, med kommandoen a2enmod
:
- sudo a2enmod ssl
- sudo a2enmod headers
Deretter kan vi aktivere VÅR SSL Virtuelle Vert med kommandoen a2ensite
:
- sudo a2ensite default-ssl
Vi må også aktivere vår ssl-params.conf
fil, for å lese i verdiene vi angir:
- sudo a2enconf ssl-params
på dette tidspunktet er nettstedet vårt og de nødvendige modulene aktivert. Vi bør sjekke for å sikre at det ikke er noen syntaksfeil i filene våre. Vi kan gjøre dette ved å skrive:
- sudo apache2ctl configtest
hvis alt er vellykket, får du et resultat som ser slik ut:
OutputAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this messageSyntax OK
den første linjen er bare en melding som forteller deg at ServerName
direktivet ikke er satt globalt. Hvis du vil bli kvitt den meldingen, kan du angi ServerName
til serverens domenenavn eller IP-adresse i /etc/apache2/apache2.conf
. Dette er valgfritt da meldingen ikke vil skade.
hvis utdataene dine har Syntax OK
i det, har konfigurasjonsfilen ingen syntaksfeil. Vi kan trygt starte Apache å implementere våre endringer:
- sudo systemctl restart apache2
Trinn 5: Test Kryptering
Nå er Vi klare til å teste VÅR SSL-server.
Åpne nettleseren og skriv https://
etterfulgt av serverens domenenavn eller IP i adressefeltet:
https://server_domain_or_IP
fordi sertifikatet vi opprettet ikke er signert av en av nettleserens klarerte sertifikatmyndigheter, vil du sannsynligvis se en skremmende advarsel som den nedenfor:
dette er forventet og normalt. Vi er bare interessert i krypteringsaspektet av sertifikatet vårt, ikke tredjeparts validering av vertens ekthet. Klikk «AVANSERT» og deretter linken for å fortsette til verten anyways:
du bør bli tatt til nettstedet ditt. Hvis du ser i nettleserens adressefelt, vil du se en lås med en «x» over den. I dette tilfellet betyr dette bare at sertifikatet ikke kan valideres. Det krypterer fortsatt tilkoblingen din.
hvis Du konfigurerte Apache til å omdirigere HTTP TIL HTTPS, kan du også sjekke om omdirigeringen fungerer riktig:
http://server_domain_or_IP
hvis dette resulterer i samme ikon, betyr dette at omdirigeringen din fungerte riktig.
Trinn 6: Endre Til En Permanent Omdirigering
hvis omdirigeringen fungerte riktig Og du er sikker på at du bare vil tillate kryptert trafikk, bør du endre Den ukrypterte Apache Virtuelle Verten igjen for å gjøre omdirigeringen permanent.
Åpne konfigurasjonsfilen for serverblokkering på nytt:
- sudo nano /etc/apache2/sites-available/000-default.conf
Finn Redirect
linjen vi la til tidligere. Legg til permanent
til den linjen, som endrer omdirigeringen fra en 302 midlertidig omdirigering til en 301 permanent omdirigering:
<VirtualHost *:80> . . . Redirect permanent "/" "https://your_domain_or_IP/" . . .</VirtualHost>
Lagre og lukk filen.
Kontroller konfigurasjonen for syntaksfeil:
- sudo apache2ctl configtest
når Du er klar, start Apache På Nytt for å gjøre omdirigeringen permanent:
- sudo systemctl restart apache2
Konklusjon
Du har konfigurert Apache-serveren din til å bruke sterk kryptering for klienttilkoblinger. Dette vil tillate deg tjene forespørsler sikkert, og vil hindre utenforstående fra å lese trafikken.