HTTPS перенаправление на каталог виртуального хоста, а HTTP не работает.

Вопрос или проблема

Конфигурация системы

  1. ubuntu14.04 (64bit)
  2. XAMPP 1.8.3-5
    • Apache/2.4.10
      (Unix) OpenSSL/1.0.1i PHP/5.5.15 mod_perl/2.0.8-dev Perl/v5.16.3

Я прочитал о новых функциях apache 2.4

Директива NameVirtualHost
Больше не требуется и теперь устарела.

Поэтому вместо NameVirtual host я пробовал другие виртуальные хосты на основе ip.

Следующие изменения я внес для работы с

httpd.conf

расскомментировал строку Include внутри блока <IfModule ssl_module>

<IfModule ssl_module>
<IfDefine SSL>
Include etc/extra/httpd-ssl.conf
</IfDefine>
</IfModule>

httpd-ssl.conf

создал SSL сертификат apache и добавил журналы на соответствующее место

<VirtualHost localhost:443>

DocumentRoot "/opt/lampp/htdocs/wsdl"
ServerName wsdl.local
ServerAlias wsdl.local
ServerAdmin [email protected]
ErrorLog "/opt/lampp/logs/wsdl_error_log"
TransferLog "/opt/lampp/logs/wsdl_access_log"
SSLEngine on
SSLCertificateFile "/opt/lampp/apache2/ssl/wsdl.crt"
SSLCertificateKeyFile "/opt/lampp/apache2/ssl/wsdl.key"
</VirtualHost>

вот файл журнала ошибок

wsdl_error_log

[Fri Nov 21 15:43:12.001231 2014] [ssl:warn] [pid 5322] AH01906: wsdl.local:443:0 серверный сертификат является сертификатом CA (BasicConstraints: CA == TRUE !?)
[Fri Nov 21 15:43:12.001350 2014] [ssl:warn] [pid 5322] AH01909: wsdl.local:443:0 серверный сертификат НЕ включает идентификатор, который совпадает с именем сервера
[Fri Nov 21 15:43:13.001886 2014] [ssl:warn] [pid 5323] AH01906: wsdl.local:443:0 серверный сертификат является сертификатом CA (BasicConstraints: CA == TRUE !?)
[Fri Nov 21 15:43:13.001960 2014] [ssl:warn] [pid 5323] AH01909: wsdl.local:443:0 серверный сертификат НЕ включает идентификатор, который совпадает с именем сервера

Моя проблема следующая

  • http://localhost >> Неправильный запрос
  • https://localhost/wsdl/ >> не работает
  • https://192.168.xx.xx/ >> Сбой безопасного соединения (Код ошибки: ssl_error_rx_record_too_long)
  • https://192.168.xx.xx/wsdl/ >> Ошибка SSL соединения

в то время как

  • http://192.168.xx.xx/ >> работает (как в стандартном xampp)
  • http://localhost переходит в каталог http://localhost/wsdl

P.S localhost ведет себя так же, как 127.0.0.1 в каждом случае

Пожалуйста, подскажите, что еще я должен добавить, чтобы это работало? например

  • добавить что-нибудь в /etc/hosts или любую другую конфигурацию
    или
  • расскомментировать строку Include etc/extra/httpd-vhosts.conf в httpd.conf

обновление

создан правильный сертификат
Примечание: напишите wsdl.local

Самый важный элемент, о котором запрашивается, — это строка, которая гласит
“Common Name (например, полное DNS-имя сервера или ваше имя)”. Вы должны ввести
доменное имя, которое вы хотите связать с сертификатом, или
публичный IP-адрес сервера, если у вас нет доменного имени.

добавлен адрес виртуального хоста в /etc/hosts

127.0.0.1 wsdl.local

изменен /opt/lampp/etc/extra/ httpd-ssl.conf

<VirtualHost *:80>
    DocumentRoot "/opt/lampp/htdocs"
    ServerName localhost
</VirtualHost>

<VirtualHost _default_:443> <-- добавлен обратно _default_
ServerAlias www.wsdl.local  <-- добавлен алиас с www

<Directory "/opt/lampp/htdocs/wsdl"> <-- обернут каталог в "
    Options All
    AllowOverride All
    order allow,deny
    allow from all
    #SSLRequireSSL <-- закомментирован
</Directory>

и я заметил изменения в поведении URL

  • http://wsdl.local/ http://localhost & http://127.0.0.1 >> URL изменился на http://wsdl.local/xampp/ и отображает основную страницу XAMPP

  • https://wsdl.local/ & https://localhost/ переходят в директорию wsdl (что и нужно)

  • https://127.0.0.1/ >> URL превращается в https://127.0.0.1/xampp/ и Объект не найден

Но это все еще не то, что ожидается, требуется

http[s]://localhost/ и http[s]://127.0.0.1/ берут меня на главную страницу XAMPP

http[s]://wsdl.local переходит в директорию wsdl

Шаг 1: Используйте OpenSSL для создания ключей, которые используются для защиты вашего
сайта. Эти ключи используются при шифровании и расшифровке трафика
на вашем защищенном сайте.

$ openssl genrsa -out mydomain.key 1024

Шаг 2: Создайте свой собственный сертификат.

 $ openssl req -new -key mydomain.key -x509 -out mydomain.crt

Шаг 3: Храните закрытый ключ в каталоге /etc/apache2/ssl.key/
и сертификат в каталоге /etc/apache2/ssl.crt/.

Примечание: Каталог ssl.key должен быть доступен только для чтения только для root.

