Я никогда раньше не настраивал SSL в Linux, но имею общее представление о том, как это работает. Ниже приведены спецификации сервера, если это поможет:
Сервер: CentOS Linux 6 Рабочая станция: Windows 7
Итак, у меня есть 4 домена, каждый из которых использует одну установку Magento и IP-адрес. Предположим, что один из моих доменов - «mywebsite1.com». Я сейчас пытаюсь включить SSL только для этого домена, но у меня возникают ошибки. Что я делаю не так? Вот мой рабочий процесс:
Я купил SSL у Godaddy, затем сгенерировал csr и ключ с помощью данной ими команды:
openssl req -new -newkey rsa:2048 -nodes -keyout mywebsite1.key -out mywebsite1.csr
Копирую оба файла в / etc / pki / tls / private
Я открываю mywebsite1.crs, затем копирую и вставляю код в Godaddy.
Я создаю файлы crt и загружаю их с Godaddy, загружаю на свой сервер, а затем перемещаю их в / etc / pki / tls / certs
а. 1-я попытка, я открыл /etc/httpd/conf.d/ssl.conf и обновил дефолт Значения SSLCertificate File, KeyFile и ChainFile блока VirtualHost указывают на правильные местоположения.
б. 2-я попытка, следующая http://dev.antoinesolutions.com/apache-server/mod_ssl Я изменил ssl.conf и добавил эту директиву:
NameVirtualHost *:443
c. Затем я удалил все дефолт Блок VirtualHost (довольно длинный).
Последняя попытка, я добавил следующее в измененный ssl.conf из
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/mywebsite1.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/mywebsite1.key
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt
DocumentRoot /var/www/html
ServerName mywebsite1.com
</VirtualHost>
6 .. Я перезапускаю Apache
7 .. Затем я перехожу к https://mywebsite1.com только чтобы найти ошибки, которые мешают мне просматривать сайт в различных браузерах.
Браузер: Firefox
SSL received a record with an unknown content type.
(Error code: ssl_error_rx_unknown_record_type)
Браузер: Chrome
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.
Браузер: IE ... переводит меня в Google ...
httpd.conf:
NameVirtualHost 12.34.567.89
<VirtualHost 12.34.567.89>
DocumentRoot /var/www/html
ServerName website1.com
</VirtualHost>
<VirtualHost 12.34.567.89>
DocumentRoot /var/www/html
ServerName website2.com
</VirtualHost>
<VirtualHost 12.34.567.89>
DocumentRoot /var/www/html
ServerName website3.com
</VirtualHost>
<VirtualHost 12.34.567.90:80>
DocumentRoot /var/www/html
ServerName website4.com
</VirtualHost>
Ноты:
Я пробовал все шаги 3 раза (см. 5a-5c), но мне все равно не удалось заставить SSL работать для одного из моих доменов. Как я могу заставить работать SSL?
ОБНОВЛЕНИЕ: apachectl -S
12.34.567.90:80 mywebsite4.com (/etc/httpd/conf/httpd.conf:1021)
12.34.567.89:* is a NameVirtualHost
default server mywebsite3.com (/etc/httpd/conf/httpd.conf:1016)
port * namevhost mywebsite3.com (/etc/httpd/conf/httpd.conf:1016)
port * namevhost mywebsite1.com (/etc/httpd/conf/httpd.conf:1026)
port * namevhost mywebsite2.com (/etc/httpd/conf/httpd.conf:1031)
port * namevhost mywebsite5.com (/etc/httpd/conf/httpd.conf:1036)
wildcard NameVirtualHosts and _default_ servers:
*:443 is a NameVirtualHost
default server mywebsite1.com (/etc/httpd/conf.d/ssl.conf:77)
port 443 namevhost mywebsite1.com (/etc/httpd/conf.d/ssl.conf:77)
Syntax OK
ОБНОВЛЕНИЕ: Все заработало .. но ..
Мне удалось запустить SSL, изменив vhost, чтобы он просто указывал на mywebsite1 вместо *: 443
<VirtualHost mywebsite1.com>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/mywebsite1.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/mywebsite1.key
#SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt
DocumentRoot /var/www/html
ServerName mywebsite1.com
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
</VirtualHost>
Это подтягивает SSL, однако ... протокол HTTP возвращает "неверный запрос"
Похоже, это изменение влияет на просмотр сайта без использования SSL. Я не могу указать порт, потому что перезапуск apache приведет к ошибке, что порты и непорты нельзя смешивать.
ОБНОВИТЬ
Исправлено предложением Майкла Хэмптона. Спасибо, парни.
У тебя куча <VirtualHost>
записи, которые не иметь определенный номер порта. Таким образом, как ваш apachectl -S
как показано на выходе, определение применяется ко всем прослушивающим портам. Определите номер порта для каждого из этих <VirtualHost>
с.
Если вы использовали /etc/httpd/conf.d/ssl.conf по умолчанию, у вас должны быть журналы:
Журналы ErrorLog / ssl_error_log Журналы TransferLog / ssl_access_log Предупреждение об уровне LogLevel
Попробуйте избавиться от:
SSLCertificateChainFile /etc/pki/tls/certs/gd_bundle.crt
а также убедитесь, что в вашем сертификате нет недостающей строки из копии.
Если у вас возникли проблемы, попробуйте сначала протестировать самоподписанный сертификат: http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#selfcert
Это должно помочь с другими проблемами:
http://www.instantssl.com/ssl-certificate-support/server_faq/ssl-server-certificate-apache.html