Erstellen einer eigenen Zertifizierungsstelle für ein Intranet

Ich muss eine eigene Zertifizierungsstelle für ein Intranet erstellen, und leider scheint es keine gute Antwort auf diese Frage zu Sicherheit zu geben. SE.

Es gibt viele Online-Ressourcen dazu, aber alle sind unterschiedlich und einige verwenden veraltete Standardeinstellungen (MD5 / SHA1 usw.), die nicht so vertrauenswürdig erscheinen. Es gibt auch Hunderte verschiedener Variationen von openssl.cnf, die von einer 10-zeiligen Datei bis zu der riesigen reichen, die standardmäßig mit meiner Distribution geliefert wurde.

Ich möchte Eine kanonische Antwort zum Einrichten einer einfachen Zertifizierungsstelle für die Ausstellung von Server- und Client-Zertifikaten.

Anscheinend scheinen einige Leute immer noch nicht zu verstehen, dass ich kein großes Unternehmen bin, in dem Ein CA-Kompromiss verursacht Verluste in Milliardenhöhe und kann nicht einfach gemindert werden. Lassen Sie mich daher etwas besser erklären, warum ich die CA benötige:

  • mehrere Server, die über unsichere Verbindungen (das Internet) verbunden sind ) müssen sicher kommunizieren.

  • Ich brauche eine Möglichkeit, mich gegenüber diesen Servern zu identifizieren, um administrative Aufgaben auszuführen, ohne alle 10 Sekunden zu meinem Passwort-Manager hin und her zu gehen.

  • no Andere Zertifizierungsstellen als meine sollten in der Lage sein, sich als einer der Server auszugeben, egal wie unwahrscheinlich ( aber möglich ) das heißt .

Dort. Meine eigene PKI und ein auf jedem Computer installiertes Zertifikat scheinen den Anforderungen perfekt zu entsprechen. Eine der von mir verwendeten Software erfordert auch die Verwendung einer PKI, sodass die Verwendung selbstsignierter Zertifikate keine Option ist.

Um die PKI zu gefährden, müsste jemand meine Arbeitsmaschine kompromittieren, und wenn dies der Fall ist Wenn dies erledigt ist, kann der Angreifer bereits einiges an Schaden anrichten, ohne die PKI zu berühren (da ich mich ohnehin von diesem Computer aus über SSH beim Server anmelden würde). Das ist ein Risiko, das ich eingehen möchte, und diese PKI fügt kein höheres Risiko hinzu als das, was es bereits gibt.

Kommentare

  • echo "Abandon all hope, ye who enter here."
  • @KristoferA Es ‚ ist für ein Intranet, es ‚ s ist mehr als vernünftig, um eine eigene Zertifizierungsstelle für ein Unternehmensnetzwerk zu erstellen.
  • Übrigens, was ‚ ist mit den Migrationen zu Superuser oder ServerFault los? Ist ‚ die Verwendung von OpenSSL hier nicht perfekt zum Thema?
  • “ … ein selbstsigniertes Zertifikat ist ein Zertifikat signiert von einer Behörde, die den meisten Systemen nicht bekannt ist. “ Nein. Ein selbstsigniertes Zertifikat ist ein Zertifikat, bei dem der öffentliche Schlüssel, die Richtlinienattribute und die Identitätsattribute vom privaten Schlüssel signiert wurden entsprechend dem durch die Signatur gebundenen öffentlichen Schlüssel. Es hat zwar überhaupt nichts damit zu tun, ob das Zertifikat aus einer bekannten Quelle stammt, aber es ist per Definition wahr, dass alle Root-Zertifikate selbstsigniert sind. Der Unterschied besteht darin, dass ein Stammzertifikat zum Signieren, jedoch nicht zur Verschlüsselung aktiviert ist, wodurch es als persönliches Zertifikat für eine App oder einen Server unbrauchbar wird.
  • Was Andr é Es heißt, dass die betroffene Software selbstsignierte Zertifikate ausdrücklich als persönliche Zertifikate verbietet und dass sowohl die Client- als auch die Serverzertifikate eine gemeinsame Zertifizierungsstelle haben müssen. Dies sind zwar ungewöhnliche Anforderungen, sie sind jedoch vollkommen gültig. Was jedoch angefordert wird, betrifft mehr Richtlinien wie „. Die Pfadlänge des Stammzertifikats darf nicht größer sein als x “ und “ Das persönliche Zertifikat muss das Flag isCA=No und eine Pfadlänge von Null enthalten. “ Leider Richtlinien, auf denen der größte Teil des Vertrauens in das System basiert, wie z. B. Widerruf, Namespace-Hygiene und Stammsicherheit, werden in openssl.cnf.

