Archiv für den Monat: Juni 2019

Export von öffentlichen Zertifikaten aus VCF-Dateien

Hallo Fans,

bisher war es bei meinem Arbeitgeber so, dass wir in der IT-Abteilung zwar für die Erstellung der S/MIME-Zertifikate zuständig waren, die Benutzer das komplette Handling der E-Mail-Verschlüsselung jedoch selbst in die Hand nahmen.

Der große Kostenträger, mit dem wir zusammenarbeiten, stellt zum Glück alle öffentlichen Zertifikate seiner Benutzer auf einem Webserver zum Download bereit. Sogar als vorkonfigurierte VCF-Visitenkarten-Dateien, die, mit einem Editor geöffnet, so aussehen:

In der Zeile „KEY“ steht also direkt das Zertifikat. Um das zu verifizieren, kopierte ich den String ab „MII“ in eine Textdatei, speicherte diese als .CER ab und hatte das öffentliche Zertifikat des Empfängers beim Kostenträger. Yay \o/.

Da unsere Benutzer zum Glück die Ansage hatten, alle Kontakte, mit denen Sie verschlüsselt E-Mails austauschen müssen, in einem spezifischen Ordner ihres Home-Verzeichnisses zu speichern, lagen alle VCFs (und somit auch irgendwie schon die CERs) an einigermaßen einheitlichen Stellen.

Nun stand jedoch endlich die Einführung eines E-Mail-Verschlüsselungs-Gateway ins Haus, was jedoch mit allen öffentlichen Zertifikaten gefüttert werden musste. Und hier meine Vorgehensweise:

– Als erstes habe ich mir über unser Backup alle VCF-Dateien aller Benutzer per

xcopy QUELLPFAD\*.vcf ZIELPFAD /y

in ein Verzeichnis kopiert, um einen Überblick zu haben, wie viele öffentliche Zertifikate wir überhaupt haben. Mehrere Tausend.

– Anschließend kopierte ich alle VCF-Dateien in eine Einzige mit

copy *.vcf in merge.vcf

und hatte nun eine einzige, große, semikolongetrennte quasi CSV-Datei, indem ich schlicht die Dateiendung änderte:

– Die CSV dann schnell in Excel importiert und es fiel auf, dass in jeder 8. Zeile die E-Mail-Adresse des Zertifikatsinhabers, perfekt für einen Dateinamen, und in jeder 7. Zeile der String des Zertifikats steht.

– Mit der Excel-Formel „INDEX“ konnte ich dann leicht jede 7. und 8. Zeile der gesamten CSV auslesen und in andere Zellen setzen:

=INDEX(B:B;(ZEILE(B1)-1)*10+8)

– Mit der E-Mail-Adresse des Zertifikatsinhabers in Spalte C und dem String des Zertifikates in Spalte D, erstellte ich nun eine saubere semikolongetrennte CSV-Datei:

– Und erstellte zum Schluss mit

Import-Csv DATEIPFAD.csv -Delimiter ';' | ForEach-Object {"$($_.CERT)" | Set-Content -Path "$($_.MAIL).cer"}

für jede Zeile in der CSV-Datei eine .CER-Datei mit dem Namen in der Spalte MAIL und dem Inhalt in der Spalte CERT.

Voilà.