Hur man skaffar ett gratis SSL/HTTPS Certifikat.
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".

  1. 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"
  2. Tryck på knappen "Skip" i steget "Generate Private Key".
  3. Kopiera sedan in innehållet i certifiaktansökan.csr till text-boxen.
  4. Efter en bekräftelse på att det fungerade trycker du på "Continue" och sedan väljer du ditt domän-namn.
  5. 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

Din domän: (*)

(*) Du skickas vidare till ssllabs.com.

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


Följ mig via RSS:   RSS https://zäta.com/rss.xml (ange adressen i din feed-läsare)