Michelle Konzack schrieb: > Beruflich bedingt, sind Verisign & Co als untrusted deklariert. Was an sich nicht weiter tragisch ist - denn der Wert von Verisign und ähnlichen komerziellen Anbietern ist doch eher fraglich, wenn man bedenkt, was so ein Zertifikat aussagt. Schick sind die, weil sie in den meisten Browsern und Anwendungen mit dabei sind und man als User keine 'dummen Fragen' zu Gesicht bekommt. > Nun ist es so, das wir in Paris einen speziellen Server aufbauen > müssen, der die CA übernimmt. > 2) Was benötigen wir als Software? OpenSSL :-) Das ist eigentlich schon alles was Du wirklich brauchst. > 1) Wie macht man sowas ? <Märchenstunde an> Zuerst solltest Du/Ihr ein paar Fragen klären, dann schreib ich meinen groben Notizzettel für OpenSSL ab: - wer soll und darf signiern? - wie lange sollen die Zertifikate gültig sein? - nach welchen Reglen werden die Requests verglichen? - wie wird der CA Recher physikalisch und personell geschützt? - braucht es verschiedene 'Sicherheitsstufen'? - wie werden CRLs verteilt? - etc. (also mit anderen Worten über die Infrastruktur sollte man schon einen Moment lang nachdenken, vielleicht auch zwei...) Hier ein Ausschnitt aus meinem Anwendungsfall: 1) OpenSSL installieren. 1a) Überlegt, ich brauche zwei CAs für zwei verschiendene Anwendungen. Die erste sollte für Benutzer zuständig sein und Zertifikate erstellen, die mit Passwort später noch geschützt sind. Die zweite dient nur für Server-Zertifikate, die später meist ja ohne Passwort auskommen müssen (und sind daher auch nicht so lange gültig) 1b) Später zeigte sich, dass die beiden CAs von unterschiedlichen Personen weitergepflegt wurden - also kam noch eine Root-CA dazu, die die beiden anderen CAs zertifiziert. Wenn man das nicht alles selbst machen will, der DFN und auch andere bieten die Zertifizierung zur CA an, solange man eine Richtline und Verfahrensweisen vorlegen kann. 1c) War alles zu teuer, also selbst loslegen... 2) /etc/ssl/openssl.cnf editieren 2a) HOME auf etwas sinnvolles ändern, /home/CA z.B. weil ich das nicht so gern hab, dass die ganzen CA Sachen unter /usr/lib... liegen. Aber reine Geschmackssache. 2b) etwas weiter unten kommt der Abschnitt [ ca ], dort kann man eine Voreinstellung für die zu verwendende CA angeben, bei mir BenutzerCA. 2c) direkt darunter steht ein Block für eine CA (wenn ich mich recht erinnere...), diesen durchlesen und alles anpassen was für den eigenen Gebrauch wichtig ist. Und alles verstehen, was dort an Optionen auftaucht (OpenSSL Hanbuch ist an dieser Stelle fast Pflicht). Bei mir wieder ist der Pfad angepasst auf meinen. Aus diesem Abschnitt baue ich mir insgesammt drei Blöcke: [ RootCA ] [ BenutzerCA ] [ DiensteCA ] Irgendwo ist ein Abschnitt usr_ca zu finden, dieser ist für die 'User'-Zertifikate (Benutzer und Server zuständig), ich brauche noch einen zweiten für das Signieren der zwei weiteren CAs: Dazu erstelle ich einen zusätzlichen Abschnitt [ ca_cert ] und ändere basicConstraints auf CA:true. Die [ RootCA ] bekommt bei x509_extensions dann ca_cert und die beiden anderen usr_cert. 2d) Hoffe hab jetzt an alles gedacht (mal so eben aus dem Kopf) 3) mkdir /home/CA/RootCA mkdir /home/CA/RootCA/private cd /home/CA/RootCA/private 3a) openssl genrsa -aes256 -out RootCA.key.pem 2048 (erzeugt einen 2048 Bit Schlüssel, hier sollte man ein SEHR gutes Passwort wählen und es gut unter Verschluss halten), 3b) openssl req -new -x509 -days 3650 -key RootCA.key.pem -out ../RootCA.cert.pem (erzeugt ein selbstsigniertes Zertifikat für die RootCA) 3c) openssl x509 -in ../RootCA.cert.pem -text (alles nochmal genau durchlesen und prüfen) 3d) Das Zertifikat und der Schlüssel müssen genau den gleichen Namen haben, wie es in der openssl.cnf angegeben ist! Überprüfen und notfalls entsprechend umbenennen/kopieren. 3e) cd /home/CA/RootCA cp RootCA.cert.pem certs/00.pem cd certs/ ln -s 00.pem `openssl x509 -hash -noout -in 00.pem`.0 (das erzeugt quasi eine Verwaltung für die Zertifikate, das erstellen des Symlinks mit dem Hashwert hat manchmal gute Dienste geleistet, wenn man das Zertifikat nochmal wiederfinden muss) 4) Erstellen der Verzeichnisse wie bei 3) nur für die BenutzerCA und die DiensteCA. 4a) die 3a) nur auch wieder für die beiden anderen CAs 4b) openssl req -new -key BenutzerCA.key.pem -out ../BenutzerCA.req.pem (einen Request erzeugen) 4c) BenutzerCA.req.pem muss nur irgenwie zur RootCA kommen zum Signieren (da bei mir alles lokal läuft einfach umkopiert in ein extra Verzeichnis) 4d) openssl ca -name RootCA -in DiensteCA.req.pem -out DiensteCA.cert.pem Dies wählt die RootCA aus und zertifiziert den Request, und das Zertifikat landet in RootCA/newcerts (sollte man vorher alles angelegt haben, so wie es in der openssl.cnf steht) 4e) mv /home/CA/RootCA/newcerts/??.pem /home/CA/RootCA/certs/ cd /home/CA/RootCA/certs/ ln -s ??.pem `openssl x509 -in ??.pem -hash -noout`.0 4f) DiensteCA.cert.pem muss natürlich zurück an die DiensteCA in deren Homeverzeichnis. Das gleich dann bei mir z.B. noch für die BenutzerCA. 5) Hurra! 3 CAs erstellt :-) 6) Requests von anderen signieren - aber mit BenutzerCA oder DiensteCA, keinesfalls mit der RootCA. 7) Tipp: Anwendungen die manchmal ein .crt brauchen, wollen in der Regel nur den Block aus dem .cert.pem der zwischen ---BEGIN...--- und ---END...--- steht, einfach rauskopieren und abspeichern (das nutze ich für meinen Apache so zum Ausliefern an die Clients). 8) CRL muss ich nochmal suchen, die Notizen hab ich gerade nicht zur Hand, liegen noch bei meinem Arbeitgeber. Hoffe mal, das war halbwegs verständlich ;-) Wenn die CAs 'funktionieren' dann könnte ein beispielhafter Ablauf so aussehen: Anwender: - openssl genrsa -out apache.key.pem -rand ./private/.rand 2048 - openssl req -new -key apache.key.pem -out apache.req.pem - schickt apache.req.pem an die CA (hier z.B. DiensteCA, müssen ja nicht in einem Hause sein und schon gar nicht auf einen Rechner) DiensteCA: - kopiert apache.req.pem in ein Verzeichnis - openssl ca -name DiensteCA -in apache.req.pem -out apache.cert.pem - mv newcerts/??.pem certs/ - cd certs - ln -s ??.pem `openssl x509 -hash -noout -in ??.pem`.0 - schickt apache.cert.pem zurück an den Anwender (- stellt auch die eigenen Zertifikate zur Verfügung, also DiensteCA.cert.pem, damit der Anwender der Zertifikat auch vergleichen kann, gleiches gilt für die anderen CAs) Anwender: - kopiert apache.cert.pem und apache.key.pem an die entsprechnenden Stellen - besorgt sich die nötigen CA Zertifikate zum Vergleich - ist hoffentlich glücklich </Märchenstunde aus> Es gibt mit OpenSSL dabei ein paar Skripte, die einem das Leben etwas vereinfachen sollen - ich find's zu Fuß nicht so tragisch zu meistern, viel aufwändiger ist das Erarbeiten einer Richtline und das einhalten derselben. Und das Pflegen der CRLs. Und das Sichern des Rechners (z.B. ist er allein und nicht im Netzwerk etc.) HTH und bedanke mich nochmal bei allen, die mir damals mit dem ganzen Kram geholfen haben. Bisher läuft's super ;-) Cheers, Jan
Attachment:
signature.asc
Description: OpenPGP digital signature