Как настроить SSL в apache?

10

Я установил apache в RHEL 6. Все работает нормально. Какие все изменения и конфигурации нужно сделать, чтобы использовать https: // localhost: 443 / .

Если я изменяю «Listen 80» на 443, возникает ошибка соединения SSL

«Ошибка 107 (net :: ERR_SSL_PROTOCOL_ERROR): ошибка протокола SSL.»

Памятник погибшим
источник

Ответы:

13

Если вы используете apache2, то вы должны сделать следующее:

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

$ openssl genrsa -out mydomain.key 1024

Эта команда создаст 1024-битный закрытый ключ и поместит его в файл mydomain.key.

Шаг 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.

Теперь этот файл должен включать содержимое, подобное этому:

NameVirtualHost *:80
NameVirtualHost *:443
Listen 443

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain
ServerName www.mydomain.com
ServerAlias mydomain.com
</VirtualHost>


<VirtualHost *:443>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain-secure
ServerName mail.mydomain.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/mydomain.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/mydomain.key
</VirtualHost>


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


<VirtualHost *:80>
ServerAdmin webmaster@mydomain.com
DocumentRoot /srv/www/htdocs/mydomain
ServerName mail.mydomain.com
RedirectMatch permanent (/.*) https://mail.mydomain.com$1
</VirtualHost>
pradeepchhetri
источник
Первые три строки не обязательны. 1. NameVirtualHostустарела и будет удалена в будущих версиях Apache. В настоящее время его уже нет. 2. Listen 443может вызвать проблемы, если apache уже настроен на прослушивание через порт 443, что во многих дистрибутивах linux уже имеет место. Добавляйте только если вы уверены, что эта строка не настроена где-либо еще.
Lanoxx
3

Не изменять , Listen 80чтобы 443в /etc/httpd/conf/httpd.conf. SSL настроен в /etc/httpd/conf.d/ssl.conf. На RHEL 6 SSL включен и прослушивается по умолчанию с самозаверяющим сертификатом.

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

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

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

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName localhost
   Redirect permanent / https://localhost
</VirtualHost>

Используя mod_rewrite, вы также создаете именованный виртуальный хост. Это не рекомендуемый метод, но будет работать.

NameVirtualHost *:80
<VirtualHost *:80>
   # Enable the Rewrite engine
   RewriteEngine On
   # Make sure the connection is not already HTTPS
   RewriteCond %{HTTPS} !=on
   # This rewrites the URL and forwards to https
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

Если вы хотите отключить SSL, закомментируйте эти строки /etc/httpd/conf.d/ssl.confи перезапустите Apache.

LoadModule ssl_module modules/mod_ssl.so
Listen 443
Джордж М
источник
Фактически, если вы добавляете пакет mod_ssl для RHEL6, он создает /etc/httpd/conf.d/ssl.conf, который загружает модуль и устанавливает <VirtualHost _default_:443>со всеми необходимыми параметрами, каждый с комментариями. mod_sslПакет не устанавливается автоматически , если вы установили httpdпакет.
Jsbillings
1
Я хотел бы добавить только одну вещь к вашей перезаписи: используйте [R=301,L]вместо просто [R,L]так, переписывание использует постоянную опцию кодов состояния HTTP 3xx .
dcestari