Шаг 4: Теперь вам нужно отредактировать файл httpd.conf в /etc/apache2.

Теперь этот файл должен содержать следующее:

> <VirtualHost *:80>
> 
> ServerAdmin [email protected]
> 
> DocumentRoot /opt/lampp/htdocs/wsdl
> 
> ServerName www.mydomain.com
> 
> ServerAlias mydomain.com
> 
> </VirtualHost>


<VirtualHost *:443>

ServerAdmin [email protected]

DocumentRoot /opt/lampp/htdocs/wsdl

ServerName mail.mydomain.com

SSLEngine on

SSLCertificateFile /etc/apache2/ssl.crt/mydomain.crt

SSLCertificateKeyFile /etc/apache2/ssl.key/mydomain.key

ErrorLog "/opt/lampp/logs/wsdl_error_log"

TransferLog "/opt/lampp/logs/wsdl_access_log"

</VirtualHost>


<Directory /srv/www/htdocs/mydomain-secure>
SSLRequireSSL
</Directory>

Не меняйте Listen 80 на 443 в /etc/httpd/conf/httpd.conf. SSL настроен в /etc/httpd/conf.d/ssl.conf.
SSL включен и слушает по умолчанию с самоподписанным сертификатом.

Вы можете попасть на сайт по умолчанию, используя SSL, просто зайдя на https://localhost (добавлять порт в конец URL не нужно).

Если вы хотите перенаправить все HTTP-запросы на HTTPS (что, как я полагаю, вы пытаетесь сделать), вы можете либо добавить постоянное перенаправление, либо использовать модуль Apache mod_rewrite.

Самый простой и безопасный способ — настроить постоянное перенаправление. Включите имена виртуальных хостов и добавьте директиву Redirect в VirtualHost в /etc/httpd/conf/httpd.conf.

Ответ или решение

Ваша проблема связана с конфигурацией виртуальных хостов на вашем сервере Apache, а также с настройками SSL-сертификатов. Давайте разберемся, как правильно настроить веб-сервер и устранить возникающие ошибки.

Теория

Виртуальные хосты (Virtual Hosts) в Apache — это способ настроить несколько веб-сайтов или сервисов на одном сервере. Существует два типа виртуальных хостов: по IP и по имени. В Apache 2.4 директива NameVirtualHost больше не нужна для создания виртуальных хостов по имени, поскольку их поддержка реализована "из коробки".

SSL-сертификаты обеспечивают шифрование трафика между сервером и клиентом. Сертификат должен быть корректно выдан и настроен, чтобы избежать ошибок SSL, таких как "сертификат не включает идентификатор, который соответствует имени сервера".

Пример

У вас есть несколько проблем с текущей конфигурацией:

  1. Ошибки SSL:

    • Сертификат выдан как CA-сертификат (CA == TRUE), что некорректно для серверного сертификата.
    • Сертификат не соответствует имени сервера (Common Name и ServerName должны совпадать).
  2. Проблемы с маршрутизацией:

    • Проблемы с перенаправлением HTTP на HTTPS.
    • Несоответствия между URL и запрашиваемыми директориями.

Применение

  1. Исправление ошибок сертификата:

    • Создайте новый сертификат, убедившись, что Common Name совпадает с ServerName.
    • Убедитесь, что ваш сертификат не является CA-сертификатом. Это параметр задаётся при генерации сертификата.
    • Используйте следующие команды для создания личного ключа и сертификата:

      openssl genrsa -out wsdl.key 2048
      openssl req -new -key wsdl.key -x509 -days 365 -out wsdl.crt -subj "/CN=wsdl.local"
  2. Правильная конфигурация Virtual Hosts:

    Убедитесь, что в файле конфигурации Apache настроены виртуальные хосты для HTTP и HTTPS. Пример:

    Для HTTP (порт 80):

    <VirtualHost *:80>
       DocumentRoot "/opt/lampp/htdocs"
       ServerName localhost
       ServerAlias 127.0.0.1
       RewriteEngine On
       RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R=301,L]
    </VirtualHost>

    Для HTTPS (порт 443):

    <VirtualHost *:443>
       DocumentRoot "/opt/lampp/htdocs/wsdl"
       ServerName wsdl.local
       ServerAlias www.wsdl.local
       SSLEngine on
       SSLCertificateFile "/opt/lampp/apache2/ssl/wsdl.crt"
       SSLCertificateKeyFile "/opt/lampp/apache2/ssl/wsdl.key"
    </VirtualHost>
  3. Обновление /etc/hosts:

    Убедитесь, что файл /etc/hosts содержит соответствующие записи для вашего виртуального хоста:

    127.0.0.1 wsdl.local
  4. Диагностика и тестирование:

    • Перезапустите Apache: sudo /opt/lampp/lampp restart.
    • Проверьте журналы ошибок Apache для выявления дальнейших проблем.
    • Откройте ваш браузер и введите https://wsdl.local для подтверждения правильной работы конфигурации.
  5. Дополнительные настройки:

    Если необходимо, чтобы запросы на http://localhost и http://127.0.0.1 открывали главную страницу XAMPP, а запросы на https://wsdl.local — директорию WSDL, используйте показанные выше виртуальные хосты с перенаправлением.

Эти шаги помогут вам устранить ошибки SSL, правильно настроить виртуальные хосты и обеспечить корректную работу веб-сайта. Убедитесь, что после каждого изменения конфигурации вы перезапускаете Apache и проверяете, устранены ли ошибки.

Оцените материал
Добавить комментарий

Капча загружается...