You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

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:

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.

  • No labels