Archiv für Kategorie Apache
Server Name Indication (SNI) unter Apache 2.0.63 (Windows)
Verfasst von Schakko unter Apache, Sicherheit, Windows am 13. Oktober 2009
Heute kam bei uns in der Firma wieder das Thema Zertifikate zu sprechen. Unsere momentane Umgebung auf dem auch dieser Blog gehostet ist, ist ein Windows-System, auf dem Apache 2.0.63 läuft. Einige der Subdomains sind über SSL zugänglich, allerdings besteht bei SSL das generelle Problem, dass pro IP-Adresse nur ein SSL-Zertifikat benutzt werden darf. Wenn man mehrere Subdomains als virtuelle Hosts betreibt (https://v1.ecw.de, https://v2.ecw.de u.s.w.) wird immer nur das Zertifikat des ersten VHosts benutzt (im Beispiel das Zertifikat von https://v1.ecw.de).
Seit einiger Zeit bietet das Unternehmen StartCom kostenlose Zertifikate an. Das CA-Zertifikat von StartCom ist in den aktuellen Browsern sowie im Zertifikate-Speicher von Windows verfügbar. Leider besteht nicht die Möglichkeit, ein kostenloses Wildcard-Zertifikat zu erhalten. StartCom teilt nur Zertifikate vom Typ C1 und nicht C2 kostenlos aus.
Mit dem Wildcard-Zertifikat wäre es möglich gewesen, dass alle VHosts unter https://*ecw.de sich ein Zertifikat teilen. Die andere Möglichkeit, für jede Domain ein eigenes Zertifikat einzurichten, entfällt aus den bereits genannten Gründen: pro IP nur ein Zertifikat.
Seit 2003 existiert die RFC 3456, in der Server Name Indication (SNI) definiert wird. Damit ist es möglich, pro IP-Adresse mehrere Zertifikate zu benutzen. Leider implementieren bis jetzt nur wenige Webserver SNI nativ.
Als ich im Internet nach dem Thema googelte, wurde ich in Wolfs Blog fündig. Er beschrieb die Implementierung und Kompilierung von SNI unter Apache 2.2.xx. Durch seine Ausführungen war ich mehr als motiviert und hatte nun den Plan, SNI unter Apache 2.0.63 und Windows zum Laufen zu bringen.
Durch meine letzten Tätigkeiten beim mod_auth_ldap-Patch hatte ich noch die Sourcen von Apache 2.0.63 auf der Festplatte und sammelte nun die benötigten Dateien zusammen:
- OpenSSL 0.9.8j für Windows mit TLS-Extension – hatte Wolf bereits kompiliert
- SNI-Backport-Patch für Apache 2.0.63
- Backport von ap_vhost_iterate_given_conn für Apache 2.0.63
- zlib in Version 1.1x
Nachdem ich die beiden Backport-Patches in meine Sourcen eingespielt hatte, musste ich noch die Lib-Pfade für die OpenSSL-Dateien einpassen und außerdem das zlib-Verzeichnis inkludieren, da OpenSSL irgendwie auf zlib referenzierte.
Die Kompilierung verlief danach ohne Probleme und ich machte mich an das Deployen der Dateien. Wichtig dabei war, das auf dem Server folgende neue Dateien kamen:
- openssl.exe aus Wolfs-SSL-Package nach Apache2/bin
- libeay32.dll und ssleay32.dll aus Wolfs-SSL-Package nach Apache2/bin bzw. %SYSTEM32%
- Release/libhttpd.dll aus dem Apache-Kompiliat nach Apache2/bin
- modules/ssl/Release/mod_ssl.so nach Apache2/modules
Das Starten des Apaches schlug beim ersten Mal fehl, da ich die libhttpd.dll vergessen hatte zu kopieren. Diese wird aber benötigt, da der Backport von ap_vhost_iterate_given_conn auf diese Library abzielt.
Danach fuhr der Apache normal hoch, ich richtete nun in aller Kürze zwei Virtuelle Hosts in meiner httpd.conf ein und erzeugte zwei Self Signed Certificates. Das Ergebnis war mehr als erfreulich, denn soweit funktionierte alles.
Der nächste Schritt wird für mich sein, dass ich nun unsere Zertifikate von der StartCom-CA signieren lasse.
mod_ssl-with-sni-2.0.63-win32.zip (952.1 KiB, 337 hits)
Sharepoint mit Apache als Reverse Proxy veröffentlichen
Heute stand ich vor der Aufgabe, dass unsere interne Sharepoint-Seite im Apache veröffentlicht werden sollte. An sich hätte das kein Problem sein sollen – war es im Endeffekt aber.
Bei uns schaut es schematisch so aus, dass der Apache alle Anfragen anhand des Domain-Namens auf die virtuellen Server weiterreicht bzw. als Proxy fungiert: Internet -> Apache / DMZ -> Virtueller Host / Backend Server.
Anhand des Blog-Eintrags von Todd Klint den Sharepoint-Service so eingerichtet, dass er auf die richtige URL lauscht. Die Konfigurationsdatei des virtuellen Hosts sah dann folgendermaßen aus:
<VirtualHost *:443> SSLEngine On SSLProxyEngine On SSLCertificateFile "$CERT_FILE" SSLCertificateKeyFile "$CERT_KEY_FILE" SSLProxyCACertificateFile "$CERT_CA_FILE" ProxyRequests Off ProxyVia On ServerAdmin admin@sps.mydomain.com DocumentRoot $VHOST_DIR/sps/web ServerName sps.mydomain.com:443 ErrorLog "|rotatelogs.exe $VHOST_DIR/sps/logs/%Y%m%d_ssl_error.log 86400" CustomLog "|rotatelogs.exe $VHOST_DIR/sps/logs/%Y%m%d_ssl_access.log 86400" common # AddDefaultCharset ISO LogLevel debug ProxyPreserveHost Off KeepAlive Off ProxyPass / http://backend-srv:8080/ ProxyPassReverse / http://backend-srv:8080/ <Proxy *> Order allow,deny Allow from all </Proxy> <Directory "$VHOST_DIR/sps/"> Order allow,deny Allow from all </Directory> </VirtualHost>
Es ist noch zu sagen, dass der Sharepoint nicht mit HTTPS sondern mit Plain-HTTP läuft. Der Apache kümmert sich um die Verschlüsselung. Im IIS muss außerdem als Authentifizierungsmethode für die Sharepoint-Seite Standardauthentifizerung und nicht Integrierte Windows-Authentfizierung benutzt werden. Apache 2.0.63 kam bei mir mit der Benutzung von NTLM nicht klar.
Ein weiterer Fehler der auftrat war, dass der Sharepoint-Server über zwei Netzwerkkarten verfügte, die zu veröffentlichende SharePoint-Instanz aber an keine IP fest gebunden gewesen ist. Der Apache hatte Probleme damit arge Probleme (sporadisches "Verbindung fehlgeschlagen"), deshalb habe ich die SP-Instanz einer IP direkt im IIS zugewiesen.
Rautiges 2009-09-01
Verfasst von Schakko unter Active Directory / LDAP, Apache, Arbeit, Musik, Rechnerstrukturen und Betriebssysteme am 1. September 2009
Durch das Konzert und Projekte in der Firma bin ich immer noch im Stress, deshalb hier mal wieder etwas Rautiges.
- Am Freitag den 4. September hat unsere Band – die Rhythmutants – unseren ersten Auftritt. Mittlerweile läuft auch alles so, wie es soll. Ich bin stark gespannt, wie das Konzert dann ablaufen wird. Die Woche ist noch geprägt von jeder Menge Bandproben.
Den letzten Samstag hat die Band + Support-Crew bis spät in die Nacht geprobt und Party gemacht. War sehr lustig – aber auch anstrengend. - Für mod_auth_ldap habe in der vergangenen Woche einen Patch geschrieben, mit dessen Hilfe es möglich ist, für einen (virtuellen) Server einmalig die LDAP-Verbindungseinstellungen zu setzen, die dann für den kompletten (virtuellen) Server gelten. Mich hat es mehr als angepestet, dass ich für jede Ressource die Zugangsdaten (AuthLDAPBindDN, AuthLDAPBindPassword und AuthLDAPURL) immer wieder setzen musste. Nun existieren die Parameter AuthLDAPGlobalURL, AuthLDAPGlobalBindDN und AuthLDAPBindPassword.
- Unser Haus-internes Kicker-Team, bestehend aus Christoph, Marc, Florian, Mandy, Hendrik und mir, hat am vergangenen Donnerstag den ersten Platz beim 1. IT-Region 38 Kicker-Cups belegt. Es war ein äußerst spannender und unterhaltsamer Abend, den unser ECW-Badabäääm-Team erfolgreich abschließen konnte. Fotos vom Turnier gibt es bei der IT Region 38, Christoph hat weiterhin noch ein kurzes Interview gegeben.
Nach dem Turnier haben Marc und ich am Klieversberg noch bis in die frühen Morgenstunden unseren grandiosen Sieg gefeiert. - Beim Studium habe ich heute den Abschlusstest für Rechnerstrukturen und Betriebssysteme abgelegt – und überraschend nicht bestanden. 2 der Tests wurden meiner Meinung nach vom System falsch ausgewertet, obwohl sie offensichtlich richtig waren, denn es mussten nur die Lösungen aus dem Buch abgeschrieben werden. Ich habe Bianca über diesen Missstand informiert und hoffe auf eine baldige Antwort – mein Tutor ist leider noch bis zum 6. September im Urlaub, so dass mir der richtige Ansprechpartner momentan nicht zur Seite steht. Ist alles sehr ärgerlich.
- Die Migration unserer virtuellen Maschinen auf den Xen-Server haben wir erfolgreich hinter uns gebracht, auch wenn es einige Probleme gab. Nun läuft aber wieder alles. Damit steht – sobald es Zeittechnisch machbar ist – der Einführung eines Build-Servers nichts mehr im Wege. Erste Tests mit CruiseControl und unserem Deployment-Tool habe in der letzten Woche bereits gemacht.
Sobald die komplette Infrastruktur steht, werde ich dazu einen ausführlichen Artikel schreiben. - Heute ist das erste Treffen zur bevorstehenden Ruderregatta am 12. und 13. September am Allersee. Ich bin sicher, dass die Ruderregatta wie jedes Jahr eine Mordsgaudi wird
mod_auth_sspi: Patch für SSPIUsernameFormat eingereicht
Verfasst von Schakko unter Apache, Entwicklung am 19. August 2009
Hat etwas gedauert (*räusper*) bis ich den Patch für mod_auth_sspi veröffentlicht habe. Günter ist noch nicht dazu gekommen, den Patch ins CVS zu mergen, deshalb habe ich das gepatchte Modul inkl. Patches für die Sourcen bei sourceforge.net hochgeladen.
Der SSPIUsernameFormat-Patch steht nun also offiziell zum Download bereit.
How-To: Module des Apache Webservers unter Windows mit Visual Studio kompilieren und debuggen
Verfasst von Schakko unter Active Directory / LDAP, Apache, Entwicklung, Windows am 18. August 2009
Aus aktuellem Anlass musste ich mal wieder ein Apache-Modul gerade biegen. Diesmal war es mod_auth_ldap. mod_auth_ldap sollte als Modul zur Authentifizierung und Autorisierung von LDAP-Benutzern (Active Directory, eDirectory, OpenLDAP etc.) vielen Leuten ein Begriff sein.
Diese Anleitung zeigt in wenigen Schritten, wie man aus den Sourcen des Apache Webserver 2.0.63 ein Modul patcht, kompiliert und debuggt. Voraussetzung für die Kompilierung ist ein Visual Studio Express bzw. Visual C++. Ich verwende auf meinem Rechner ein (relativ altes) Visual Studio 2005 Professional.
Auf meinem Arbeitsrechner schaut es so aus, dass ich unter c:\ckl\dev\srv\web\apache\2.0.63 ($DIR_BIN) die installierte und kompilierte Version des Apache Webservers habe und unter c:\ckl\dev\projects\app\apache\2.0.63 ($DIR_SRC) die zugehörigen Sourcen liegen.
Zuerst müssen von apache.org die aktuellen Sourcen für Windows heruntergeladen und auf der Festplatte ($DIR_SRC) entpackt werden. Wenn man zusätzlich noch durch die Sourcen des Apache Webservers debuggen will, werden weiterhin die Symbols benötigt. Diese müssen in das Hauptverzeichnis des kompilierten Apache Webservers ($DIR_BIN) entpackt werden.
Die Datei $DIR_SRC\Apache.dsw enthält alle Teilprojekte des Webservers und muss mit Visual Studio geöffnet werden. Falls beim Öffnen die Frage nach einer Konvertierung der Daten kommt, kann/muss dies mit Ja beantwortet werden.
Ausgehend davon, dass wir nur mod_auth_ldap patchen wollen, muss nun im Solutions Explorer das Teilprojekt mod_auth_ldap ausgewählt und die jeweiligen Änderungen in die mod_auth_ldap.c eingetragen werden. Mit einem Rechtsklick auf mod_auth_ldap > Build wird nun das Modul erstellt. Die .so-Datei lässt sich jetzt unter $DIR_SRC\modules\experimental\[Debug|Release]\mod_auth_ldap.so ($MOD_AL) finden. Weiterhin ist die $DIR_SRC\modules\experimental\Debug\mod_auth_ldap.pdb ($DEBUG_AL) wichtig.
Der Apache muss nun als Dienst beendet werden (net stop apache2), danach muss $MOD_AL und $DEBUG_AL nach $DIR_BIN\modules kopiert (vorher Sicherung des Originals erstellen!) und Apache auf der Kommandozeile ($DIR_BIN\bin\apache.exe) gestartet werden. Dies ist nötig, damit Visual Studio sich an den Apache-Prozess hängen kann. Wird der Apache als Dienst ausgeführt, ist dies nicht ohne Weiteres möglich.
Sobald der Webserver läuft, kann im Visual Studio unter Debug > Attach to Process die Apache-Prozesse ausgewählt werden. Beim Hit eines Breakpoints in der mod_auth_ldap.c stoppt der Apache die Ausführung.
Hier die Hinweise im Überblick:
- $DIR_SRC\Apache.dsw als Projekt öffnen und nicht $DIR_SRC\modules\experimental\mod_auth_ldap.dsw, da man bei letzterem zu viele Einstellungen ändern muss.
- Apache.exe als normalen Prozess und nicht als Dienst starten, da sich sonst der Debugger nicht nutzen lässt.
- Neben der .so-Datei muss auch die zugehörige .pdb-Datei in $DIR_BIN\modules kopiert werden.
Rautiges 2009-04-15
Verfasst von Schakko unter Apache, Dies und das, Mathematisch-logische Grundlagen der Informatik, Musik, Netzwerk am 15. April 2009
Hier ein paar Sachen, die ich in den letzten Tagen gefunden habe und rautiert werden müssen:
- Beim Studium hing ich einige Zeit am Thema “Vollständige Induktion” fest. Martin gab mir auf der letzten Präsenzveranstaltung den Tipp, dass es auf youtube einige interessante Videos bezüglich Algebra gibt. Natürlich gibt es auch etwas über die vollständige Induktion, was ich euch nicht vorenthalten will:
- Eine gute Übersicht über die Junktoren und deren Beschreibung gibt es in diesem PDF.
- Ebenfalls eine Übersicht inklusive Informationen über Kommutativ- und Assoziativ-Eigenschaften gibt es hier.
- Morgen werde ich mich mit den ersten Aufgaben und Tests aus dem Kurs Mathematisch-Logische Grundlagen befassen. Mit LaTeX bekommt man mathematische Formeln besonders gut dargestellt. Wer unter Windows mal LaTeX testen will, ist mit einer Distribution wie Miktex gut beraten.
- Wer gerne Akustikgitarren-Lieder mit Ska- und Rock-Einfluss mag, sollte sich unbedingt die Band Solche anhören. Solche macht eine Mischung zwischen Kettcar, Joint Venture und E-Egal. Besonders gut hat mir der Track “Gutenberg” gefallen.
- In RSS-/OPML-Liste haben habe ich heute zwei neue Blogs aufgenommen: Schrankmonster und aheil.de. Beide befassen sich mit der Software-Entwicklung auf der .NET-Schiene. Gefällt mir sehr gut und ist lesenswert.
- Über Schrankmonster bin ich dann auch auf Pixelmachine gestoßen. SuperJer -- der Entwickler -- hat in wenigen Kilobytes einen vollfunktionsfähigen 3D-Raytracer in C bzw. C++ geschrieben, der ohne weitere Grafikbibliotheken auskommt. Der Quellcode ist gut verständlich und ich denke, einfacher kann man die Arbeit eines Raytracers nicht nachvollziehen.
- Apache Software Foundation dominiert -- das Apache Directory Studio (Eclipse-basierender LDAP-Client) wurde in der Version 1.4.0 veröffentlicht. Nach einem Blick auf die Seite der ASF realisierte ich erst, dass man nur mit OpenSource-Produkten der ASF einen Großteil der Serverdienste abdecken kann.
Klar: Jeder kennt den Apache HTTP Server, Tomcat und Geronimo müssten auch noch ein Begriff sein. Wenn es dann aber zu CouchDB (dokumenten-oprientierte Datenbank), Directory (LDAP-Server), JackRabbit (Content Repository) und Konsorten geht, kommen einem die Begriffe nicht mehr so bekannt vor. Was ich mit diesem Eintrag sagen will: ASF ist leet. - Problematisches mit der Astaro Firewall
Gestern stellte ein Kunde die Anfrage, ob wir auf deren (Windows 2003 / Exchange) Server Email-Adressen für externe Mitarbeiter erstellen können. Kein Problem: Im AD legte ich kurzerhand neue Benutzer mit passenden Exchange-Postfächern an, auf der Firewall wurde der POP3/IMAP-Verkehr an den Server geforwardet. Die Authentifizierung und Autorisierung der Benutzer am ActiveDirectory geschieht über den Exchange-Server.
Nun mussten wir aber ebenfalls das Versenden der Emails über SMTP ermöglichen, da nur empfangen von Emails etwas eintönig und sinnbefreit ist.
Auf der ASG (Version 7.4xx) lief ein SMTP-Proxy, der nur Verbindungen vom Mail-Provider zuließ und an den Exchange-Server weiterleitete. Der SMTP-Proxy filtert Spams gleichzeitig aus. Als einziger Relay-Host ist der eben genannte Mail-Provider eingetragen.
Unsere erste Lösung -die auch funktionierte- war, ein einziges Benutzer-Konto für die vorher erzeugten Email-Postfächer anzulegen. Jeder Client würde dann über den selben SMTP-Benutzer seine Emails versenden.
Mein Wunsch war es dann, dass wir im SMTP-Proxy den Relay von Emails erlauben, wenn der Benutzer in einer bestimmten Gruppe des Active Directories ist. Somit hätten wir die Benutzerverwaltung komplett im ActiveDirectory und bräuchten uns bei zukünftigen Änderungen nicht mehr um die Firewall kümmern. Außerdem hätte bei weiteren Email-Adressen das Passwort weitergegeben werden müssen.
Wir erstellten also auf der ASG eine neue Benutzer-Gruppe. Die Gruppe wurde so eingerichtet, dass als Backend das ActiveDirectory mit der dort hinterlegten Benutzergruppe benutzt werden sollte.
Leider funktionierte dies nicht. Sobald ein Benutzer aus der (AD)-Gruppe versuchte, eine Email zu senden, schlug die Authentifizierung fehl. Im Log des AUA konnten wir feststellen, dass die ActiveDirectory Authentifizierung überhaupt nicht statt fand.
Ich hoffe, wir bekommen in den nächsten für dieses Problem eine Antwort von Astaro. - Debugging von LDAP / Active Directory Verbindungen
Falls die Verbindung von einem LDAP-Client zum Backend (OpenLDAP, Active Directory, eDirectory etc) nicht funktionieren sollte, wünscht man sich oft ein Tool, was die Verbindungsdaten dazwischen anzeigt. Aus Sicherheits- und Performance-Gründen ist der Einsatz von Wireshark oft nicht möglich. Ein dedizierter Proxy nur für LDAP-Verbindungen nicht direkt. Das Sourceforge-Project ldap-proxy dient einem anderen Einsatzzweck, die Verbindung mit netcat bekam ich in mehreren Versuchen (sowohl mit der Windows Binary als auch mit einer Cygwin nc.exe) nicht zum Laufen.
Nach einigem Suchen stolperte ich dann über das Shareware-Tool Proxy Workbench, das neben LDAP auch für so ziemlich jedes andere gängige Protokoll einen Proxy-Port öffnen kann.
Top-Postings
Gerade eben in einer Email der Apache-Mailingliste als Signatur gesehen:
A: It reverses the normal flow of conversation. Q: What's wrong with top-posting? A: Top-posting. Q: What's the biggest scourge on plain text email discussions?A: It reverses the normal flow of conversation.
PHP-Scripts unter Ubuntu / Apache als root ausführen
Für das ckl-net bzw. meinem Webserver habe ich heute Abend ein kleines Admin-Script geschrieben, mit dem ich MPD und Icecast starten, stoppen und beenden kann.
Damit das Script funktioniert, muss man in der /etc/sudoers folgendes eintragen:
www-data ALL=NOPASSWD: /usr/local/bin/service-wrapper
Damit kann der Benutzer www-data ohne Passwort mit root-Rechten das Script /usr/local/bin/service-wrapper ausführen. service-wrapper an sich ist nur ein kleines Wrapper-Script zum Kotrollieren der Daemons:
#!/bin/sh /etc/init.d/$1 $2
Das PHP-Script muss nun das Wrapper-Script aufrufen:
<?php
exec("/usr/local/bin/service-wrapper $servicename $status")
?>
New patch for mod_auth_sspi: SSPIUsernameFormat
Verfasst von Schakko unter Apache, Open Source am 14. Mai 2008
Over the weekend I finished in collusion with Guenter Knauf a new patch for mod_auth_sspi.
The directives SSPIOmitDomain, SSPIUseActiveDirectoryStyle and SSPIUsernameCase are replaced with the new directive SSPIUsernameFormat. You can use the modifiers %d and %D for lower/uppercase domainname, %u and %U for lower/uppercase username.
The patch was submitted to Guenter and I am still waiting for a review.
Patched mod_auth_sspi compiled against Apache 2.0.61
Verfasst von Schakko unter Active Directory / LDAP, Apache, Application Server, Publikationen am 9. Mai 2008
The last Apache module i published was linked against Apache 2.0.54 and compiled with Visual Studio 2005. Yesterdy evening I noticed, that the module does not work with Apache 2.0.61.
So i compiled it with Visual C++ 6 and used the includes from Apache 2.0.61.
Sag was!