Och installerar det på Nginx webserver.
Gratis HTTPS till hemsidan
Vill du ha ett grönt hänglås bredvid din URL i webbläsaren? Eller kanske kryptera kommunikationen mellan webbservern och webbläsaren!? De flesta operatörer tar ut över 1000 kr för detta. Men du kan få ett SSL certifikat helt gratis!
För denna guide behöver du programmet openssl. Det används för att skapa RSA-nycklar och certifikat-ansökningar. Openssl finns både för linux och windows.
Denna guide antar att du använder Linux, men det går även i Windows om du är vän med kommando-prompten.
OBS! Denna guide använde StartSSL som signerade certifikat, de har dock blivit uppköpta och erbjuder sedan januari 2018 inte längre gratis-certifikat!
Jag rekommenderar att använda letsencrypt.
Jag har gjort ett nodejs script för att generera letsencrypt-certifikat till Nginx, kolla även certbot.
RSA-nycklar
RSA är ett populärt krypteringssystem som använder sig av publika och privata nycklar: Man delar ut sin publika nyckel, som används för att kryptera/låsa en fil. Sedan går det bara att dekryptera/låsa upp filen med privata nyckeln!
För att skapa en privat nyckel med openssl:
openssl genrsa -des3 -out privatnyckel.key 4096
Detta skapar filen privatnyckel.key med lösenords-skydd (-des3) och 4096 data-bitar (ettor/nollor). Ju fler databitar desto svårare blir det att gissa sig till nyckeln.
Skapa en certifikat-ansökan
openssl req -new -key privatnyckel.key -out certifiaktansökan.csr
privatnyckel.key används för att generara den publika nyckeln som sparas i certifiaktansökan.csr tillsammans med domän, namn, företag etc.
Proffs-Tips
Använd ditt domän-namn för att lättare hålla reda på nycklarna!
Om ditt domän-namn är "mydomain.se", döp privatnyckel.key till mydomain.se.key och certifiaktansökan.csr till mydomain.se.csr.
Samt mittcertifikat.crt till mydomain.se.crt
Certifikat
Ett ssl/tsl/https certifikat innehåller den publika RSA-nyckeln, samt en signatur. Du kan signera ditt certifikat själv,
men då kommer det upp en röd varnings-ruta i webbläsaren som säger att certifikatet är själv-signerat och inte går att lita på.
Därför bör du anlita en auktoriserad certifierings-byrå som kan intyga att ditt certifikat är äkta.
En sida som gör detta gratis är StartSSL.
När du signar upp på StartSSL installeras ett klient-certifikat i din webbläsare. Ta en backup på detta så att du slipper göra om processen i framtiden.
Innan du skapar ett certifikat måste du bevisa (Validations Wizard) för StartSSL att du är ägare till ditt domännamn, genom att de skickar ett mail med en kod till webmaster@ eller den address som syns i "whois".
- När du är inloggad på StartSSL och har validerat din domän, tryck på fliken "Certificates Wizard" och välj "Web Server SSL/TSL Certificate" i drop-down listan "Certificate Target"
- Tryck på knappen "Skip" i steget "Generate Private Key".
- Kopiera sedan in innehållet i certifiaktansökan.csr till text-boxen.
- Efter en bekräftelse på att det fungerade trycker du på "Continue" och sedan väljer du ditt domän-namn.
- Sedan ska du välja en subdomän som också ska gå att använda SSL/TSL/HTTPS på. Vanligast är www.
När det är klart får du en text-ruta med ditt certifikat. Kopiera texten och spara som certifikat.crt
OBS! Inga extra radbrythingar efter -----END CERTIFICATE-----
Ditt StartSSL certifikat är giltigt i ett år. Och det går bara att skapa nytt/ändra när det är två veckor kvar tills det gamla går ut: Du får då en påminnelse via e-post.
Bifoga StartSSL i certifikat.crt
Du kanske måste bifoga StartSSL's medlar/mellanhand-certifiakt ("Class 1 Intermediate Server CA") i ditt certifikat ...
Root-certifikatet ("StartCom Root CA") är förmodligen installerat i alla webbläsare, men det kan vara en god ide att bifoga det också.
Dina besökare litar på root-certifiaktet som är installerat i webbläsaren, som intygar att StartSSL's mellan-hands certifiaktet är äkta,
och som i sin tur intygar att ditt certifiakt är äkta.
Klicka på fliken "Tool Box" och länken "StartCom CA Certificates" för att ladda hem dem, eller använd wget:
wget https://www.startssl.com/certs/ca.pem wget https://www.startssl.com/certs/sub.class1.server.ca.pem
Klistra sedan in dessa certifiakt i ditt certifikat:
cat certifikat.crt sub.class1.server.ca.pem ca.pem > mittcertifikat.crt
Installera certifikatet
Du har nu en .crt fil som går att använda i nginx, IIS, Apache mm.
Dessa program kommer dock att behöva din privata nyckel för att dekryptera/låsa upp meddelanden.
För att nginx med flera ska kunna läsa nyckeln måste du ge dem en nyckel som inte är lösenords-skyddad:
sudo openssl rsa -in privatnyckel.key -out /etc/nginx/ssl/mydomain.se.key
Se till att endast root eller programmet har läs-behörighet till denna nyckel:
sudo chmod 600 /etc/nginx/ssl/mydomain.se.key
Inställningar i nginx
server { listen 443 ssl; server_name mydomain.se; ssl_certificate /etc/nginx/ssl/mydomain.se.crt; ssl_certificate_key /etc/nginx/ssl/mydomain.se.key;
Efter att du lagt till sökvägarna till certifikatet och nyckeln i hemsidans config laddar du om nginx:
sudo service nginx reload
Om det blev något fel kan du kolla det med:
sudo nginx -t
Testa dina inställningar
Säkra din SSL
Om du inte får betyg A från testet ovan beror det troligtvis på att din server tillåter osäkra chiffer (kod-språk). Jag rekommenderar denna guide på engelska med diverse konfigurationer för olika appar.
SSL vs TLS vs HTTPS
HTTPS är ett protokoll för säker kommunikation över internet. Det är HTTP (Hyper-text protokollet) fast med en krypterad anslutning (TSL) på TCP port 443.
I början kallades det SSL: "Secure Sockets Layer", men kallas numera TLS: "Transport Layer Security".
Det är viktigt att använda sig av den senaste versionen av TLS då det hela tiden hittas nya sätt att knäcka krypteringen.
Blogginlägg skrivet av Johan Zetterberg