Antwort

Wenn Ihre Infrastruktur winzig ist , viele Details zum Ausführen einer Zertifizierungsstelle (z. B. CRLs und dergleichen) können wahrscheinlich ignoriert werden. Stattdessen müssen Sie sich nur um das Signieren von Zertifikaten kümmern.

Es gibt eine Vielzahl von Tools, die diesen Prozess für Sie verwalten. Ich habe sogar vor vielen Jahren eines geschrieben. Aber das, das ich empfehle, wenn Sie möchten, dass etwas wirklich Einfaches easy-rsa aus dem OpenVPN-Projekt ist. Es ist ein sehr dünner Wrapper um das OpenSSL-Befehlszeilentool. Wenn Sie eine Menge Zertifikate verwalten und sich tatsächlich mit Widerruf und anderen Dingen befassen, möchten Sie ein viel komplexeres und funktionsreicheres Dienstprogramm. Es gibt bereits mehr als genug Vorschläge, daher bleibe ich stattdessen bei den Grundlagen dessen, was Sie erreichen möchten.

Aber hier ist das grundlegende Verfahren. Ich werde es mit OpenSSL erklären , aber jedes System wird es tun.

Beginnen Sie mit der Erstellung Ihrer „Stamm“ -CA – es wird ein selbstsigniertes Zertifikat sein. Es gibt verschiedene Möglichkeiten, dies zu tun; dies ist eine. Wir werden dies tun Wir haben ein 10-Jahres-Zertifikat mit einem 2048-Bit-Schlüssel.Passen Sie die Zahlen entsprechend an. Sie haben erwähnt, dass Sie sich Sorgen um den Hashing-Algorithmus gemacht haben. Deshalb habe ich -sha256 hinzugefügt, um sicherzustellen, dass er mit etwas Akzeptablem signiert ist. Ich verschlüssele den Schlüssel mit AES-256, aber das ist optional Sie werden gebeten, den Zertifikatsnamen und dergleichen auszufüllen. Diese Details sind für eine Root-Zertifizierungsstelle nicht besonders wichtig.

# 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 

Wenn Sie den Schlüssel im ersten Schritt verschlüsselt haben, müssen Sie das Kennwort für angeben benutze es in der zweiten. Überprüfen Sie Ihr generiertes Zertifikat, um sicherzustellen, dass unter „Grundlegende Einschränkungen“ „CA: TRUE“ angezeigt wird. Das ist wirklich das einzige wichtige Element, über das Sie sich Sorgen machen müssen:

openssl x509 -text < root.cer 

Cool. OK, jetzt unterschreiben wir ein Zertifikat. Wir benötigen einen weiteren Schlüssel und diesmal eine Anfrage. Sie werden erneut nach Ihrem Namen und Ihrer Adresse gefragt. Welche Felder Sie ausfüllen und was Sie angeben, liegt bei Ihnen und Ihrer Bewerbung. Das wichtigste Feld ist jedoch der „Common Name“. Hier geben Sie Ihren Hostnamen oder Anmeldenamen an oder was auch immer dieses Zertifikat bestätigen wird.

# 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 

Beachten Sie, dass dadurch eine Datei mit dem Namen root.srl to erstellt wird Halten Sie unsere Seriennummern gerade. Das Flag -CAcreateserial weist openssl an, diese Datei zu erstellen. Sie geben sie also für die erste Anforderung an, die Sie unterschreiben, und dann nie wieder. Und wieder können Sie sehen, wo Das Argument -sha256 hinzuzufügen.

Dieser Ansatz – alles manuell zu erledigen – ist meiner Meinung nach nicht die beste Idee. Wenn Sie eine umfangreiche Operation ausführen Dann möchten Sie wahrscheinlich ein Tool, mit dem Sie alle Ihre Zertifikate nachverfolgen können.

