Jag behöver skapa mitt eget CA för ett intranät och tyvärr verkar det inte finnas något bra svar om detta på säkerhet. SE.
Det finns många resurser online om detta, men alla är olika och vissa använder föråldrade standardvärden (MD5 / SHA1, etc) som inte verkar vara så pålitliga. Det finns också hundratals olika varianter av openssl.cnf
, allt från en 10-radsfil till den enorma som medföljer som standard med min distribution.
Jag skulle vilja ett kanoniskt svar om att ställa in en enkel CA för utfärdande av servercertifikat och klientcertifikat.
Tydligen verkar det som om vissa människor fortfarande inte förstår att jag inte är något stort företag där en CA-kompromiss orsakar miljarder förluster och kan inte mildras lätt så låt mig förklara lite bättre varför jag behöver CA:
-
flera servrar anslutna via osäkra länkar (Internet ) måste kommunicera säkert.
-
Jag behöver ett sätt att identifiera mig för dessa servrar för att utföra administrativa uppgifter utan att gå fram och tillbaka till min lösenordshanterare var tionde sekund.
-
nej andra certifikatutfärdare än min borde kunna imitera någon av servrarna, oavsett hur osannolikt ( men möjligt ) det vill säga .
Där. Mitt eget PKI och ett certifikat installerat på varje maskin verkar passa perfekt. En av programvarorna jag använder kräver också användning av en PKI, så att bara använda självsignerade certifikat är inte ett alternativ.
För att kompromissa med PKI skulle någon behöva kompromissa med min arbetsmaskin, och om det ”gjort så kan angriparen redan göra en hel del skada utan att ens röra vid PKI (eftersom jag ändå skulle logga in via SSH till servern från denna maskin). Det är en risk som jag accepterar att ta, och denna PKI lägger inte till mer risk än vad som redan finns.
Kommentarer
Svar
Om din infrastruktur är liten , mycket av detaljerna i att köra en CA (t.ex. CRL och sådant) kan antagligen ignoreras. Istället är allt du verkligen behöver oroa dig för att underteckna certifikat.
Det finns många verktyg där ute som kommer att hantera denna process åt dig. Jag skrev till och med ett för många år sedan. Men det jag rekommenderar om du vill att något riktigt enkelt är easy-rsa från OpenVPN-projektet. Det är ett mycket tunt omslag runt OpenSSL-kommandoradsverktyget. Om du kommer att hantera MÅNGA certifikat och faktiskt hantera återkallande och liknande, vill du ha ett mycket mer komplicerat och funktioner-komplett verktyg. Det finns mer än tillräckligt med förslag som redan tillhandahålls, så istället håller jag bara med grunderna i vad du försöker åstadkomma.
Men här är den grundläggande proceduren. Jag kommer att förklara det med OpenSSL , men alla system kommer att göra det.
Börja med att skapa din ”root” CA – det kommer att vara ett självsignerat certifikat. Det finns flera sätt att göra detta; det här är ett. Vi kommer att göra vårt 10-åriga cert med 2048-bitarsnyckel.Justera siffrorna efter behov. Du nämnde att du var orolig för hashingalgoritmen, så jag lade till -sha256
för att säkerställa att den är signerad med något acceptabelt. Jag krypterar nyckeln med AES-256, men det är valfritt . Du kommer att bli ombedd att fylla i certifikatnamnet och sådant. dessa detaljer är inte särskilt viktiga för en rot-CA.
# First create the key (use 4096-bits if that"s what floats your boat) openssl genrsa -aes256 -out root.key 2048 # Then use that key to generate a self-signed cert openssl req -new -x509 -key root.key -out root.cer -days 3652 -sha256
Om du krypterade nyckeln i första steget måste du ange lösenordet till använd den i den andra. Kontrollera ditt genererade certifikat för att se till att under ”Grundläggande begränsningar” ser du ”CA: TRUE”. Det är verkligen den enda viktiga biten du behöver oroa dig för:
openssl x509 -text < root.cer
Cool. OK, låt oss nu underteckna ett certifikat. Vi behöver en ny nyckel och den här gången en begäran. Du kommer att bli ombedd om ditt namn och din adress igen. Vilka fält du fyller i och vad du tillhandahåller är upp till dig och din ansökan, men det fält som betyder mest är ”Vanligt namn”. Det är där du anger ditt värdnamn eller inloggningsnamn eller vad detta certifikat kommer att intyga.
# Create new key openssl genrsa -aes256 -out client1.key 2048 # Use that key to generate a request openssl req -new -key client1.key -out client1.req # Sign that request to generate a new cert openssl x509 -req -in client1.req -out client1.cer -CA root.cer -CAkey root.key -sha256 -CAcreateserial
Observera att detta skapar en fil som heter root.srl till håll våra serienummer raka. -CAcreateserial
-flaggan säger till openssl att skapa den här filen, så du levererar den för den första förfrågan du undertecknar och sedan aldrig igen. Och återigen kan du se var att lägga till argumentet -sha256
.
Detta tillvägagångssätt – att göra allt manuellt – är enligt min mening inte den bästa idén. Om du kör en stor operation , då vill du antagligen ha ett verktyg som kan hålla reda på alla dina certifikat åt dig.
Istället var min poäng här att visa dig att utdata du vill ha – certifikaten signerade som du vill dem – är inte beroende av de verktyg du använder, utan snarare de alternativ du ger till dessa verktyg. De flesta verktyg kan mata ut en mängd olika konfigurationer, både starka och svaga, och det är upp till dig att ange de siffror du nämner m lämpligt. Föråldrade standardvärden är lika med kursen.
Kommentarer
- Det ’ är viktigt att notera att när du undertecknar ett klientcertifikat är det endast offentligt . Ingen privat nyckel bör överföras eller genereras av CA.
- Kan du utvidga ditt svar om att skapa ett mellanliggande CA-certifikat? Tack.
- @Andr é Intermediate certs är bara normala certs med
basicConstraints = CA:TRUE
inställda i sina utökade attribut. Inget magiskt, bara ytterligare ett certifikat. - @tylerl Dude, du rockar.
- Det här svaret är FANTASTISKt och var väldigt hjälpsamt, men jag har en uppdatering från 2017 att lägga till. Chrome och andra kräver nu x509v3
subjectAlternativeName
tillägget; annars anser de att certifikatet är ogiltigt, även om ett CA-rootcertifikat är korrekt installerat på systemet. Jag kämpade en stund för att komma fram till rätt lösning. Den här sidan var ovärderlig för mig och löste den sista pusselbiten för mig: cmrg.fifthhorseman.net/wiki/SubjectAltName . IMO, att lägga till SAN vid signering, i motsats till när man begär, är både lättare och mer som vad de offentliga behöriga myndigheterna faktiskt gör.
Svar
Om du verkligen vill vara CA, ta hänsyn till säkerhetsimplikationerna av att göra det.
- Den privata nyckel som används för att generera root CA för ditt intranät borde bokstavligen vara låst i ett värdeskåp. Och åtkomst till nämnda säkerhetsskåp bör övervakas fysiskt.
- Med hjälp av en självsignerad root CA tvingas dina användare att inte bara lita på att du utför noggrannhet med säker skydd av nycklar utan också att infoga en ursprungligen opålitlig root kan i sin certifikatkedja.
- Detta bryter också OSCP-häftningsfunktionalitet när det gäller extern verifiering av certifikatkedjan, vilket är anledningen till att identitetshanteringstjänster i första hand finns.
En hel del skulle argumentera för resonemanget bakom att hantera din egen CA, t.ex. det är för ett företagsintranät där en del av våra skrivbordsbyggnader inkluderar roten ca eller för ett litet antal användare.
Även om det inte nödvändigtvis är fel att göra det och kan ge vissa fördelar gör det negera verifieringskedjan som certifikatbaserad identitetshantering byggdes för.
Om du bestämmer dig för att implementera din egen root ca, se bara till att du följer samma säkerhetsrutiner som alla andra root ca använder. det sista du skulle vilja hända är att någon komprometterar den privata nyckeln som används för din root ca och börjar signera certifikat för nätfiskekampanjer mot dina klienter.
Det finns massor av guider för bästa praxis för detta, NIST ( nationella institutet för standarder och teknik) är en samarbetsgrupp som hjälper till med olika standarder för datasäkerhetsämnen.
Rekommenderad läsning:
Granskning (PDF)
Disaster Recovery (PDF)
Public Key Systems (PDF)
Sans institut angående mindre PKI-distributioner
Ok, jag ser att du uppdaterade din fråga för att vara mer specifik.
Två dokument för att konfigurera din openssl.cnf-fil för CA-specifikationer:
https://www.openssl.org/docs/apps/ca.html
https://www.openssl.org/docs/apps/config.html
Jag inser att det här kanske inte är svaret du vill ha, men eftersom allas miljö och krav är olika kommer du att måste definiera ett omfång för din CA-implementering för ett bra exempelkonfiguration.
Kommentarer
- Det ’ s ingen anledning att din egen CA kan ’ t göra OCSP. Även OpenSSL-kommandoraden kan göra det och att ’ s om det lägsta möjliga fältet.
- openssl-länkar är nu 404
Svar
Där är inget sätt att göra det helt enkelt. det finns några verktyg som kan hjälpa dig att enkelt komma igång.
som:
ingen av dem är en full PKI bortsett från eventuellt EJBCA men det är inte trivialt att ställa in.
- XCA är ett litet frontendverktyg för att få ett grafiskt gränssnitt för att generera, underteckna och återkalla certifikat.
- EJBCA eller Enterprise Java Beans Certificate Authority är en JBOSS / Jetty Webapp som kan göra hela PKI-infrastrukturen för ett företag.
- openssl är det grundläggande kommandoradsverktyget. det kan göra alla offlinebitar i en CA men ingen av verifieringen (out of the box). du kan skapa dina egna OCSP-verifierare med det men du måste skapa ”online” -koden för det själv.
Om allt du söker är korrekt openssl-konfiguration. XCA kan hjälpa dig att skapa dem. (den har en openssl-konfigurationsexportfunktion
Kommentarer
- EJBCA har nu en VM-avbild som du kan använda. Annars ” inte trivialt att ställa in ” kan betraktas som en underdrift. Det är i grunden ett stort
ant
-skript som försöker konfigurera ( JBoss) applikationsserver som kan (och i mitt fall kommer att ) bryta ner. - VM-bilden är eller utvärderingsändamål så jag skulle inte rekommendera den för en produktionsserver.
- Jag kan titta på XCA. EJBCA är definitivt inte ’ t ett alternativ – ett webbgränssnitt lägger till en onödig attackyta och är svårare att ställa in. Jag föredrar definitivt att bara openssl dock.
- @Andr é när det gäller EJBCA, det kan också användas från kommandoraden, så du vann ’ t måste avslöja webbgränssnittet. Men det ’ är en sak på företagsnivå och förmodligen överdrivet för ditt syfte es (och jag säger detta som någon som försörjer sig med att arbeta med det).
Svar
För vissa bra bakgrund, se min presentation Hur man bygger och driver ditt eget certifikathanteringscenter för medelmåttighet . Kärnan i presentationen är att det som krävs mest inte är en lista över kommandon som ska köras, utan snarare en djup förståelse för alla de olika kontrollerna som går till att driva en kommersiell CA, hur de interagerar tillsammans, den exakta effekten av att ta bort en av dem, den kumulativa effekten av att ta bort flera av dem, och de förmildrande kontroller som är nödvändiga för att kompensera för den minskade säkerheten.
Det är därför det inte finns något ”kanoniskt svar om att skapa en enkel CA”. du går hela ISO-rutten, börjar med en nyckelsigneringspart, airgapped och välvda dubbletter av root-certifikat, flera mellanliggande signatorer, återkallningsservrar etc. etc., eller annars måste du skapa en kompromiss baserad på den unika kostnaden / nyttan och risken profilera verksamheten är villig att acceptera. Den som har tillräcklig skicklighet och erfarenhet för att göra denna utvärdering per definition behöver inte fuskarket. De kan analysera rätt kommandosyntax baserat på en djup förståelse för den affärsfunktion som ska utföras och de säkerhetsprimitiver som används för att genomföra detta krav.
I presentationen finns berättelser från verkliga engagemang från butiker som gick denna väg och fick det hemskt fel. I vissa fall rapporterade min bedömning att absolut inget jag kan göra med din mellanvarusäkerhet möjligen kan övervinna de inneboende svagheterna i den interna CA. Alla i USA bör inse att de förmodligen köper tjänster från minst en av de leverantörer som presentationen hänvisar till. Dessa är banker, kreditföreningar, sjukförsäkringsbolag, återförsäljare och mer.
Eftersom för att rekommendationerna ska vara ”korrekta” krävs att svararen gör stora antaganden om dina acceptabla riskprofiler, och att du gör stora antaganden om i vilken grad dina och deras idéer om risk är anpassade och i synk är själva förslaget riskabelt. I de flesta sådana fall har bedömningen av lämpligheten av de handledning som tillhandahålls mer att göra med presentationen än med den effektiva säkerhetsnivån som följer av att följa deras procedurer. Om det är välorganiserat och tydligt formulerat, spelar detta MIG mycket mer betydelse än om det är effektivt. Vi väljer det kanoniska fuskarket som ser bäst ut för oss.
Av dessa skäl tror jag inte att en trovärdig expert skulle ge ”korrekt och uppdaterad openssl.cnf
filer”, men kan snarare i bästa fall ge en utvärderingsprocess för att bedöma kraven och den acceptabla risken mer fullständigt. Eftersom du satsar verksamheten på resultatet skulle ingen trovärdig expert göra detta utanför skyddet av ett kontrakt. Alla rekommendationer du får måste nästan per definition vara från en in trovärdig expert. Lycka till.
Kommentarer
- Även för ett intranät för interna resurser? Du kanske också vill ange att presentationen är din egen.
- ” Även för en intranät för interna resurser? ” Speciellt för intranätet eftersom ’ där de flesta dataintrång förekommer. ” Du kanske också vill ange att presentationen är din egen. ” Jag trodde att jag hade när jag beskrev min erfarenhet av att göra bedömningarna, men poäng taget. Jag ’ har uppdaterat det.
Svar
Följ dessa instruktioner för att konfigurera en Windows Based CA . Eftersom du utfärdar klientcertifikat, tänk på att SHA2-hash inte stöds i XP.
Det enkla svaret är att:
- Installera AD
- Installera ett företags-CA på domänkontrollanten
- Redigera certifikatmallen för att utfärda slutanvändarcertifikat (ställ in behörigheten för användare att självregistrera sig eller gå till en webbsida)
- Distribuera rotcertifikatets offentliga nyckel till alla servrar som validerar användare
- Om användarna är på AD använder du GPO för att aktivera automatisk registrering
echo "Abandon all hope, ye who enter here."
isCA=No
-flaggan och en banlängd på noll. ” Tyvärr, policyer som det mesta av förtroendet för systemet bygger på, såsom återkallande, namnrymdshygien och rotsäkerhet, är ’ t adresserad iopenssl.cnf
.