Skapa självsignerat certifikat

Vi ska skapa ett så kallat self-signed certifikat, eller självsignerat certifikat. Det betyder att vi inte har fått dem utfärdade av en godkänd certifikatutfärdare, utan, som det framgår av namnet, har utfärdat certifikatet själv. Det betyder inte att krypteringen är sämre. I praktiken innebär det att vår webbläsare kommer att varna för våra sidor. Men så länge det bara är vi själv som surfar in på sidorna innebär det inga problem. Vi behöver bara godkänna att webbläsaren släpper in oss på sidan. Det ser lite olika ut på webbläsarna, så jag går inte in på det här. Däremot innebär det problem om andra ska in på vår sida. När varningen kommer upp undrar de förstås om det innebär risker att surfa in där. Det finns billiga certifikat, och till och med gratis. Dock har jag inte provat de senare. Men det är bra övning att lägga in certifikat själv. Om vi sen tycker att vi behöver ett köpe-certifikat vet vi vad det handlar om och kan lättare installera det.

 Ok! Vi kör. Första kommandot är nedanstående.

 

Sen ska vi göra ytterligare en sak, något som kallas att få en signing request-fil.

# openssl req -new -key ftps.ingos.se -out ftps.ingos.se.csr -sha512

Ska förklara lite: -new betyder förstås att vi gör en ny .csr-fil, efter växeln -key kommer namnet på vår privata nyckel som vi gjorde i det första kommandot, -out och filna,mnet efter är filen vi vill göra och sist har vi krypteringsgraden -sha512. Det kommer upp olika frågor och det är ett par som är viktiga. En är: Common Name. Där måste man skriva in den site det gäller. I mitt fall är det ftps.ingos.se. Du ska inte skriva in värdnamnet på den server som driver siten. Lätt att missförstå då det i en del guider skrivs att man ska skriva in sitt värddnamn, eller hostname. Och sen kommer frågan om lösenord. Det är fråga om säkerhet. Om den privata nyckeln skulle bli hackad, blir det svårare att manipulera i den om vi har den skyddad med lösenord. Men nackdelen är att varje gång servern som siten går på startas om krävs lösenordet. Och då gäller det att någon skriver in lösenordet. Annars kommer siten att ligga nere. Det finns sätt att kringgå detta, men jag tar inte upp det här.

Sen ska vi göra det publika certifikatet. Följande kommando löser det åt oss.

# openssl x509 -req  -days 365 -in ftps.ingos.se.csr -signkey ftps.ingos.se.key -out ftps.ingos.se.crt -sha512

I och med att jag förklarade förrförra kommandot är det ganska uppenbart vad detta handlar om. Sen ska vi placera certifikatet och den privata nyckeln på rätta ställen. .csr-filen kan vi kasta.

# cp ftps.ingos.se.key /etc/pki/tls/private

# cp ftps.ingos.se.crt /etc/pki/tls/certs

Sist men inte minst måste förstås webbservern veta av detta. I Nginx ser det ut så här. Och filen det ska skrivas in i varierar. Men jag filen i /etc/nginx/sites-enabled/.

En viktig sak ytterligare är att säkra den privata nyckeln så hårt som möjligt. Inskränk rättigheterna så här:

 Ni ser att också katalogen private endast har läsrättigher för ägaren av filen. Det ser man av raden som börjar med dr och den blå punkten längst till höger syftar på den aktuella katalogen, alltså private.

Ja, nu när vi har kommit så här långt kanske det tycks underligt att visa på ett mer automatiserat och enklare sätt att göra detta på. Men det första sättet gör att man förstår, i alla fall något bättre vad det handlar om.

Ok, då kör vi det lättare sättet. Du måste, om du kört efter guiden, ta bort eller flytta den privata nyckeln, och certifikatet till något annat ställe. Annars kommer genkey säga ifrån om du använder samma Common Name. Om du kör Fedora 23 så installera crypto-utils. Här ser vi att jag försökte köra genkey, men var tvungen att installera paketet.

Och det gick bra som synes.

 

Sen ska vi göra den privata nyckeln och det publika  certifikatet. Kom bara ihåg att hostname ska vara den webb-site som ska nås, t ex ingos.se eller underdomänen ftps.ingos.se som för mig. Du ska alltså inte använda värdnamnet på den dator som din webb-server kör på. Det är lätt att missförstå eftersom många guider gör gällande att man ska använda hostname, och då kanske man tror att det är värdnamnet på datorn.

#genkey ftps.ingos.se

Kolla noga att genkey väljer rätt ställe. Jag är nöjd och trycker på tabb för att komma till "Next".

Vi får ett förslag, och även en förklaring som verkar rimlig, vilken jag nappar på.

Det här tar ett tag. Varför det tar längre tid än via konsollen har jag inte en aning om. För mig tog det knappa fem minuter.

Nästa steg tar längre tid, ungefär 15 minuter.

Om vi hade köpt ett certifikat från någon auktoriserad utfärdare så hade vi valt "Yes" för att göra en begäran från en riktig CA.
 

Men jag kommer att välja "No" då jag har ett självsignerat certifikat.

Här måste vi tänka oss för precis som jag skrev i den första guiden. Om vi väljer att ha ett lösenordsskydd på den privata nyckeln innebär det att vi måste åtgärda problem vid omstart av servern. För om vi väljer lösenordsskydd här måste lösenord anges varje gång vid omstart. Och då måste någon göra det manuellt eller - så måste vi automatisera det. Men det går jag inte in på här. Ha det i åtanke bara. 

 

Och resten behöver jag inte förklara för dem som har gjort certifikatet på det manuella sättet. Skulle ni ha glömt eller valde att hoppa hit direkt så finns förklaringen och alternativen förklarade tidigare i guiden i det manuella utförandet. Här nedanför ser ni att det jag skrev som växel till genkey, dvs ftps.ingos.se, har fyllts i åt mig på raden med Common Name. Det andra måste vi givetvis ändra efter behov.

Så för mig blev det så här:

Och nu kan vi se vad kommandot har gjort när allt är klart.

Det som återstår är att föra in uppgifterna om var certifikatet och den privata nyckeln är placerade i konfigurationsfilen för webbservern. Jag har tidigare visat hur man gör i Nginx. Notera också att jag avkommenterat det gamla osäkra krypteringssättet, SSLv3, av säkerhetsskäl.

Och genkey har strypt rättighetrna till det minimala som ni ser. Bara ägaren kan läsa nyckeln.

Klart!