Stattdessen wollte ich Ihnen hier zeigen, dass die gewünschte Ausgabe – die Zertifikate wie gewünscht signiert sind Sie – hängen nicht von den von Ihnen verwendeten Werkzeugen ab, sondern von den Optionen, die Sie diesen Werkzeugen zur Verfügung stellen. Die meisten Werkzeuge können eine Vielzahl von Konfigurationen ausgeben, sowohl starke als auch schwache, und es liegt an Ihnen, die von Ihnen angegebenen Zahlen anzugeben m angemessen. Veraltete Standardeinstellungen sind selbstverständlich.

Kommentare

  • ‚ Es ist wichtig zu beachten, dass wann Wenn Sie ein Client-Zertifikat signieren, handelt es sich nur um den öffentlichen Teil. Von der Zertifizierungsstelle sollte kein privater Schlüssel übertragen oder generiert werden.
  • Könnten Sie bitte Ihre Antwort zum Erstellen eines CA-Zwischenzertifikats erweitern? Vielen Dank.
  • @Andr é Zwischenzertifikate sind nur normale Zertifikate, deren erweiterte Attribute basicConstraints = CA:TRUE sind. Nichts Magisches, nur ein weiteres Zertifikat.
  • @tylerl Alter, du rockst.
  • Diese Antwort ist FANTASTISCH und war super hilfreich, aber ich muss ein Update für 2017 hinzufügen. Chrome und andere benötigen jetzt die Erweiterung x509v3 subjectAlternativeName. Andernfalls halten sie das Zertifikat für ungültig, selbst wenn ein CA-Stammzertifikat ordnungsgemäß auf dem System installiert ist. Ich hatte einige Zeit Mühe, die richtige Lösung zu finden. Diese Seite war für mich von unschätzbarem Wert und löste das letzte Puzzleteil für mich: cmrg.fifthhorseman.net/wiki/SubjectAltName . IMO, das Hinzufügen des SAN beim Signieren im Gegensatz zum Anfordern ist einfacher und ähnelt eher dem, was die öffentlichen Zertifizierungsstellen tatsächlich tun.

Antwort

Wenn Sie wirklich eine Zertifizierungsstelle sein möchten, beachten Sie die Auswirkungen auf die Sicherheit.

  1. Der private Schlüssel, der zum Generieren der Stammzertifizierungsstelle für Ihr Intranet verwendet wird, sollte buchstäblich verwendet werden in einem Safe eingeschlossen sein. Der Zugriff auf diesen Safe sollte physisch überwacht werden.
  2. Die Verwendung einer selbstsignierten Stammzertifizierungsstelle zwingt Ihre Benutzer, nicht nur darauf zu vertrauen, dass Sie beim sicheren Schutz von Schlüsseln die erforderliche Sorgfalt walten lassen, sondern auch einen anfangs nicht vertrauenswürdigen Stamm einzufügen können in ihre Zertifikatkette aufgenommen werden.
  3. Dies unterbricht auch die OSCP-Heftfunktionalität in Bezug auf die externe Überprüfung der Zertifikatkette, weshalb Identitätsverwaltungsdienste überhaupt vorhanden sind.

Nicht wenige würden die Gründe für die Verwaltung Ihrer eigenen Zertifizierungsstelle argumentieren, wie z. Es ist für ein Unternehmens-Intranet gedacht, in dem ein Teil unserer Desktop-Builds die Stamm-CA enthält, oder für eine kleine Anzahl von Benutzern.

Es ist zwar nicht unbedingt falsch, dies zu tun, und bietet möglicherweise einige Vorteile Negieren Sie die Überprüfungskette, für die das zertifikatbasierte Identitätsmanagement erstellt wurde.

Wenn Sie sich für die Implementierung Ihrer eigenen Root-CA entscheiden, stellen Sie einfach sicher, dass Sie dieselben Sicherheitspraktiken befolgen wie alle anderen Root-Ca-Anwendungen Das Letzte, was Sie möchten, ist, dass jemand den privaten Schlüssel, der für Ihre Root-CA verwendet wird, kompromittiert und damit beginnt, Zertifikate für Phishing-Kampagnen gegen Ihre Kunden zu signieren. Nationales Institut für Standards und Technologie) ist eine kollaborative Gruppe, die bei verschiedenen Standards für Computersicherheitsthemen hilft.

Empfohlene Lektüre:
Auditing (PDF)
Notfallwiederherstellung (PDF)
Public-Key-Systeme (PDF)
Sans Institut betreffend kleinere PKI-Bereitstellungen

