# [gelöst] apache passwort nur bei ssl

## ixo

Hallo,

ich bin nicht der große apache Experte und hoffe, dass mir jemand weiterhelfen kann  :Smile:  .

Ich habe einen apache laufen. Diesen möchte ich intern über http ohne Passwort im Zugriff haben und von außen über https mit Passwort-Abfrage.

Ich habe eigene Zertifikate angelegt und in /etc/apache2/vhosts.d/default_vhost.include die Einträge hinzugefügt:

```
        AllowOverride All

          

        # Controls who can get stuff from this server.

        Order allow,deny

        Allow from all

        

        AuthType Basic

        AuthName "Geschuetzter Bereich" 

        AuthUserFile /etc/apache2/htpasswd

        Require valid-user 

```

Das funktioniert alles (daher auch die sehr knappe Beschreibung). Das Passwort wird abgefragt.

Frage: Wie bekomme ich den apache dazu, dass Passwort nur bei SSL Verbindungen abzufragen? (http ist von außen aufgrund Firewall / forwarding nicht möglich).

Falls die Unterscheidung über http/https nicht geht oder kompliziert ist, wäre auch eine Unterscheidung über Netzwerksegmente ok.

Danke und viele Grüße, ixoLast edited by ixo on Sun Sep 04, 2011 8:57 am; edited 1 time in total

----------

## root_tux_linux

Wenn du HTTP und HTTPS Anfragen getrennt haben willst dann setz einfach verschiedene DocumentRoots jeweils in 00_default_ssl_vhost.conf und 00_default_vhost.conf.

Danach musst du einfach die .htaccess im z.B. /var/www/localhost/ssl ablegen und schon kommt bei jeder Anfrage mittles https://foobar.fo  die Passwortabfrage und http://foobar.fo halt keine Passwortabfrage.

Beispiel:

```
        DocumentRoot /var/www/localhost/html

        <Directory />

                Options -Indexes FollowSymLinks

                AllowOverride None

        </Directory>

```

```
        DocumentRoot /var/www/localhost/ssl

        <Directory />

                Options -Indexes FollowSymLinks

                AllowOverride None

        </Directory>

```

----------

## ixo

Hallo root_tux_linux,

erst 'mal danke für den Tipp - so ganz kapier ich ihn aber nicht   :Embarassed:  .

Ich antworte übrigens erst jetzt, weil ich die ganze Woche unterwegs war   :Sad:  .

Also, in /etc/apache2 gibt:

```
# grep -r DocumentRoot .

./original/extra/httpd-ssl.conf:DocumentRoot "/var/www/localhost/htdocs"

./original/extra/httpd-vhosts.conf:    DocumentRoot "/usr/docs/dummy-host.example.com"

./original/extra/httpd-vhosts.conf:    DocumentRoot "/usr/docs/dummy-host2.example.com"

./original/httpd.conf:# DocumentRoot: The directory out of which you will serve your

./original/httpd.conf:DocumentRoot "/var/www/localhost/htdocs"

./original/httpd.conf:# This should be changed to whatever you set DocumentRoot to.

./original/httpd.conf:    # access content that does not live under the DocumentRoot.

./extra/httpd-ssl.conf:DocumentRoot "/var/www/localhost/htdocs"

./extra/httpd-vhosts.conf:    DocumentRoot "/usr/docs/dummy-host.example.com"

./extra/httpd-vhosts.conf:    DocumentRoot "/usr/docs/dummy-host2.example.com"

./apache2.conf:# DocumentRoot: The directory out of which you will serve your

./apache2.conf:DocumentRoot "/var/www/localhost/htdocs"

./apache2.conf:# This should be changed to whatever you set DocumentRoot to.

./apache2.conf:    # access content that does not live under the DocumentRoot.

./vhosts.d/default_vhost.include:# DocumentRoot: The directory out of which you will serve your

./vhosts.d/default_vhost.include:DocumentRoot "/var/www/localhost/htdocs"

./vhosts.d/default_vhost.include:# This should be changed to whatever you set DocumentRoot to.

./vhosts.d/default_vhost.include:   # access content that does not live under the DocumentRoot.

```

