Um den Zugriff auf Webseiten des Apache-Webservers über HTTPS zu gewähren, muss der Apache mit SSL-Unterstützung eingerichtet werden.
Ich möchte ein Zertifikat von meiner Domäne erhalten und kein! selbstzertifiziertes Zertifikat erstellen.
Am Beispiel eines Servers mit Namen : pcnr0433
Auf dem Server müssen zuerst die benötigten Pakete installiert werden:
apt-get install apache2 openssl libapache2-mod-evasive
Es wird dann zunächst ein selbst signiertes Zertifikat erstellt mit folgendem Befehl :
openssl req -newkey rsa:4096 -new -x509 -nodes -sha512 -days 3650 -keyout pcnr0433.key -out pcnr0433.pem
Dabei werden verschiedene Infos abgefragt. Der Common Name muss unbedingt auf den Hostnamen lauten.
Country Name : DE State : NRW Locality Name: Stolberg Organization Name: Meine Firma Organizational Name : IT-Abteilung Common Name: pcnr0433.domäne.de Email Address: admin@domain.de
Es wurden die Dateien pcnr0433.crt und pcnr0433.key erstellt.
Sonderfall mehrere Domainnamen ...
Anschließend muss das Zertifikat vom RootCA der Windowsdomäne beglaubigt werden. Dazu muss eine CSR-Datei erstellt werden:
openssl req -out pcnr0433.csr -key pcnr0433.key -new
es wurde eine Datei pcnr0433.csr erstellt.
(Manchmal gibt es hier Probleme mit dem Zeilenumbrüchen in der CSR-Datei)
oder certreq -attrib „CertificateTemplate:WebServer“ -submit pcnr0433.csr auf einem winrechner
Der Inhalt der pcnr0433.csr wird an die RootCA der Domäne (als domänenadmin angemeldet) als erweiterte Zertifikatanforderung übergeben: http://CA-Server/certsrv
Dazu muss unbedingt der Internetexplorer benutzt werden!
Senden Sie eine „Erweiterte Zertifikatsvorlage“ ein…
„Reichen Sie eine Zertifikatanforderung ein, die eine Base64-codierte CMD- oder PKCS10-Datei verwendet, oder eine Erneuerungsanforderung, die eine Base64-codierte PKCS7-Datei verwendet, ein.“
Kopieren Sie den Inhalt der Datei pcnr0433.csr in das Feld „Gespeicherte Anforderung“ oder wählen Sie die einzufügende Datei aus.
wählen Sie als Zertifikatsvorlage „Webserver“
Klicken Sie jetzt auf „Download des Zertifikats“ und speichern die Datei „DER-codiert“ als pcnr0433.cer ab.
Diese Datei muss dann wieder auf den Linuxserver kopiert.
Anschließend wird diese Datei auf dem Linuxserver in eine für den Apache lesbare PEM-Datei umgewandelt mit:
openssl x509 -in pcnr0433.cer -out pcnr0433.pem –inform der
Die Datei pcnr0433.pem wird in das Verzeichnis /etc/ssl/certs/ kopiert.
Die Datei pcnr0433.key wird in das Verzeichnis /etc/ssl/private/ kopiert.
cp pcnr0433.pem /etc/ssl/certs/ ; cp pcnr0433.key /etc/ssl/private/
Die Rootzertifikatkette muss vom CA-Server geholt werden und von *.p7b(windows) nach *.pem(linux) konvertiert werden:
openssl pkcs7 -inform der -in myCAchain.p7b -out myCAchain.pem -print_certs
Diese Datei ist wichtig, damit Firefox nicht über fehlende Ausstellerinfos meckert.
Anschließend muss die Datei /etc/apache2/sites-available/default-ssl etwa so konfiguriert werden:
... ServerAdmin hausnetz@firma.de ErrorLog /var/log/apache2/error-ssl.log CustomLog /var/log/apache2/access-ssl.log LogLevel warn SSLEngine on SSLCertificateFile /etc/ssl/certs/pcnr0433.pem SSLCertificateKeyFile /etc/ssl/private/pcnr0433.key SSLCertificateChainFile /etc/ssl/certs/myCAchain.pem ...
Jetzt wird die Seite hinzugefügt,dass SSL-Modul aktiviert und der Apache neu gestartet:
a2ensite default-ssl a2enmod ssl /etc/init.d/apache2 restart invoke-rc.d apache2 force-reload
Danach sollte der Server nach abnicken der Zertifikatswarnung unter https://pcnr0433 erreichbar sein.
Danach kann die weitere Konfiguration erfolgen.
wenn das alte Zertifikat nach ein paar Jahren abgelaufen ist muss es erneuert werden.
Dazu kann man die alte Key-Datei weiter benutzen.
stoppen des APACHE und umbennen der Originaldateien wegen backup:
rcapache2 stop cd /etc/apache2/ssl/ mv pcnr0433.csr pcnr0433.csr.org mv pcnr0433.pem pcnr0433.pem.org
jetzt neue CSR-Datei mit altem Key generieren:
openssl req -new -key pcnr0433.key -out pcnr0433.csr -newkey rsa:2048
dann die CSR-Datei bei der CA einreichen und die neu generierte CER-Datei in das alte Verzeichnis reinkopieren.
dann daraus eine PEM-Datei generieren:
openssl x509 -inform der -in pcnr0433.cer -out pcnr0433.pem #in suse muss die Datei als crt-datei konvertiert und nach /etc/apache2/ssl.crt kopiert werden: #openssl x509 -inform PEM -in pcnr0433.pem -out pcnr0433.crt
anschließend den apache wieder neu starten und Zertifikat im Browser testen.
rcapache2 start
fertig
der momentane Vorteil ist, dass GNUTLS schon TLS1.2 unterstützt.
Ich möchte hier ein selbstsigniertes Zertifikat benutzen.
Zuerst müssen auf dem Server die benötigten Pakete installiert werden:
apt-get install apache2 libapcache2-mod-evasive libapache2-mod-gnutls gnutls-bin
dann SSL-Unterstützung abschalten:
a2dismod ssl
dann GNUTLS-Unterstützung einschalten:
a2enmod gnutls
dann Standard-GNUTLS-Seite aktivieren:
a2ensite default-tls
dann die Datei /etc/apache2/sites-enabled/default-tls
editieren
von:
GnuTLSPriorities NORMAL
nach:
GnuTLSPriorities SECURE256:!ANON-DH:!MD5
oder wer kein TLSv1.2 kann, bleibt draussen:
GnuTLSPriorities SECURE256:!VERS-SSL3.0:!VERS-TLS1.0:!VERS-TLS1.2!ANON-DH:!MD5
dann Apache einmal neustarten:
/etc/init.d/apache2 restart
schon fertig → https://meinServer
Wer anschließend den unverschlüsselten HTTP-Zugriff auf Port 80 abschalten will kann das so versuchen:
a2dissite 000-default
(der genaue Name steht in /etc/apache2/sites_enabled/
)
Dann werden die folgenden Zeilen in der Datei /etc/apache2/ports
wie folgt auskommentiert:
... #NameVirtualHost *:80 #Listen 80 ...
Als Abschluß muss der Apache neu gestartet werden:
/etc/init.d/apache2 restart
Gegeben ist ein Debian-Rechner ohne Winbind, Kerberos, Samba.
Auf dem Rechner ist ein Apache2 installiert. Der Rechner ist in der selben DNS-Domäne wie die Windowsrechner.
Das Verzeichnis /tmp/ntlmtest soll für authentifizierte Domänenbenutzer freigegeben werden.
Zunächst muss ein Softwarepaket nachinstalliert werden.
Es werden wahrscheinlich noch ein paar abhängige, zusätzliche Pakete mit installiert:
apt-get install libapache2-authenntlm-perl
Das Zielverzeichnis muss angelegt und vorher berechtigt werden:
mkdir /tmp/ntlmtest touch /tmp/ntlmtest/testdatei chown -R www-data:www-data /tmp/ntlmtest/
Die Apachekonfigurationsdatei /etc/apache2/conf.d/ntlm.conf muss erstellt und konfiguriert werden:
Alias /ntlmtest /tmp/ntlmtest <Directory /tmp/ntlmtest> PerlAuthenHandler Apache2::AuthenNTLM AuthType ntlm AuthName Basic require valid-user PerlAddVar ntdomain "MYNTDOMAIN mydomaincontr1 mydomaincontr2" PerlAddVar defaultdomain MYNTDOMAIN PerlSetVar splitdomainprefix 1 Options Indexes Multiviews FollowSymlinks Order allow,deny allow from all </Directory>
Anschließend muss der Apachedienst seine Konfiguration noch neu einlesen:
/etc/init.d/apache2 reload
eventuell noch ein :
a2enmod perl
Jetzt sollte der Zugriff auf http://server/ntlmtest möglich sein.
Die Benutzeranmeldung erfolgt über „MeinName“ und nicht über „MYNTDOMAIN\MeinName“
Die Apachekonfigurationsdatei muss wie folgt konfiguriert werden:
Alias /ntlmtest /tmp/ntlmtest <Directory /tmp/ntlmtest> PerlAuthenHandler Apache2::AuthenNTLM AuthType ntlm AuthName Basic require user user1 user2 user3 administrator PerlAddVar ntdomain "MYNTDOMAIN mydomaincontr1 mydomaincontr2" PerlAddVar defaultdomain MYNTDOMAIN PerlSetVar splitdomainprefix 1 Options Indexes Multiviews FollowSymlinks Order allow,deny allow from all </Directory>
Die Gruppe MYNTGroup
muss als globale Gruppe
konfiguriert sein.
Die Apachekonfigurationsdatei muss wie folgt konfiguriert werden:
Alias /ntlmtest /tmp/ntlmtest <Directory /tmp/ntlmtest> PerlAuthenHandler Apache2::AuthenNTLM AuthType ntlm AuthName Basic require valid-user PerlAddVar requiregroup MyNTGroup1 PerlAddVar ntdomain "MYNTDOMAIN mydomaincontr1 mydomaincontr2" PerlAddVar defaultdomain MYNTDOMAIN PerlSetVar splitdomainprefix 1 Options Indexes Multiviews FollowSymlinks Order allow,deny allow from all </Directory>
Auf dem Rechner ist ein Apache2 installiert. Der Rechner ist in der selben DNS-Domäne wie die Windowsrechner.
Die Softwarepakete libapache2-mod-auth-pam, libapache2-mod-auth-sys-group müssen installiert werden:
apt-get install apache2 libapache2-mod-authnz-pam
Das Verzeichnis /tmp/ntlmtest soll für authentifizierte Domänenbenutzer freigegeben werden.
Zunächst muss der Rechner in die Domäne aufgenommen werden.
siehe dazu auch Winbind und Pluggable Authentication Module
WINBIND muss also zwingend funktionieren.
Zur Authentifizierung ist die Datei /etc/pam.d/apache2
( manchmal auch /etc/pam.d/httpd
) ausschlaggebend.
Danach wird das freizugebende Verzeichnis dem Benutzer www-data und der Gruppe zugeordnet:
chown -R www-data:wwwdata /tmp/ntlmtest
Dann wird die Datei /etc/apache2/sites-enabled/000-default editiert:
NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost ...
Beispiel:
Freigabe von /tmp/ntlmtest nur für die Benutzer pitti,platsch,doedel,administrator
Alias /ntlmtest/ "/tmp/ntlmtest/" <Directory "/tmp/ntlmtest/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny allow from all AuthType Basic AuthName "allgemeine PAM-Authentifizierung fuer ntlmtest" AuthPAM_Enabled On AuthPAMService AuthBasicProvider Pam Require user pitti platsch doedel administrator </Directory> ... </VirtualHost>
Beispiel:
Freigabe von /tmp/install nur für Mitglieder der Domänengruppe PCAdmins
Alias /install/ "/tmp/install/" <Directory "/tmp/install/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny allow from all AuthType Basic AuthName "allgemeine PAM-Authentifizierung für Install-Verzeichnis" AuthPAMService apache AuthUserFile /dev/null AuthBasicProvider PAM Require group PCAdmins </Directory> ... </VirtualHost>
schlechteste Methode da das Passwort in Klartext lesbar ist!
installiere die zusätzliche Pakete libaprutil1-ldap
und libldap und starte den APACHE neu durch.
apt-get install libaprutil1-ldap libldap-2.4-2 a2enmod authnz_ldap ldap
erstelle eine Datei /etc/apache2/sites-enabled/meineSeite
Dann editiere die Seite wie folgt:
Alias /loganalyzer /usr/share/loganalyzer #LDAPVerifyServerCert Off #keine Überprüfung des Zertifikats #LDAPTrustedMode SSL <Location /loganalyzer> AuthName "Authentifizierung mit LDAP" AuthType Basic AuthBasicProvider ldap AuthLDAPBindDN 'benutzer@domain' AuthLDAPBindPassword 'geheim' AuthLDAPURL 'ldaps://mydc.my.dom.ain/OU=Abteilungen,DC=dom,DC=ain?sAMAccountName?sub?(objectClass=*)' <RequireAll> #nur für eine Gruppe,(hier ohne Anführungszeichen!): Require ldap-group CN=meineLDAPGruppe,OU=Gruppen,DC=dom,DC=ain #ansonsten: #Require valid-user </RequireAll> </Location>
dann noch ein Apacheneustart:
/etc/init.d/apache2 restart
—-
Ich möchte eine Webseite gegen die lokalen Benutzer des Webservers und gegen ein AD gemischt authentifizieren.
Konfiguriere als erstes den Server wie oben damit er gegen das AD authentifiziert.
Dann installiere das Apachemodul libapache2-mod-authnz-external
und aktiviere es:
apt-get install libapache2-mod-authnz-external pwauth a2enmod authnz_external
Lege jetzt eine Datei /etc/apache2/conf.d/external
an und fülle sie mit diesen 2 Zeilen:
AddExternalAuth pwauth /usr/sbin/pwauth SetExternalAuthMethod pwauth pipe
Ändere jetzt die Verzeichniskonfigurationsseite (Bsp. /etc/apache2/mods-enabled/dav_svn.conf
) und füge hier 2 zusätzliche Zeilen ein:
<Location /svn/meinRepo> ... AuthExternal pwauth AuthBasicProvider external ... </Location>
Starte den Apache jetzt neu und versuche Dich mit einem lokalen und einem AD-Account an der Webseite anzumelden.
/etc/init.d/apache2 restart
—-
Schnell mal seinen eigenen Proxy einrichten(ohne Authentifizierung!)
dazu installiere ein Apachemodul nach:
apt-get install libapache2-mod.proxy-html
aktiviere das Modul mit:
a2enmod proxy a2enmod proxy_http
erstelle eine Datei /etc/apache2/sites-available/proxy
:
touch /etc/apache2/sites-available/proxy
füge folgenden Inhalt in diese Datei:
Listen 3128 <VirtualHost meinServername:3128> ProxyRequests On #ProxyVia On <Proxy *> Order allow,deny Allow from all </Proxy> </VirtualHost>
aktiviere die Site:
a2ensite proxy
starte den Apache neu durch:
/etc/init.d/apache2 restart
Jetzt kann der Server als HTTP-Proxy von jedem PC ohne Authentifizierung über den Port 3128 benutzt werden.
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log
netstat -pan |grep tcp|grep -E ":80|:443"|grep -v "127.0.0.1"|grep -v "0.0.0.0"|grep "ESTABLISHED" | awk '{print $5}'| cut -d: -f1| sort|uniq
installierbare Module anzeigen :
aptitude search libapache2
PAM-Modul libapache2-mod-auth-pam
wurde ersetzt durch libapache2-mod-authnz-external
und pwauth
.
apt-get install pwauth a2enmod authnz_external
AuthPAM_Enabled on
ersetzen durch:
AddExternalAuth pwauth /usr/sbin/pwauth SetExternalAuthMethod pwauth pipe
Einfache Umleitung einer Website:
Eintrag in der /etc/apache2/default-server.conf
oder in der /etc/apache2/sites-enabled/000-default(debian):
Redirect 301 /alt http://neuerServer/neu/
Umleitung von HTTP auf HTTPS:
Rewritemodul aktivieren:
a2enmod rewrite
Eintrag z.B. in die Konfigurationdatei /etc/apache2/sites-enabled/000-default
<VirtualHost *:80> ... RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] ...
Danach den Server neustarten:
/etc/init.d/apache2 restart
oder einfach die Datei /var/www/htdocs/index.html
wie folgt editieren:
<meta http-equiv="refresh" content="0; url=https://meinserver/">
Komprimierung einschalten
a2enmod deflate
Datei /etc/apache2/conf.d/deflate.conf
mit folgendem Inhalt erstellen:
<IfModule mod_deflate.c> # Compress HTML, CSS, JavaScript, Text, XML and fonts AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml #diese Dateien bitte nicht komprimieren: SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI \.(?:docx|xlsx|pptx|pdf|rpm|deb)$ no-gzip dont-vary <IfModule mod_headers.c> Header append Vary User-Agent </IfModule> </IfModule>
danach ist ein Apacheneustart erforderlich
HTTPS gegen unsichere Umleitung auf HTTP absichern:
(Man-in-the-Middle-Attacke)
Erst Headers-Modul aktivieren:
a2enmod headers
Danach Eintrag z.B. in die Konfigurationdatei /etc/apache2/sites-enabled/my-ssl
einfügen:
<VirtualHost Meinserver.dom.ain:443> ... # ein Jahr gültig : 60*60*24*365 Header always set Strict-Transport-Security "max-age=31536000 ; includeSubDomains" ...
Danach den Server neustarten:
/etc/init.d/apache2 restart
Diffie-Hellman-Schlüsseltausch preferieren, SSL3 abschalten, RC4 abschalten, MD5 abschalten:
... SSLCipherSuite HIGH:!aNULL:!MD5:!RC4 # bei altem Apache 2.2(squeeze) Verschlüsselung auf DHE und zur Not AES256(IE) konfigurieren: # SSLCipherSuite DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-SHA # SSLProtocol +TLSv1 SSLHonorCipherOrder On ...
Danach den Server neustarten:
/etc/init.d/apache2 restart
oder noch härter(!):
... SSLCipherSuite EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA ...
Reversproxy(fremde Inhalte als eigene darstellen):
(mod_proxy + mod_proxy_http muss geladen sein.)
ProxyRequests On ProxyVia On ProxyPass /suse/ http://neuerserver/suse/ ProxyPassRevers /suse/ http://neuerserver/suse/ <Proxy *> Order allow,deny Allow from all </Proxy>
danach müssen noch die Module geladen und der apache2 neu gestartet:
a2enmod proxy a2enmod proxy_http /etc/init.d/apache2 restart
Apachekonfiguration prüfen:
apachectl -S
oder
apache2ctl configtest
nachträglich IP-Adressen in den Logdateien gegen DNS-Namen auflösen
logresolve </var/log/apache2/access.log >/var/log/apache2/accessdns.log
Ablauf des Zertifikats prüfen:
echo QUIT | openssl s_client -connect localhost:443 | sed -ne '/BEGIN CERT/,/END CERT/p' | \ openssl x509 -noout -text | grep -A2 Validity
Bilder bitte nicht komprimiert ausliefern
SetEnvIfNoCase Request_URI \.(?:gif|GIF|jpe?g|JPE?G|png|PNG)$ no-gzip dont-vary
bcrypt-Passwort generieren
htpasswd -bnBC 10 "" geheim | tr -d ':'
Fehler: die eigene Web-Seite wird nicht gecached sondern immer wieder neu vom Webserver ausgeliefert.
Lösung Erstelle eine Datei .htaccess
im Root des Webverzeichnisses (z.B. /srv/www/htdocs/
) und füge folgende Zeilen ein:
Header unset Expires: Header set Pragma: "cache" Header set Cache-Control: "public, must-revalidate"
Danach sollten die Dateien vom Firmenproxy und eigenem Browser gecached werden.
Fehler: die eigene Web-Seite funktioniert nicht mehr:
in der Datei /var/log/apache2/error-ssl.log
tauchen Meldungen auf wie:
Cannot allocate memory: Could not run external authenticator ...
Lösung Ermittle die maximale Anzahl von geöffneten Dateien des Benutzers www-data
:
su www-data - ulimit -n exit
Dort sollte standardmäßig 1024 ausgegeben werden.
Editiere die Datei /etc/pam.d/su
und entkommentiere folgende Zeile:
session required pam_limits.so
dann editiere die Datei /etc/security/limits.conf
und füge folgende Zeilen am Ende ein:
www-data soft nofile 8128 www-data hard nofile 8128
Überprüfe die gemachten Einstellung nochmal wie oben.
Dann erstelle noch eine zusätzliches Swapdatei und binde es ein. Siehe dazu: Swap
Reloade den Apache anschließend neu:
/etc/init.d/apache2 reload
Fehler:Holiday-Dateien für Outlook werden nicht von Outlook geöffnet:
Lösung Am Ende folgende Zeile in Datei /etc/apache2/apach2.conf
einfügen:
AddType application/vnd.ms-outlook .hol
Rootzertifikatkette von p7b(windows) nach pem(linux) konvertieren:
openssl pkcs7 -inform der -in myca.p7b -out myca.pem -print_certs #eventuell in firefox als benutzer importieren: #certutil -A -i myca.pem -n "MyCA" -t "C,," -d .mozilla/firefox/<MEINPROFIL.default>