Ok, ich sehe, Sie haben Ihre Frage genauer aktualisiert.

Zwei Dokumente zum Konfigurieren Ihrer Datei openssl.cnf für CA-Besonderheiten:

https://www.openssl.org/docs/apps/ca.html

https://www.openssl.org/docs/apps/config.html

Mir ist klar, dass dies möglicherweise nicht die gewünschte Antwort ist, aber weil die Umgebung und die Anforderungen aller unterschiedlich sind, werden Sie dies tun Sie müssen einen Bereich für Ihre CA-Implementierung für eine gute Beispielkonfiguration definieren.

Kommentare

  • Dort ‚ Es gibt keinen Grund, warum Ihre eigene Zertifizierungsstelle ‚ kein OCSP ausführen kann. Selbst die OpenSSL-Befehlszeile kann dies und ‚ s über den niedrigstmöglichen Balken.
  • openssl-Links sind jetzt 404

Antwort

Dort ist keine Möglichkeit, dies einfach zu tun. Es gibt einige Tools, die Ihnen den Einstieg erleichtern können.

wie:

keiner von ihnen ist a Abgesehen von möglicherweise EJBCA ist die vollständige PKI nicht trivial einzurichten.

  • XCA ist ein kleines Frontend-Tool, mit dem Sie eine grafische Oberfläche zum Generieren, Signieren und Widerrufen von Zertifikaten erhalten.
  • EJBCA oder Enterprise Java Beans Certificate Authority ist eine JBOSS / Jetty-Webanwendung, die die gesamte PKI-Infrastruktur für ein Unternehmen bereitstellen kann.
  • openssl ist das grundlegende Befehlszeilentool. Es kann alle Offline-Bits einer Zertifizierungsstelle ausführen, jedoch keine Überprüfung (sofort einsatzbereit). Sie können damit Ihre eigenen OCSP-Verifizierer erstellen, müssen jedoch den „Online“ -Code dafür selbst erstellen.