Hier muss ich dann wahrscheinlich nichts ändern!?

Die Datei 00_default_ssl_vhost.conf sieht so aus:

```
# perl -p -e 's/^\s*#.*//' < 00_default_ssl_vhost.conf | perl -p -e 's/^\s*$//'

<IfDefine SSL>

<IfDefine SSL_DEFAULT_VHOST>

<IfModule ssl_module>

Listen 443

<VirtualHost _default_:443>

   ServerName localhost

   Include /etc/apache2/vhosts.d/default_vhost.include

   ErrorLog /var/log/apache2/ssl_error_log

   <IfModule log_config_module>

      TransferLog /var/log/apache2/ssl_access_log

   </IfModule>

   SSLEngine on

   SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

   SSLCertificateFile /etc/ssl/apache2/server.crt

   SSLCertificateKeyFile /etc/ssl/apache2/server.key

   <FilesMatch "\.(cgi|shtml|phtml|php)$">

      SSLOptions +StdEnvVars

   </FilesMatch>

   <Directory "/var/www/localhost/cgi-bin">

      SSLOptions +StdEnvVars

   </Directory>

   <IfModule setenvif_module>

      BrowserMatch ".*MSIE.*" \

         nokeepalive ssl-unclean-shutdown \

         downgrade-1.0 force-response-1.0

   </IfModule>

   <IfModule log_config_module>

      CustomLog /var/log/apache2/ssl_request_log \

         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

   </IfModule>

</VirtualHost>

</IfModule>

</IfDefine>

</IfDefine>

```

Die Datei 00_default_vhost.conf sieht so aus:

```
 # perl -p -e 's/^\s*#.*//' < 00_default_vhost.conf | perl -p -e 's/^\s*$//'

<IfDefine DEFAULT_VHOST>

Listen 80

NameVirtualHost *:80

<VirtualHost *:80>

   ServerName localhost

   Include /etc/apache2/vhosts.d/default_vhost.include

   <IfModule mpm_peruser_module>

      ServerEnvironment apache apache

   </IfModule>

</VirtualHost>

</IfDefine>

```

Die Datei default_vhost.include so:

```
# perl -p -e 's/^\s*#.*//' < default_vhost.include | perl -p -e 's/^\s*$//'

ServerAdmin root@localhost

DocumentRoot "/var/www/localhost/htdocs"

<Directory "/var/www/localhost/htdocs">

   Options Indexes FollowSymLinks

   AllowOverride All

   Order allow,deny

   Allow from all

</Directory>

<IfModule alias_module>

   ScriptAlias /cgi-bin/ "/var/www/localhost/cgi-bin/"

</IfModule>

<Directory "/var/www/localhost/cgi-bin">

   AllowOverride None

   Options None

   Order allow,deny

   Allow from all

</Directory>

```

Wo muss ich die von Dir genannten Definitionen einfügen?

Wie schon geschrieben - ich bin, was apache angeht, ziemlich unbedarft. 

Danke und viele Grüße, ixo

----------

## gimpel

Wenn du Auth basic nur für den SSL-Vhost willst, dann füge in deiner 00_default_ssl_vhost.conf einene Direktive hinzu nach dem "Include ..."

```
<Directory "/var/www/localhost/htdocs">

        AuthType Basic

        AuthName "Geschuetzter Bereich"

        AuthUserFile /etc/apache2/htpasswd

        Require valid-user

</Directory>
```

Wenn du es in der default_vhost.include machst, zieht es für beide vhosts, wie du bereits gemerkt hast.

Das mit den 2 Document roots ist nicht nötig, dann müsste man ja den content doppelt, und dazu noch .htaccess Dateien pflegen.

----------

## ixo

Danke,

klappt so - klingt ja auch nicht gerade unlogisch. So ist es auf jeden Fall sinnvoller.

Doppelt zu pflegen hätte man es nach der Methode weiter oben aber m.E. auch nicht gemusst. Da werden symbolic links eingesetzt. (Falls das nicht gehen würde, hätte ich mit mount --bind den Kram nochmal eingeblendet, was natürlich eher noch unschöner gewesen wäre.)

Viele Grüße, ixo

----------

