Wiki Markup |
---|
{html}<style> .wiki-content p {text-align:justify;} .wiki-content {position:relative; left:60px; width:800px;} </style>{html} |
Table of Contents | ||||||
---|---|---|---|---|---|---|
|
DCV-Automatisierung
Diese Seite beschreibt, wie an der Uni Wien die Domain Control Validation (DCV) im Rahmen des ACOnet-Zertifikats-Service (TCS) für SSL/TLS automatisiert wurde. Kommentare und Ergänzungen sind willkommen (vorzugsweise per mail an ~at).
Übersicht
Die Bestätigung des DCV-Challenges wurde an der Uni Wien automatisiert:
- einheitliche DCV-Adresse für alle Domains,
- umgeleitet auf einen Account, der über procmail verfügt
- ein kleines Perl-Script setzt den DCV-Code in die Validierungswebseite
Einheitliche DCV-Adresse
Als Mail-Adresse für DCV wird einheitlich die im übrigen völlig unbenötigte Adresse administrator@
domain eingesetzt.
An der Uni Wien werden alle TCS-berechtigten Domains über den zentralen Mailserver abgehandelt. Dadurch konnten diese Adressen einfach durch einen Wildcard-Virtualuser auf eine Zieladresse gemappt werden.
Um die Auswahl der DCV-Adresse im TCS-Portal etwas zu vereinfachen, wurden die Default-Adressen für alle domains in der "Customer Info" unter "Preferred DCV Addresses" eingetragen.
Procmail-Recipe (optional)
Das DCV-Script benötigt procmail nicht unbedingt, es kann natürlich direkt mit .forward oder einem vergleichbarem Mechanismus aufgerufen werden.
Für eine bessere Fehlererkennung wurde aber procmail mit folgendem Recipe eingesetzt:
Code Block |
---|
DCV_ADMIN=dcv-c@meine.domain.example DCV=$HOME/bin/dcv-automatik OUTF=$HOME/dcv-automatik.log P=$$ ###### DCV # # DCV-Challenge --> dcv-automatik # stdout/stderr --> dcv-automatik.log # # Bei Fehler zusaetzlich: # stdout/stderr --> dcv-automatik.$$ # Notification-Mail an dcv-c # # Offenbar hat Comodo unterschiedliche Templates fuer CSRs mit einer oder # mehreren Domains. Leider sind dabei Subject und From verschieden. # # DCV verwendet folgende Subjects: # ORDER #12345678 - Domain Control Validation for blibla.example # Demonstrate domain control and approve 2 domains for SSL/TLS certificate # order #12345678 # # DCV verwendet folgende Froms: # <docs@comodo\.com> # <noreply@trust-provider.com> # :0 iw * Subject: (Demonstrate domain control and approve .* domains for SSL/TLS|\ ORDER #[0-9]+ - Domain Control Validation for) * From: .* (<noreply@trust-provider.com>|<docs@comodo\.com>) | set -o pipefail ; $DCV 2>&1 | tee $OUTF.$P >> $OUTF && rm -f $OUTF.$P :0 e | (cat $OUTF.$P ; echo ======= ; cat ) | mail -s "$DCV failed $P" $DCV_ADMIN # ###### |
Bitte vor Gebrauch die Adresse $DCV_ADMIN
setzen. An diese Adresse werden ggf. Fehlermeldungen geschickt.
Die Variable $DCV
definiert das Perl-Script, das die DCV-Validierung durchführt – also muß entweder das Script dort installiert oder die Variable angepaßt werden.
Ein kurzes Summary (Startzeit in UTC, Subject der Mail, erkannter Validierungs-URL, "Order Number", erkannter DCV-Code, "Success") jeder DCV-Aktion wird in das Logfile{{dcv-automatik.log}} geschrieben. Eine automatische Logfile-Rotation ist in Anbetracht der erwarteten Datenmenge nicht vorgesehen.
Wenn ein Fehler auftritt, also das DCV-Script nicht gefunden wird, nicht ausgeführt werden kann oder selbst mit einem Fehler aussteigt, passiert folgendes:
- der Output (stdout + stderr) wird zusätzlich in das File
dcv-automatik.log.
pid geschrieben (pid ist die Process-ID des procmail-Prozesses) - an
$DCV_ADMIN
wird eine Mail geschickt, die den Output des Scripts (also wohl eine Fehlermeldung) und die DCV-Mail selbst enthält. Das Subject enthält zur leichteren Zuordnung ebenfalls die Process-ID.
Perl-Script
Das Perl-Script dcv-automatik
ist unter GPL v. 3 freigelassen. Zur Installation ist folgendes zu beachten:
- Es muß auf geeignete Weise aufgerufen werden (z.B. durch das oben beschriebene Procmail-Recipe).
- Im script ist die Konstante
use constant from => '';
auf eine Kontakt-Mailadresse zu setzen. Diese wird mit den http-Headern mitgeschickt (RFC 2616, 14.22)
Das Script selbst ist simpel und verwendet lediglich LWP::UserAgent, sollte also auf zumindest jeder Posix-Umgebung funktionieren.