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
                </IfModule>
            </VirtualHost>

            Include /etc/apache2/vhosts.d/*.ssl-conf

        </IfModule>
    </IfDefine>
</IfDefine>

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

File: /etc/apache2/vhosts.d/05_test_vhost.ssl-conf
<VirtualHost *:443>
	#Server name - Domain Name
	ServerName test.example.com
	#Root folder of server
	DocumentRoot "/var/www/test/htdocs"
	#CGI location (root)
	<IfModule alias_module>
			ScriptAlias /cgi-bin/ "/var/www/test/cgi-bin/"
	</IfModule>

	#enable SSL
	SSLEngine on
	#This forces forbidden access when SSLRequireSSL or SSLRequire successfully decided that access should be forbidden
	SSLOptions StrictRequire
	# enable SSLv3 and TLSv1, but not SSLv2
	SSLProtocol all -SSLv2

	#The following enables only the seven strongest ciphers (http://httpd.apache.org/docs/2.0/ssl/ssl_howto.html):
	SSLCipherSuite HIGH:MEDIUM

	#Sertificates path
	SSLCertificateFile /etc/ssl/apache2/test/server.crt
	SSLCertificateKeyFile /etc/ssl/apache2/test/server.key


	#When this option is enabled, the standard set of SSL related CGI/SSI environment variables are created.
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>

	#rules for CGI dir
	<Directory "/var/www/test/cgi-bin">
		SSLOptions +StdEnvVars
		SSLRequireSSL
		AllowOverride All
		Options ExecCGI
			<IfModule mod_access.c>
				Order allow,deny
				Allow from all
			</IfModule>
	</Directory>

	#Rules for scripts root folder
	<Directory "/var/www/test/htdocs">
		SSLRequireSSL
		Options -Indexes FollowSymLinks
		AllowOverride All
		Order allow,deny
		Allow from all
	</Directory>

	<IfModule setenvif_module>
		BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
	</IfModule>

	#LOGGIN
	ErrorLog /var/log/apache2/ssl_error_log
	<IfModule log_config_module>
		TransferLog /var/log/apache2/ssl_access_log
	</IfModule>
	## Per-Server Logging:
	# The home of a custom SSL log file. Use this when you want a compact
	# non-error SSL logfile on a virtual host basis.
	<IfModule log_config_module>
		CustomLog /var/log/apache2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
	</IfModule>

	#Other Stuff
	<IfModule peruser.c>
		ServerEnvironment apache apache
		MinSpareProcessors 4
		MaxProcessors 20
	</IfModule>

	<IfModule itk.c>
		AssignUserID apache apache
		MaxClientsVHost 50
	</IfModule>

</VirtualHost>
Note: Не забудь-те сгенерировать SSL сертификаты. Об этом моно прочитать вот тут.


Ссылки

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