Apache2: SSL или TLS и Virtual Hosts - несколько сайтов (хостов) на одном ip

Материал из AlexNook
Перейти к: навигация, поиск

Встал у меня серьёзный вопрос безопастности. Понадобилось обеспечить доступ к своим ресурсам по SSL или TLS протоколу для безопастности. Т.к. у меня всего один IP адрес, а веб ресурсов лежит несколько, то как оказалось эта задача не решается тривиально.

По умолчанию доступен по SSL лишь localhost, который доступен из вне по домену example.com. Мне поналобилось сделать доступным по httpS поддомен (виртуальный хост или Apache virtual host) по адрсеу test.example.com.

В этом мне сильно помгла вот эта статья на Gentoo wiki. Нет смысла тут её переписывать, чуть ниже выложу её архив на всякий пожарный и то, какие настройки я подправил у себя в соответствии со статьёй.

Правка конфигурационных файлов

Для начала надо добавить вот такую строчку в /etc/apache2/vhosts.d/00_default_ssl_vhost.conf (почти в самый конец):

File: /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
  1.                 </IfModule>
  2.             </VirtualHost>
  3.  
  4.             Include /etc/apache2/vhosts.d/*.ssl-conf
  5.  
  6.         </IfModule>
  7.     </IfDefine>
  8. </IfDefine>

Затем в папке /etc/apache2/vhosts.d/ при добавлении нового виртуального хоста доступного только по безопастному протоколу SSL 3.0 или TLS 1.0 необходимо создать файл с его именем, куда внести по аналогии следующие данные:

File: /etc/apache2/vhosts.d/05_test_vhost.ssl-conf
  1. <VirtualHost *:443>
  2.         #Server name - Domain Name
  3.         ServerName test.example.com
  4.         #Root folder of server
  5.         DocumentRoot "/var/www/test/htdocs"
  6.         #CGI location (root)
  7.         <IfModule alias_module>
  8.                         ScriptAlias /cgi-bin/ "/var/www/test/cgi-bin/"
  9.         </IfModule>
  10.  
  11.         #enable SSL
  12.         SSLEngine on
  13.         #This forces forbidden access when SSLRequireSSL or SSLRequire successfully decided that access should be forbidden
  14.         SSLOptions StrictRequire
  15.         # enable SSLv3 and TLSv1, but not SSLv2
  16.         SSLProtocol all -SSLv2
  17.  
  18.         #The following enables only the seven strongest ciphers (http://httpd.apache.org/docs/2.0/ssl/ssl_howto.html):
  19.         SSLCipherSuite HIGH:MEDIUM
  20.  
  21.         #Sertificates path
  22.         SSLCertificateFile /etc/ssl/apache2/test/server.crt
  23.         SSLCertificateKeyFile /etc/ssl/apache2/test/server.key
  24.  
  25.  
  26.         #When this option is enabled, the standard set of SSL related CGI/SSI environment variables are created.
  27.         <FilesMatch "\.(cgi|shtml|phtml|php)$">
  28.                 SSLOptions +StdEnvVars
  29.         </FilesMatch>
  30.  
  31.         #rules for CGI dir
  32.         <Directory "/var/www/test/cgi-bin">
  33.                 SSLOptions +StdEnvVars
  34.                 SSLRequireSSL
  35.                 AllowOverride All
  36.                 Options ExecCGI
  37.                         <IfModule mod_access.c>
  38.                                 Order allow,deny
  39.                                 Allow from all
  40.                         </IfModule>
  41.         </Directory>
  42.  
  43.         #Rules for scripts root folder
  44.         <Directory "/var/www/test/htdocs">
  45.                 SSLRequireSSL
  46.                 Options -Indexes FollowSymLinks
  47.                 AllowOverride All
  48.                 Order allow,deny
  49.                 Allow from all
  50.         </Directory>
  51.  
  52.         <IfModule setenvif_module>
  53.                 BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
  54.         </IfModule>
  55.  
  56.         #LOGGIN
  57.         ErrorLog /var/log/apache2/ssl_error_log
  58.         <IfModule log_config_module>
  59.                 TransferLog /var/log/apache2/ssl_access_log
  60.         </IfModule>
  61.         ## Per-Server Logging:
  62.         # The home of a custom SSL log file. Use this when you want a compact
  63.         # non-error SSL logfile on a virtual host basis.
  64.         <IfModule log_config_module>
  65.                 CustomLog /var/log/apache2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
  66.         </IfModule>
  67.  
  68.         #Other Stuff
  69.         <IfModule peruser.c>
  70.                 ServerEnvironment apache apache
  71.                 MinSpareProcessors 4
  72.                 MaxProcessors 20
  73.         </IfModule>
  74.  
  75.         <IfModule itk.c>
  76.                 AssignUserID apache apache
  77.                 MaxClientsVHost 50
  78.         </IfModule>
  79.  
  80. </VirtualHost>
Note: Не забудь-те сгенерировать SSL сертификаты. Об этом моно прочитать вот тут.


Ссылки

  • Gentoo wiki. Основа статьи.
  • БэкАп статьи выше на данном портале.