Wenn Sie nur nach der richtigen openssl-Konfiguration suchen. XCA kann Ihnen bei der Generierung helfen. (Es verfügt über eine Exportfunktion für die OpenSL-Konfiguration.

Kommentare

  • EJBCA verfügt jetzt über ein VM-Image, das Sie verwenden können. Andernfalls “ nicht trivial einzurichten “ kann als Untertreibung angesehen werden. Es handelt sich im Grunde genommen um ein riesiges ant -Skript, das versucht, das ( JBoss) Anwendungsserver, der ausfallen kann (und in meinem Fall wird ).
  • Das VM-Image ist oder zu Evaluierungszwecken, daher würde ich es nicht für einen Produktionsserver empfehlen.
  • Ich kann mich mit XCA befassen. EJBCA ist definitiv keine ‚ Option – eine Webschnittstelle fügt eine unnötige Angriffsfläche hinzu und ist schwieriger einzurichten. Ich bevorzuge definitiv die Verwendung von just openssl.
  • @Andr é In Bezug auf EJBCA kann es auch über die Befehlszeile verwendet werden, sodass Sie ‚ muss das Webinterface nicht verfügbar machen. Aber ‚ ist eine Sache auf Unternehmensebene und wahrscheinlich übertrieben für Ihre Zwecke es (und ich sage dies als jemand, der seinen Lebensunterhalt damit verdient).

Antwort

Für einige Guter Hintergrund, siehe meine Präsentation So erstellen und betreiben Sie Ihr eigenes Certificate Management Center of Mediocrity . Der Kern der Präsentation ist, dass am dringendsten keine Liste der auszuführenden Befehle erforderlich ist, sondern vielmehr ein tiefes Verständnis aller verschiedenen Steuerelemente, die für den Betrieb einer kommerziellen Zertifizierungsstelle erforderlich sind, wie sie miteinander interagieren und welche genauen Auswirkungen das Entfernen von Befehlen hat Eine davon ist die kumulative Auswirkung des Entfernens mehrerer von ihnen und die mildernden Kontrollen, die erforderlich sind, um die verringerte Sicherheit zu kompensieren.

Aus diesem Grund gibt es keine „kanonische Antwort zum Einrichten einer einfachen Zertifizierungsstelle“ Sie gehen den gesamten ISO-Weg, beginnend mit einer Schlüsselunterzeichnungspartei, doppelten Stammzertifikaten mit Luftspalt und Tresor, mehreren Zwischenunterzeichnern, Widerrufsservern usw. usw., oder müssen einen Kompromiss auf der Grundlage des einzigartigen Kosten-Nutzen-Verhältnisses und Risikos entwickeln Profil, das das Unternehmen zu akzeptieren bereit ist. Jeder, der über ausreichende Fähigkeiten und Erfahrungen verfügt, um diese Bewertung per Definition vorzunehmen, benötigt den Spickzettel nicht. Sie können die richtige Befehlssyntax analysieren, basierend auf einem tiefen Verständnis der auszuführenden Geschäftsfunktion und der Sicherheitsprimitive, die zur Implementierung dieser Anforderung verwendet werden.

In der Präsentation finden sich Geschichten aus echten Engagements von Geschäften, die diesen Weg gegangen sind und es schrecklich falsch verstanden haben. In einigen Fällen ergab meine Einschätzung, dass absolut nichts, was ich mit Ihrer Middleware-Sicherheit tun kann, möglicherweise die inhärenten Schwächen der internen Zertifizierungsstelle überwinden kann. Jeder in den USA sollte sich darüber im Klaren sein, dass er wahrscheinlich Dienstleistungen von mindestens einem der Anbieter kauft, auf die sich die Präsentation bezieht. Dies sind Banken, Kreditgenossenschaften, Krankenversicherer, Einzelhändler und mehr.

Damit die Empfehlungen „korrekt“ sind, muss der Antwortende wichtige Annahmen über Ihre akzeptablen Risikoprofile treffen und Sie müssen wichtige Annahmen darüber treffen, inwieweit Ihre und ihre Risikovorstellungen aufeinander abgestimmt sind und synchron ist der Vorschlag auf den ersten Blick riskant. In den meisten Fällen hat die Beurteilung der Eignung der angebotenen Tutorials mehr mit der Präsentation zu tun als mit dem effektiven Sicherheitsniveau, das sich aus der Einhaltung ihrer Verfahren ergibt. Wenn es gut organisiert und klar artikuliert ist, ist dies VIEL wichtiger als ob es effektiv ist. Wir wählen den kanonischen Spickzettel aus, der für uns am besten aussieht.

Aus diesen Gründen glaube ich nicht, dass ein glaubwürdiger Experte „korrekt und aktuell -Dateien“, sondern bieten bestenfalls einen Bewertungsprozess, um die Anforderungen und das akzeptable Risiko vollständiger zu bewerten. Da Sie das Unternehmen auf das Ergebnis setzen, würde dies kein glaubwürdiger Experte außerhalb des Schutzes von tun Ein Vertrag. Alle Empfehlungen, die Sie erhalten, müssen fast per Definition von einem in glaubwürdigen Experten stammen. Viel Glück.

Kommentare

  • Auch für ein Intranet für interne Ressourcen? Möglicherweise möchten Sie auch angeben, dass die Präsentation Ihre eigene ist.
  • “ Auch für eine Intranet für interne Ressourcen? “ Speziell für das Intranet seit ‚ s Wo die meisten Datenverletzungen auftreten. “ Möglicherweise möchten Sie auch angeben dass die Präsentation Ihre eigene ist. “ Ich dachte, ich hätte es getan, als ich meine Erfahrungen mit den Bewertungen beschrieb, aber es wurde darauf hingewiesen. Ich ‚ habe es aktualisiert.

Antwort

Befolgen Sie diese Anweisungen Anweisungen zum Konfigurieren einer Windows-basierten Zertifizierungsstelle . Beachten Sie beim Ausstellen von Client-Zertifikaten, dass SHA2-Hashes unter XP nicht unterstützt werden.

Die einfache Antwort lautet:

  1. AD installieren
  2. Installieren Sie eine Unternehmenszertifizierungsstelle auf dem Domänencontroller.
  3. Bearbeiten Sie die Zertifikatvorlage, um Endbenutzerzertifikate auszustellen (legen Sie die Berechtigung für Benutzer fest, sich selbst zu registrieren oder eine Webseite aufzurufen)
  4. Stellen Sie den öffentlichen Schlüssel des Stammzertifikats auf allen Servern bereit, die Benutzer validieren.
  5. Wenn sich die Benutzer in AD befinden, verwenden Sie das Gruppenrichtlinienobjekt, um die automatische Registrierung zu aktivieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.