Centos 7 apache ssl: How To Create an SSL Certificate on Apache for CentOS 7
SSL сертификат CentOS 7 apache
Потребовалось установить бесплатный SSL-сертификат от Let’s Encrypt на сервер с CentOS 7 и с Apache в качестве веб-сервера. Проще всего сделать это с помощью Certbot — написанного на python плагина, который позволяет получить и регулярно обновлять SSL сертификат для домена, поскольку выданные Let’s Encrypt сертификаты действительны только 90 дней с момента генерации.
В сети находится много инструкций для получения сертификатов, однако большая часть их требуют создания дополнительных проверочных директорий и разрешений, нам такое не годится. Мне кажется, что проще на несколько секунд глубокой ночью остановить web сервер, выполнить скрипт и получить SSL сертификат; и затем уж стартануть с новыми силами.
Впрочем, не будем растягивать инструкцию, мне за символы тут никто не платит… Приступаем!
Если у вас в CentOS уже установлен репозиторий от epel, то этот пункт можно пропустить. Проверить, установлен ли у вас epel можно так:
# установлен ли у вас epel ? yum repolist | grep epel * epel: mirror.freethought-internet.co.uk epel/x86_64 Extra Packages for Enterprise Linux 7 - x86 |
# установлен ли у вас epel ?
yum repolist | grep epel
* epel: mirror.freethought-internet.co.uk
epel/x86_64 Extra Packages for Enterprise Linux 7 — x86
Иначе действуем так:
# Подключаем epel release: yum install -y epel-release |
# Подключаем epel release:
yum install -y epel-release
Следующий ход — устанавливаем плагин certbot для apache:
# устанавливаем плагин certbot для apache: yum install -y certbot python2-certbot-apache |
# устанавливаем плагин certbot для apache:
yum install -y certbot python2-certbot-apache
Генерируем (выпускаем) сертификат:
# Сначала останавливаем на время генерации наш web-сервер: service httpd stop # Генерируем (выпускаем) сертификат. certbot certonly --standalone --agree-tos --email [email protected] -d YOUR_DOMAIN.ru # Стартуем web-сервер: service httpd start |
# Сначала останавливаем на время генерации наш web-сервер:
service httpd stop
# Генерируем (выпускаем) сертификат.
certbot certonly —standalone —agree-tos —email [email protected] -d YOUR_DOMAIN.ru
# Стартуем web-сервер:
service httpd start
В момент генерации мы получили следующий текст:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/YOUR_DOMAIN.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/YOUR_DOMAIN.ru/privkey.pem Your cert will expire on 2019-11-10. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
Видим наш сертификат, который нужно еще добавить в конфиг вашего домена YOUR_DOMAIN. ru. Создаем файл с конфигом в директории /etc/httpd/conf.d/. Пример конфига ниже:
<IfModule mod_ssl.c> SSLStaplingCache shmcb:/tmp/stapling_cache(128000) <VirtualHost *:443> #SSL SSLEngine On SSLCertificateFile /etc/letsencrypt/live/YOUR_DOMAIN.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/YOUR_DOMAIN.ru/privkey.pem # SSL stapling SSLUseStapling on # Intermediate configuration, tweak to your needs SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire ServerAdmin support@YOUR_DOMAIN. .*$ index.php [NC,L] Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require ip 9.9.9.9 Require all granted </Directory> ErrorLog /var/log/httpd/YOUR_DOMAIN.ru.error.log CustomLog /var/log/httpd/YOUR_DOMAIN.ru.access.log combined </VirtualHost> </IfModule> |
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
<VirtualHost *:443>
#SSL
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/YOUR_DOMAIN.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/YOUR_DOMAIN.ru/privkey.pem
# SSL stapling
SSLUseStapling on
# Intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
ServerAdmin support@YOUR_DOMAIN. .*$ index.php [NC,L]
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require ip 9.9.9.9
Require all granted
</Directory>
ErrorLog /var/log/httpd/YOUR_DOMAIN.ru.error.log
CustomLog /var/log/httpd/YOUR_DOMAIN.ru.access.log combined
</VirtualHost>
</IfModule>
Конечно же, нужно не забыть и разрешить 443 порт в firewall.
Теперь перезапускаем apache и, если все нормально, то делаем редирект из http в https:
# Останавливаем web-сервер: service httpd stop # Стартуем web-сервер: service httpd start # Для редиректа из http -> https ддобавляем в конфиг http: <If "%{HTTP_HOST} == 'YOUR_DOMAIN.ru'"> Redirect permanent / https://YOUR_DOMAIN.ru/ </If> # И снова рестартим web-сервер.. |
# Останавливаем web-сервер:
service httpd stop
# Стартуем web-сервер:
service httpd start
# Для редиректа из http -> https ддобавляем в конфиг http:
<If «%{HTTP_HOST} == ‘YOUR_DOMAIN. ru'»>
Redirect permanent / https://YOUR_DOMAIN.ru/
</If>
# И снова рестартим web-сервер..
Для продления SSL сертификата требуется регулярно, не менее 1 раза в 90 суток выполнять скрипт, который будет обновлять все сертификаты. Мы будем пытаться обновить его каждое воскресенье в 3:55. Для этого добавим в крон задание:
crontab -e 55 03 * 1,3,5,7,9,11 6 /usr/sbin/service httpd stop; /usr/bin/certbot renew; /usr/sbin/service httpd start |
crontab -e
55 03 * 1,3,5,7,9,11 6 /usr/sbin/service httpd stop; /usr/bin/certbot renew; /usr/sbin/service httpd start
Cертификат SSL на Apache создание пошаговое руководство
Вступление
TLS или «безопасность транспортного уровня», а его предшественник SSL , который обозначает «уровень защищенных сокетов», — это веб-протоколы, используемые для переноса обычного трафика в защищенную, зашифрованную оболочку. Используя эту технологию, серверы могут безопасно отправлять трафик между сервером и клиентом, не опасаясь, что сообщения будут перехвачены и прочитаны сторонней стороной. Система сертификатов также помогает пользователям проверять личность сайтов, с которыми они связаны.
В этом руководстве мы покажем вам, как настроить самоподписанный сертификат SSL для использования с веб-сервером Apache на компьютере CentOS 7.
Примечание. Самозаверяющий сертификат будет шифровать связь между вашим сервером и любыми клиентами. Однако, поскольку он не подписан ни одним из доверенных центров сертификации, включенным в веб-браузеры, пользователи не могут использовать сертификат для автоматической проверки подлинности вашего сервера.
Самозаверяющий сертификат может быть уместным, если у вас нет имени домена, связанного с вашим сервером, и для случаев, когда зашифрованный веб-интерфейс не обращен к пользователю. Если у вас есть доменное имя, во многих случаях лучше использовать сертификат с сертификатом CA.
Предпосылки
Прежде чем начать с этого руководства, необходимо выполнить несколько шагов.
Вам потребуется доступ к серверу CentOS 7 с пользователем без sudo
полномочий root, имеющим привилегии. Если вы еще не настроили это, вы можете запустить руководство по установке начального сервера CentOS 7 для создания этой учетной записи.
Вам также потребуется установить Apache для того, чтобы настроить для него виртуальные хосты. Если вы еще этого не сделали, вы можете использовать yum
для установки Apache через репозитории программного обеспечения по умолчанию CentOS:
Затем включите Apache как службу CentOS, чтобы он автоматически запускался после перезагрузки:
- sudo systemctl enable httpd.service
По завершении этих шагов вы можете войти в систему как свою учетную запись пользователя без полномочий root через SSH и продолжить обучение.
Шаг первый: установите Mod SSL
Чтобы настроить самозаверяющий сертификат, мы сначала должны быть уверены, что mod_ssl
модуль Apache, который обеспечивает поддержку SSL-шифрования, установлен сервером. Мы можем установить mod_ssl
с помощью yum
команды:
Модуль будет автоматически включен во время установки, и Apache сможет начать использовать сертификат SSL после его перезапуска. Вам не нужно принимать какие-либо дополнительные меры для того, mod_ssl
чтобы быть готовыми к использованию.
Шаг второй: создайте новый сертификат
Теперь, когда Apache готов к использованию шифрования, мы можем перейти к созданию нового сертификата SSL. В сертификате будет храниться основная информация о вашем сайте и будет сопровождаться ключевым файлом, который позволяет серверу безопасно обрабатывать зашифрованные данные.
Во-первых, нам нужно создать новый каталог для хранения нашего закрытого ключа ( /etc/ssl/certs
каталог уже доступен для хранения нашего файла сертификата):
- sudo mkdir /etc/ssl/private
Поскольку файлы, хранящиеся в этом каталоге, должны быть строго конфиденциальными, мы будем изменять разрешения, чтобы убедиться, что только пользователь root имеет доступ:
- sudo chmod 700 /etc/ssl/private
Теперь, когда у нас есть место для размещения наших файлов, мы можем создать ключ SSL и файлы сертификатов с помощью openssl
:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned. key -out /etc/ssl/certs/apache-selfsigned.crt
После ввода запроса вы получите приглашение, в котором вы можете ввести информацию о своем веб-сайте. Прежде чем мы перейдем к этому, давайте посмотрим, что происходит в команде, которую мы выпускаем:
- openssl : Это основной инструмент командной строки для создания и управления сертификатами, ключами и другими файлами OpenSSL.
- req -x509 : Указывает, что мы хотим использовать управление запросом на сертификат X.509 (CSR). «X.509» — это стандарт инфраструктуры открытых ключей, который поддерживает SSL и TLS для управления ключами и сертификатами.
- -nodes : Это говорит OpenSSL, чтобы пропустить этот вариант, чтобы защитить наш сертификат парольной фразой. Нам нужно, чтобы Apache мог читать файл без вмешательства пользователя, когда сервер запускается. Кодовая фраза предотвратит это, потому что нам нужно будет ввести его после каждого перезапуска.
- -дней 365 : Эта опция устанавливает время, в течение которого сертификат считается действительным. Мы установили его на один год здесь.
- -newkey rsa: 2048 : Указывает, что мы хотим одновременно создать новый сертификат и новый ключ. Мы не создали ключ, который требуется для подписания сертификата на предыдущем шаге, поэтому нам нужно создать его вместе с сертификатом.
rsa:2048
Часть говорит это , чтобы сделать ключ RSA , который имеет длину 2048 бит. - -keyout : эта строка сообщает OpenSSL, куда поместить созданный файл закрытого ключа, который мы создаем.
- -out : Это сообщает OpenSSL, где разместить сертификат, который мы создаем.
Заполните соответствующие подсказки соответствующим образом. Самая важная строка — та, которая запрашивает Common Name
. Вам нужно ввести имя домена, которое вы хотите связать с вашим сервером. Вместо этого вы можете ввести общедоступный IP-адрес, если у вас нет имени домена.
Полный список подсказок будет выглядеть примерно так:
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example
Organization Name (eg, company) [Default Company Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Example Dept
Common Name (eg, your name or your server's hostname) []:example. com
Email Address []:[email protected]
Оба созданных вами файла будут помещены в соответствующие подкаталоги /etc/ssl
каталога.
Хотя мы используем OpenSSL, мы также должны создать сильную группу Diffie-Hellman, которая используется для переговоров с Perfect Forward Secrecy с клиентами.
Мы можем сделать это, набрав:
- sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Это может занять несколько минут, но когда это будет сделано, у вас будет сильная группа DH, /etc/ssl/certs/dhparam.pem
которую мы можем использовать в нашей конфигурации.
Поскольку версия Apache, которая поставляется с CentOS 7, не включает SSLOpenSSLConfCmd
директиву, нам придется вручную добавить сгенерированный файл в конец нашего самозаверяющего сертификата. Для этого введите:
- cat /etc/ssl/certs/dhparam.pem | sudo tee -a /etc/ssl/certs/apache-selfsigned.crt
Теперь apache-selfsigned. crt
файл должен иметь как сертификат, так и созданную группу Diffie-Hellman.
Шаг третий: установите сертификат
Теперь у нас есть все необходимые компоненты готового интерфейса. Следующее, что нужно сделать, — настроить виртуальные хосты для отображения нового сертификата.
Откройте файл конфигурации протокола Apache в текстовом редакторе с правами root:
- sudo vi /etc/httpd/conf.d/ssl.conf
Найдите раздел, который начинается с <VirtualHost _default_:443>
. Здесь необходимо внести несколько изменений, чтобы гарантировать, что наш сертификат SSL правильно применяется на нашем сайте.
Настройка директив VirtualHost
Во-первых, раскомментируйте DocumentRoot
строку и отредактируйте адрес в кавычках в месте расположения корня документа вашего сайта. По умолчанию это будет /var/www/html
, и вам не нужно менять эту строку, если вы не изменили корень документа для своего сайта. Однако, если вы следовали руководству, подобному руководству по настройке виртуальных хостов Apache , корень документа вашего сайта может отличаться.
Затем раскомментируйте ServerName
строку и замените ее www.example.com
IP-адресом вашего домена или сервера (в зависимости от того, что вы указали как общее имя в своем сертификате):
/etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
. . .
DocumentRoot "/var/www/example.com/public_html"
ServerName www.example.com:443
Далее, найти SSLProtocol
и SSLCipherSuite
линий и либо удалить их или комментировать их. Конфигурация, которую мы вставляем в одно мгновение, предложит более безопасные настройки, чем значение по умолчанию, включенное в Apache CentOS:
/etc/httpd/conf.d/ssl.conf
. . .
# SSLProtocol all -SSLv2
. . .
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
Найти SSLCertificateFile
и SSLCertificateKeyFile
линий и изменить их в каталог , который мы сделали в /etc/httpd/ssl
:
/etc/httpd/conf. d/ssl.conf
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
Теперь мы закончили с изменениями в фактическом VirtualHost
блоке. Следующие изменения будут выполнены после окончания </VirtualHost>
тега в этом же файле.
Настройка защищенных параметров SSL
Затем, чтобы более безопасно настроить Apache SSL, мы будем использовать рекомендации Remy van Elst на сайте Cipherli.st . Этот сайт предназначен для обеспечения простых в использовании настроек шифрования для популярного программного обеспечения.
Примечание . Предлагаемые настройки на связанном выше сайте обеспечивают надежную защиту. Иногда это связано с большей клиентской совместимостью. Если вам нужно поддерживать более старых клиентов, есть альтернативный список, к которому можно получить доступ, щелкнув ссылку на странице с надписью «Да, дайте мне ciphersuite, который работает с устаревшим / старым программным обеспечением». Этот список можно заменить на элементы, скопированные ниже.
Выбор какой конфигурации вы будете в значительной степени зависеть от того, что вам нужно поддерживать. Оба они обеспечат большую безопасность.
Для наших целей мы можем полностью скопировать предоставленные настройки. Мы просто сделаем два небольших изменения.
Потратьте минутку, чтобы прочитать HTTP Strict Transport Security, или HSTS , и, в частности, о функциях «предварительной загрузки» . Предварительная загрузка HSTS обеспечивает повышенную безопасность, но может иметь далеко идущие последствия, если случайно включена или включена некорректно. В этом руководстве мы не будем предварительно загружать настройки, но вы можете изменить это, если вы уверены, что понимаете последствия.
Другое изменение, которое мы сделаем, — это прокомментировать SSLSessionTickets
директиву, поскольку это недоступно в версии Apache, поставляемой с CentOS 7.
Вставить в настройки с сайта ПОСЛЕ окончания VirtualHost
блока:
/etc/httpd/conf. d/ssl.conf
. . .
</VirtualHost>
. . .
# Begin copied text
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
# SSLSessionTickets Off
Когда вы закончите делать эти изменения, вы можете сохранить и закрыть файл.
(Рекомендуется) Изменение файла незашифрованного виртуального хоста для перенаправления на HTTPS
В настоящее время сервер предоставит как незашифрованный HTTP, так и зашифрованный HTTPS-трафик. Для большей безопасности рекомендуется в большинстве случаев автоматически перенаправлять HTTP на HTTPS. Если вы не хотите или не нуждаетесь в этой функции, вы можете спокойно пропустить этот раздел.
Для того, чтобы перенаправить весь трафик будет зашифрован SSL, создать и открыть файл , заканчивающийся .conf
в /etc/httpd/conf.d
каталоге:
- sudo vi /etc/httpd/conf.d/non-ssl.conf
Внутри создайте VirtualHost
блок для соответствия запросов на порт 80. Внутри используйте ServerName
директиву, чтобы снова соответствовать вашему доменному имени или IP-адресу. Затем используйте Redirect
для соответствия любым запросам и отправьте их на SSL VirtualHost
. Не забудьте включить конечную косую черту:
/etc/apache2/sites-available/000-default. conf
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>
Сохраните и закройте этот файл, когда закончите.
Шаг четвертый: активируйте сертификат
К настоящему времени вы создали сертификат SSL и настроили свой веб-сервер, чтобы применить его на своем сайте. Чтобы применить все эти изменения и начать использовать SSL-шифрование, вы можете перезапустить сервер Apache, чтобы перезагрузить его конфигурации и модули.
Сначала проверьте конфигурационный файл на наличие синтаксических ошибок, набрав:
- sudo apachectl configtest
Пока выход заканчивается Syntax OK
, вы можете продолжить. Если это не является частью вашего вывода, проверьте синтаксис ваших файлов и повторите попытку:
Output
. . .
Syntax OK
Перезапустите сервер Apache, чтобы применить изменения, введя:
- sudo systemctl restart httpd. service
Затем убедитесь, что порт 80 и 443 открыты в вашем брандмауэре. Если вы не используете брандмауэр, вы можете пропустить вперед.
Если вы используете firewall- брандмауэр, вы можете открыть эти порты, набрав:
- sudo firewall-cmd —add-service=http
- sudo firewall-cmd —add-service=https
- sudo firewall-cmd —runtime-to-permanent
Если работает брандмауэр iptables , команды, которые необходимо выполнить, сильно зависят от вашего текущего набора правил. Для базового набора правил вы можете добавить доступ HTTP и HTTPS, набрав:sudo iptables -I INPUT -p tcp -m tcp —dport 80 -j ACCEPT
- sudo iptables -I INPUT -p tcp -m tcp —dport 443 -j ACCEPT
В своем веб-браузере попробуйте посетить свое доменное имя или IP-адрес, https://
чтобы увидеть новый сертификат в действии.
https://example.com/
Ваш веб-браузер, скорее всего, предупредит вас, что сертификат безопасности сайта не заслуживает доверия. Поскольку ваш сертификат не подписан сертификационным центром, которому доверяет браузер, браузер не может проверить личность сервера, к которому вы пытаетесь подключиться. Мы создали самозаверяющий сертификат вместо доверенного сертификата с сертификатом CA, поэтому это имеет смысл.
После добавления исключения в проверку подлинности браузера вам будет разрешено перейти на ваш вновь защищенный сайт.
Заключение
Вы настроили сервер Apache для обработки запросов HTTP и HTTPS. Это поможет вам безопасно обмениваться данными с клиентами и не позволять внешним сторонам читать ваш трафик.
Если вы планируете использовать SSL для общедоступного веб-сайта, вероятно, вы должны приобрести сертификат SSL из доверенного центра сертификации, чтобы предотвратить просмотр страшных предупреждений каждому из ваших посетителей.
Как Установить SSL Сертификат на Apache под Управлением CentOS 7
VPS
access_time
15 сентября, 2017
hourglass_empty
2мин. чтения
Введение
В этом руководстве вы узнаете, как установить SSL/TLS сертификат на сервер Apache. После завершения данной процедуры, весь трафик между сервером и клиентом будет зашифрован. Это стандартная практика защиты сайтов электронной коммерции или других финансовых онлайн сервисов. Здесь мы будем использовать в качестве поставщика сертификата Let’s Encrypt — первопроходца в области внедрения технологий SSL.
Что вам понадобится
Перед тем, как вы начнете это руководство, вам понадобится следующее:
- SSH root доступ к CentOS 7 VPS
- Веб-сервер Apache с настроенным доменом и vhost
Шаг 1 — Установка зависимых модулей
Для установки сертификата нам необходим certbot, соответственно необходимо наличие EPEL хранилища, так как оно теперь недоступно по умолчанию. Также требуется mod_ssl для того, чтобы сервер Apache мог распознавать шифрование.
Для установки этих двух модулей, выполните данную команду в командной строке:
yum install epel-release mod_ssl
Приготовления завершены. Теперь вы готовы для установки самого certbot.
Шаг 2 — Установка клиента Let’s Encrypt
Установите certbot из EPEL хранилища выполнив команду:
yum install python-certbot-apache
Теперь сertbot должен быть установлен и готов к использованию.
Шаг 3 — Настройка SSL сертификата
Certbot — это отличный инструмент для управления SSL сертификатами, также он имеет возможность сгенерировать новый сертификат для определенного домена.
Здесь в качестве примера для которого будет создан сертификат, будет использоваться домен example.ru:
certbot --apache -d example.ru
Если вы хотите сгенерировать несколько SSL сертификатов для нескольких доменов и субдоменов, запустите эту команду:
certbot --apache -d example. ru -d www.example.ru
ВАЖНО! Первый домен должен быть вашим базовым доменом, в этом примере это example.ru.
В процессе установки вам будет представлено пошаговое руководство по настройке вашего сертификата. Вы сможете настроить использование HTTPS или оставить HTTP в качестве протокола по умолчанию, также вам будет необходимо предоставить адрес вашей электронной почты в целях безопасности.
Как только установка будет завершена, вы увидите следующее сообщение:
IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to [email protected]. - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-04-21. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Шаг 4 — Настройка автообновления SSL сертификата
Сертификат Let’s Encrypt действителен в течении 90 дней, но каждый веб-эксперт порекомендует вам обновлять его каждые 60 дней для избежания возникновения проблем с обновлением. Сделать это вам поможет сам certbot, с помощью команды renew. После выполнения команды он проверит время до истечения срока действия сертификата.
Для этого запустите данную команду:
certbot renew
Если установленный сертификат еще действителен, certbot проверит только дату истечения срока годности:
Processing /etc/letsencrypt/renewal/example.com. conf The following certs are not due for renewal yet: /etc/letsencrypt/live/example.com/fullchain.pem (skipped) No renewals were attempted.
Для автоматизации данного процесса, вы можете настроить cronjob. Во-первых, откройте crontab:
crontab -e
Эта задача может быть записана в расписание на каждую полночь понедельника.
0 0 * * 1 /usr/bin/certbot renew >> /var/log/sslrenew.log
Журнал выполнения задачи будет выведен в файл /var/log/sslrenew.log.
Заключение
Вы только что защитили ваш веб-сервер Apache подключив бесплатный SSL сертификат! С этого момента весь трафик между сервером и клиентом будет шифроваться. Вы можете быть уверены, что никто не сможет перехватить сообщения или украсть важную информацию.
Как вручную установить SSL-сертификат на сервер Apache (CentOS) | Сертификаты SSL
Неправильный тип сервера? Вернуться к списку инструкций по установке.
После того как ваш запрос будет одобрен, вы сможете скачать сертификат из диспетчера SSL и установить его на сервере Apache. Если вместо CentOS вы используете операционную систему Ubuntu, ознакомьтесь с инструкциями в этой статье.
- Найдите на сервере папку, в которой хранятся файлы сертификатов и ключей, и загрузите в нее промежуточный сертификат (с названием вида
gd_bundle.crt
) и основной сертификат (файл в формате.crt
со случайным названием).
- В целях безопасности убедитесь, что эти файлы доступны для чтения только пользователям с root-правами.
- По умолчанию это файл
httpd.conf
, который находится в папке/etc/httpd
. - Если вы изменяли конфигурацию сервера, этот файл можно найти с помощью следующей команды:
grep -i -r "SSLCertificateFile" /etc/httpd/
- Вместо
/etc/httpd/
может быть указан базовый каталог вашей версии Apache.
httpd. conf
блок VirtualHost>.VirtualHost xxx.xxx.x.x:443> DocumentRoot /var/www/coolexample ServerName coolexample.com www.coolexample.com SSLEngine on SSLCertificateFile /path/to/coolexample.crt SSLCertificateKeyFile /path/to/privatekey.key SSLCertificateChainFile /path/to/intermediate.crt /VirtualHost>
- Не забудьте добавить порт 443 в конец IP-адреса сервера.
- Значения параметров DocumentRoot и ServerName должны совпадать с указанными в исходном блоке VirtualHost>.
- Для оставшихся параметров /path/to/… вы можете указать собственные названия каталогов и файлов.
apachectl configtest
Внимание! Если в файлах конфигурации есть синтаксические ошибки, сервис Apache не запустится снова.
apachectl restart
Примечание. Для вашего удобства мы предоставляем инструкции по использованию некоторых сторонних продуктов. Но это не означает, что мы их рекомендуем. GoDaddy не оказывает поддержку по этим продуктам, а также не несет ответственности за их работу. Товарные знаки и логотипы третьих сторон являются зарегистрированными торговыми марками их владельцев. Все права защищены.
Безопасный веб-сервер Apache с Let’s Encrypt на CentOS 7
Let’s Encrypt — это бесплатный, автоматизированный и открытый центр сертификации, разработанный исследовательской группой Internet Security Research Group (ISRG). Сертификаты, выданные Let’s Encrypt, действительны в течение 90 дней с даты выпуска и сегодня пользуются доверием всех основных браузеров.
Убедитесь, что вы выполнили следующие предварительные условия, прежде чем продолжить этот учебник:
- Иметь доменное имя, указывающее на IP вашего публичного сервера. Мы будем использовать
example.com
. - Apache установлен и работает на вашем сервере.
- Иметь виртуальный хост Apache для своего домена.
- Порты 80 и 443 открыты в вашем брандмауэре .
Установите следующие пакеты, необходимые для веб-сервера с шифрованием SSL:
yum install mod_ssl openssl
Установить Certbot
Certbot — это инструмент, который упрощает процесс получения SSL-сертификатов от Let’s Encrypt и автоматического включения HTTPS на вашем сервере.
Пакет certbot доступен для установки от EPEL. Если репозиторий EPEL не установлен в вашей системе, вы можете установить его с помощью следующей команды:
sudo yum install epel-release
После включения репозитория EPEL установите пакет certbot, набрав:
sudo yum install certbot
Генерация группы Strong Dh (Diffie-Hellman)
Обмен ключами Diffie-Hellman (DH) — это метод безопасного обмена криптографическими ключами по незащищенному каналу связи. Создайте новый набор 2048-битных параметров DH для усиления безопасности:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.
Получение SSL-сертификата Let’s Encrypt
Чтобы получить сертификат SSL для нашего домена, мы собираемся использовать плагин Webroot, который работает путем создания временного файла для проверки запрашиваемого домена в ${webroot-path}/. well-known/acme-challenge
каталоге. Сервер Let’s Encrypt отправляет HTTP-запросы во временный файл для проверки того, что запрашиваемый домен разрешается на сервере, на котором работает certbot.
Чтобы сделать его более простым, мы собираемся отобразить все HTTP-запросы для .well-known/acme-challenge
одного каталога /var/lib/letsencrypt
.
Выполните следующие команды, чтобы создать каталог и сделать его доступным для записи для сервера Apache:
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp apache /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Чтобы избежать дублирования кода, создайте следующие два фрагмента конфигурации:
/etc/httpd/conf.d/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
/etc/httpd/conf. d/ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
Приведенный выше фрагмент использует рекомендованные Cipherli.st OCSP, HTTP Strict Transport Security (HSTS) и применяет несколько ориентированных на безопасность заголовков HTTP.
Перезагрузите конфигурацию Apache, чтобы изменения вступили в силу:
sudo systemctl reload httpd
Теперь мы можем запустить инструмент Certbot с помощью плагина webroot и получить файлы сертификатов SSL, набрав:
sudo certbot certonly --agree-tos --email admin@example. com --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Если сертификат SSL успешно получен, certbot напечатает следующее сообщение:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-12-07. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
CentOS 7 поставляется с Apache версии 2.4. 6, которая не содержит SSLOpenSSLConfCmd
директивы. Эта директива доступна только в Apache 2.4.8 позже и используется для настройки параметров OpenSSL, таких как обмен ключами Diffie-Hellman (DH).
Нам нужно будет создать новый комбинированный файл, используя SSL-сертификат Let’s Encrypt и сгенерированный файл DH. Для этого введите:
cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem
Теперь, когда все настроено, измените конфигурацию виртуального хоста вашего домена следующим образом:
/etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example. com
ServerAlias www.example.com
<If "%{HTTP_HOST} == 'www.example.com'">
Redirect permanent / https://example.com/
</If>
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.dh.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
# Other Apache Configuration
</VirtualHost>
В приведенной выше конфигурации мы форсируем HTTPS и перенаправляем с www на версию без www. Не стесняйтесь, чтобы настроить конфигурацию в соответствии с вашими потребностями.
Перезапустите службу Apache, чтобы изменения вступили в силу:
sudo systemctl restart httpd
Теперь вы можете открыть свой веб-сайт, используя, https://
и вы увидите зеленый значок замка.
Если вы протестируете свой домен с помощью SSL Labs Server Test , вы получите оценку A +, как показано ниже:
Автообновление Let’s Encrypt SSL сертификата
Сертификаты Let’s Encrypt действительны в течение 90 дней. Чтобы автоматически продлевать сертификаты до истечения срока их действия, мы создадим cronjob, который будет выполняться два раза в день, и автоматически обновят любой сертификат за 30 дней до его истечения.
Запустите crontab
команду, чтобы создать новый cronjob, который обновит сертификат, создаст новый комбинированный файл, включающий ключ DH, и перезапустите apache:
sudo crontab -e
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload httpd"
Сохраните и закройте файл.
Чтобы проверить процесс обновления, вы можете использовать команду certbot, за которой следует --dry-run
переключатель:
sudo certbot renew --dry-run
Если ошибок нет, значит, процесс обновления прошел успешно.
Вывод
В этом руководстве вы использовали клиентский сертификат Let’s Encrypt для загрузки SSL-сертификатов для вашего домена. Вы также создали фрагменты Apache, чтобы избежать дублирования кода, и настроили Apache для использования сертификатов. В конце урока вы установили cronjob для автоматического продления сертификата.
Если вы хотите узнать больше о том, как использовать Certbot, их документация является хорошей отправной точкой.
Установка SSL сертификата на apache
Загрузка необходимых файлов на веб-сервер
Для установки сертификата загрузите цепочку сертификата (. ca-bundle), сертификат (.crt) и секретный ключ (.key) на сервер в папку etc/ssl.
Сертификат и секретный ключ доступны для загрузки в личном кабинете в разделе “Товары” — “SSL-сертификаты” — кнопка “Просмотр”. Если секретный ключ недоступен — перевыпустите сертификат.
Цепочку сертификата можно скачать в письме о выпуске сертификата.
После загрузки файлов необходимо настроить веб-сервер.
Подключитесь к серверу по ssh с правами root пользователя и введите команду.
Команда для активации зависит от установленной OC:
CentOS: yum install mod_ssl
Ubuntu/Debian: a2enmod ssl
Настройка домена.
Теперь необходимо подключить SSL сертификат на домен.
Откройте файл конфигурации сайта, для которого вы хотите установить SSL-сертификат
На Ubuntu/Debian файлы параметров сайтов Apache находятся в директории /etc/apache2/sites-enabled/ .
На CentOS стандартное расположение — /etc/httpd/conf. d/
Проверить, что файл является конфигурацией вашего сайта можно по значению строки ServerName.
Значение строки должно соответствовать домену, для которого вы устанавливаете SSL-сертификат (например www.mydomain.ru)
Добавьте параметры в файл конфигурации:
SSLEngine on
SSLCertificateFile /etc/ssl/mydomain.ru_crt.crt
SSLCertificateChainFile /etc/ssl/mydomain.ru_ca.crt
SSLCertificateKeyFile /etc/ssl/mydomain.ru_key.key
Где:
mydomain.ru_crt.crt — имя файла сертификата вашего сайта
mydomain.ru_ca.crt — имя файла цепочки сертификатов
mydomain.ru_key.key — имя файла секретного ключа
Командой в консоли перезапустите сервис apache.
Ubuntu/Debian: /etc/init.d/apache2 restart
CentOS: apachectl restart
Проверяем, сайт доступен по https:
Настройка Apache с Let’s Encrypt сертификатом на CentOS 7 – Ts.Saltan
Продолжаю делать шпаргалки по настройке web-сервера. Инструкция по установке LAMP находится здесь.
Документация по certbot расположена здесь.
- Открываем порты
- Установка certbot
- Проверка сертификата
- Настройка автоматического продления
Открываем порты
iptables -I INPUT -p tcp —dport 443 -j ACCEPT
| iptables -I INPUT -p tcp —dport 443 -j ACCEPT |
Установка certbot
yum -y install epel-release mod_ssl python-certbot-apache
| yum -y install epel-release mod_ssl python-certbot-apache |
Далее настраиваем certbot. Ключ –apache значит, что скрипт автоматически настроит apache сервер. Здесь и далее example.com меняем на свой домен, [email protected] – на свой email.
certbot —apache -m admin@email. com -d example.com -d www.example.com
| certbot —apache -m [email protected] -d example.com -d www.example.com |
В процессе установки появится сообщение
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
(A)gree/(C)ancel:
| — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017. pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — (A)gree/(C)ancel: |
Вводим A, чтоб согласиться c условиями.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
(Y)es/(N)o:
| — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let’s Encrypt project and the non-profit organization that develops Certbot? We’d like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — (Y)es/(N)o: |
Вводим N, чтоб не получать спам на почту.
IMPORTANT NOTES:
— Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
1: No redirect — Make no further changes to the webserver configuration.
2: Redirect — Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration.
| IMPORTANT NOTES: — Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal.
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — 1: No redirect — Make no further changes to the webserver configuration. 2: Redirect — Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you’re confident your site works on HTTPS. You can undo this change by editing your web server’s configuration. |
1 – без переадресаций
2 – с http переадресация на https
Успешная установка заканчивается фразой:
IMPORTANT NOTES:
— Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2019-03-05. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the «certonly» option. To non-interactively renew *all* of
your certificates, run «certbot renew»
— Some rewrite rules copied from /etc/httpd/conf/httpd.conf were
disabled in the vhost for your HTTPS site located at
/etc/httpd/conf/httpd-le-ssl.conf because they have the potential
to create redirection loops.
— If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt. org/donate
Donating to EFF: https://eff.org/donate-le
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| IMPORTANT NOTES: — Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2019-03-05. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the «certonly» option. To non-interactively renew *all* of your certificates, run «certbot renew» — Some rewrite rules copied from /etc/httpd/conf/httpd.conf were disabled in the vhost for your HTTPS site located at /etc/httpd/conf/httpd-le-ssl. conf because they have the potential to create redirection loops. — If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le |
Если в процессе установки возникла ошибка:
Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.
| Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80. |
Необходимо в конфиге apache /etc/httpd/conf.d/vhosts.conf (если файла нет, его нужно создать) добавить виртуальный хост на 80 порт:
vi /etc/httpd/conf. d/vhosts.conf
| vi /etc/httpd/conf.d/vhosts.conf |
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
</VirtualHost>
| <VirtualHost *:80> ServerAdmin [email protected] ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/html </VirtualHost> |
Сохраняем файл, перезапускаем сервер, выполняем пункт с настройкой certbot заново.
systemctl restart httpd.service
| systemctl restart httpd.service |
Проверка сертификата
После установки сертификата certbot предложит проверить ssl для указанного домена на их сайте:
https://www. ssllabs.com/ssltest/analyze.html?d=domain.com
Корректно установленный сертификат на ssllabs.com
Можно сделать проще – открываем сайт в браузере https://example.com
Скриншот браузера при корректно установленном SSL сертификате
Настройка автоматического продления сертификата
30 2 * * * root certbot renew >> /var/log/le-renew.log
| 30 2 * * * root certbot renew >> /var/log/le-renew.log |
Как создать сертификат SSL на Apache для CentOS 7
Не используете CentOS 7?
Выберите другую версию или дистрибутив.
CentOS 7
Введение
TLS , или «безопасность транспортного уровня», и его предшественник SSL , что означает «уровень защищенных сокетов», представляют собой веб-протоколы, используемые для обертывания обычного трафика в защищенную зашифрованную оболочку. Используя эту технологию, серверы могут безопасно отправлять трафик между сервером и клиентом, не беспокоясь о том, что сообщения будут перехвачены и прочитаны внешней стороной.Система сертификатов также помогает пользователям проверять подлинность сайтов, к которым они подключаются.
В этом руководстве мы покажем вам, как настроить самозаверяющий сертификат SSL для использования с веб-сервером Apache на компьютере с CentOS 7.
Примечание. Самозаверяющий сертификат шифрует обмен данными между вашим сервером и любыми клиентами. Однако, поскольку он не подписан ни одним из доверенных центров сертификации, включенных в состав веб-браузеров, пользователи не могут использовать сертификат для автоматической проверки подлинности вашего сервера.
Самозаверяющий сертификат может быть подходящим, если у вас нет доменного имени, связанного с вашим сервером, и для случаев, когда зашифрованный веб-интерфейс не доступен пользователю. Если у вас есть доменное имя, во многих случаях лучше использовать сертификат, подписанный ЦС. Здесь вы можете узнать, как настроить бесплатный доверенный сертификат для проекта Let’s Encrypt.
Предварительные требования
Перед тем, как приступить к работе с этим руководством, необходимо выполнить несколько шагов.
Вам понадобится доступ к серверу CentOS 7 с пользователем без полномочий root, который имеет привилегии sudo
. Если вы еще не настроили это, вы можете запустить руководство по начальной настройке сервера CentOS 7, чтобы создать эту учетную запись.
Вам также потребуется установить Apache, чтобы настроить для него виртуальные хосты. Если вы еще этого не сделали, вы можете использовать yum
для установки Apache через репозитории программного обеспечения CentOS по умолчанию:
Затем включите Apache как службу CentOS, чтобы он автоматически запускался после перезагрузки:
- sudo systemctl включить httpd.служба
После выполнения этих шагов вы можете войти в систему как пользовательская учетная запись без полномочий root через SSH и продолжить обучение.
Шаг первый: установите мод SSL
Чтобы настроить самозаверяющий сертификат, мы сначала должны убедиться, что на сервере установлен mod_ssl
, модуль Apache, который обеспечивает поддержку шифрования SSL. Мы можем установить mod_ssl
с помощью команды yum
:
Модуль будет автоматически включен во время установки, и Apache сможет начать использовать сертификат SSL после перезапуска.Вам не нужно предпринимать никаких дополнительных действий, чтобы mod_ssl
был готов к использованию.
Шаг второй: создание нового сертификата
Теперь, когда Apache готов к использованию шифрования, мы можем перейти к созданию нового сертификата SSL. Сертификат будет хранить некоторую основную информацию о вашем сайте и будет сопровождаться ключевым файлом, который позволяет серверу безопасно обрабатывать зашифрованные данные.
Во-первых, нам нужно создать новый каталог для хранения нашего закрытого ключа (каталог / etc / ssl / certs
уже доступен для хранения нашего файла сертификата):
- sudo mkdir / etc / ssl / private
Поскольку файлы, хранящиеся в этом каталоге, должны быть строго конфиденциальными, мы изменим разрешения, чтобы убедиться, что доступ есть только у пользователя root:
- sudo chmod 700 / etc / ssl / частный
Теперь, когда у нас есть место для размещения наших файлов, мы можем создать файлы ключей и сертификатов SSL с помощью openssl
:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout / etc / ssl / private / apache-selfsigned. ключ -out /etc/ssl/certs/apache-selfsigned.crt
После того, как вы введете запрос, вы попадете в окно, в котором вы можете ввести информацию о своем веб-сайте. Прежде чем мы перейдем к этому, давайте посмотрим, что происходит в команде, которую мы выдаем:
- openssl : это основной инструмент командной строки для создания сертификатов, ключей и других файлов OpenSSL и управления ими.
- req -x509 : указывает, что мы хотим использовать сертификат X.509 запрос на подпись сертификата (CSR). «X.509» — это стандарт инфраструктуры открытых ключей, которого придерживаются SSL и TLS для управления ключами и сертификатами.
- -nodes : Это говорит OpenSSL пропустить опцию защиты нашего сертификата парольной фразой. Нам нужно, чтобы Apache мог читать файл без вмешательства пользователя при запуске сервера. Парольная фраза предотвратит это, поскольку нам придется вводить ее после каждого перезапуска.
- -дней 365 : этот параметр устанавливает период времени, в течение которого сертификат будет считаться действительным.Мы устанавливаем его здесь на один год.
- -newkey rsa: 2048 : указывает, что мы хотим сгенерировать новый сертификат и новый ключ одновременно. Мы не создали ключ, необходимый для подписи сертификата на предыдущем шаге, поэтому нам нужно создать его вместе с сертификатом. Часть
rsa: 2048
указывает ему создать ключ RSA длиной 2048 бит. - -keyout : Эта строка сообщает OpenSSL, где разместить сгенерированный файл закрытого ключа, который мы создаем.
- -out : Это сообщает OpenSSL, где разместить сертификат, который мы создаем.
Заполните подсказки соответствующим образом. Самая важная строка — это та, которая запрашивает общее имя
. Вам необходимо ввести доменное имя, которое вы хотите связать с вашим сервером. Вместо этого вы можете ввести общедоступный IP-адрес, если у вас нет доменного имени.
Полный список подсказок будет выглядеть примерно так:
Название страны (двухбуквенный код) [XX]: США
Название штата или провинции (полное название) []: Пример
Название населенного пункта (например, город) [Город по умолчанию]: Пример
Название организации (например, компания) [Default Company Ltd]: Example Inc.
Название организационной единицы (например, раздел) []: пример отдела
Общее имя (например, ваше имя или имя хоста вашего сервера) []: пример.com
Адрес электронной почты []: [email protected]
Оба созданных вами файла будут размещены в соответствующих подкаталогах каталога / etc / ssl
.
Пока мы используем OpenSSL, мы должны также создать сильную группу Диффи-Хеллмана, которая будет использоваться для согласования с клиентами идеальной прямой секретности.
Мы можем сделать это, набрав:
- sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Это может занять несколько минут, но когда это будет сделано, у вас будет сильная группа DH по адресу / etc / ssl / certs / dhparam. pem
, который мы можем использовать в нашей конфигурации.
Поскольку версия Apache, поставляемая с CentOS 7, не включает директиву SSLOpenSSLConfCmd
, нам придется вручную добавить сгенерированный файл в конец нашего самозаверяющего сертификата. Для этого наберите:
- cat /etc/ssl/certs/dhparam.pem | sudo tee -a /etc/ssl/certs/apache-selfsigned.crt
Теперь файл apache-selfsigned.crt
должен содержать сертификат и созданную группу Диффи-Хеллмана.
Шаг третий: настройка сертификата
Теперь у нас есть все необходимые компоненты готового интерфейса. Следующее, что нужно сделать, — настроить виртуальные хосты для отображения нового сертификата.
Откройте файл конфигурации SSL Apache в текстовом редакторе с правами root:
- sudo vi /etc/httpd/conf.d/ssl.conf
Найдите раздел, который начинается с
. Нам нужно внести здесь несколько изменений, чтобы убедиться, что наш сертификат SSL правильно применен к нашему сайту.
Настройка директив VirtualHost
Во-первых, раскомментируйте строку DocumentRoot
и отредактируйте адрес в кавычках, указав местоположение корня документа вашего сайта. По умолчанию это будет в / var / www / html
, и вам не нужно изменять эту строку, если вы не меняли корень документа для своего сайта. Однако, если вы следовали руководству, например, нашему руководству по настройке виртуальных хостов Apache, корень документа вашего сайта может быть другим.
Затем раскомментируйте строку ServerName
и замените www.example.com
своим доменным именем или IP-адресом сервера (в зависимости от того, какой из них вы указали в качестве общего имени в своем сертификате):
/etc/httpd/conf.d/ssl.conf
. . .
DocumentRoot "/var/www/example.com/public_html"
ServerName www. example.com:443
Затем найдите строки SSLProtocol
и SSLCipherSuite
и либо удалите их, либо закомментируйте.Конфигурация, которую мы сейчас вставим, будет предлагать более безопасные настройки, чем настройки по умолчанию, включенные в CentOS Apache:
/etc/httpd/conf.d/ssl.conf
. . .
# SSLProtocol all -SSLv2
. . .
# SSLCipherSuite HIGH: MEDIUM:! ANULL:! MD5:! SEED:! IDEA
Найдите строки SSLCertificateFile
и SSLCertificateKeyFile
и замените их на каталог, который мы создали по адресу / etc / httpd / ssl
:
/etc/httpd/conf.d/ssl.conf
SSLCertificateFile / etc / ssl / certs / apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
Теперь мы закончили с изменениями в фактическом блоке VirtualHost
. Следующие изменения произойдут после окончания тега
в этом же файле.
Настройка параметров безопасного SSL
Далее, чтобы настроить Apache SSL более безопасно, мы будем использовать рекомендации Реми ван Элста на сайте Cipherli.st. Этот сайт предназначен для предоставления простых в использовании настроек шифрования для популярного программного обеспечения.Вы можете узнать больше о его решениях относительно выбора Apache здесь.
Примечание: Предлагаемые настройки на сайте, ссылка на который приведена выше, обеспечивают надежную защиту. Иногда это происходит за счет большей совместимости с клиентами. Если вам нужна поддержка старых клиентов, есть альтернативный список, к которому можно получить доступ, щелкнув ссылку на странице с надписью «Да, дайте мне набор шифров, который работает с устаревшим / старым программным обеспечением». Этот список можно заменить элементами, скопированными ниже.
Выбор используемой конфигурации во многом зависит от того, что вам нужно поддерживать. Оба они обеспечат большую безопасность.
Для наших целей мы можем скопировать предоставленные настройки полностью. Мы просто внесем два небольших изменения.
Найдите минутку, чтобы прочитать о HTTP Strict Transport Security, или HSTS, и, в частности, о функции «предварительной загрузки». Предварительная загрузка HSTS обеспечивает повышенную безопасность, но может иметь далеко идущие последствия при случайном или неправильном включении.В этом руководстве мы не будем предварительно загружать настройки, но вы можете изменить их, если уверены, что понимаете последствия.
Еще одно изменение, которое мы внесем, — это закомментировать директиву SSLSessionTickets
, поскольку она недоступна в версии Apache, поставляемой с CentOS 7.
Вставляем в настройках с сайта ПОСЛЕ конец блока VirtualHost
:
/etc/httpd/conf.d/ssl.conf
. . .
.. .
# Начать скопированный текст
# с https://cipherli.st/
# и https://raymii. org/s/tutorials/Strong_SSL_Security_On_Apache2.html
SSLCipherSuite EECDH + AESGCM: EDH + AESGCM: AES256 + EECDH: AES256 + EDH
SSLProtocol Все -SSLv2 -SSLv3
SSLHonorCipherOrder On
# На данный момент отключите предварительную загрузку HSTS. Вы можете использовать закомментированную строку заголовка, которая включает
# директиву "preload", если вы понимаете последствия.
#Header всегда устанавливает Strict-Transport-Security "max-age = 63072000; includeSubdomains; preload"
Заголовок всегда установлен Strict-Transport-Security «max-age = 63072000; includeSubdomains»
Заголовок всегда установлен X-Frame-Options DENY
Заголовок всегда установлен X-Content-Type-Options nosniff
# Требуется Apache> = 2.4
SSLCompression выключен
SSLUseStapling на
SSLStaplingCache "shmcb: logs / stapling-cache (150000)"
# Требуется Apache> = 2.4.11
# SSLSessionTickets Off
Когда вы закончите вносить эти изменения, вы можете сохранить и закрыть файл.
(рекомендуется) Измените незашифрованный файл виртуального хоста для перенаправления на HTTPS
В настоящее время сервер будет предоставлять как незашифрованный HTTP, так и зашифрованный HTTPS-трафик. Для большей безопасности в большинстве случаев рекомендуется автоматически перенаправлять HTTP на HTTPS.Если вам не нужна или не нужна эта функция, вы можете пропустить этот раздел.
Чтобы перенаправить весь трафик на шифрование SSL, создайте и откройте файл с расширением .conf
в каталоге /etc/httpd/conf.d
:
- sudo vi /etc/httpd/conf.d/non-ssl.conf
Внутри создайте блок VirtualHost
для сопоставления запросов на порт 80. Внутри используйте директиву ServerName
, чтобы снова сопоставить имя вашего домена или IP-адрес.Затем используйте Redirect
, чтобы сопоставить любые запросы и отправить их на SSL VirtualHost
. Не забудьте включить косую черту в конце:
/etc/apache2/sites-available/000-default.conf
ServerName www.example.com
Перенаправить "/" "https://www.example. com/"
Сохраните и закройте этот файл, когда закончите.
Шаг четвертый: активируйте сертификат
К настоящему времени вы создали сертификат SSL и настроили свой веб-сервер для применения его к вашему сайту.Чтобы применить все эти изменения и начать использовать шифрование SSL, вы можете перезапустить сервер Apache, чтобы перезагрузить его конфигурации и модули.
Сначала проверьте файл конфигурации на наличие синтаксических ошибок, набрав:
- sudo apachectl configtest
Пока вывод заканчивается на Syntax OK
, вы можете продолжить. Если это не часть вашего вывода, проверьте синтаксис файлов и повторите попытку:
Выход
.. .
Синтаксис ОК
Перезапустите сервер Apache, чтобы изменения вступили в силу, набрав:
- sudo systemctl перезапустить httpd.service
Затем убедитесь, что порты 80 и 443 открыты в вашем брандмауэре. Если вы не используете брандмауэр, можете пропустить.
Если у вас запущен брандмауэр firewalld , вы можете открыть эти порты, набрав:
- sudo firewall-cmd --add-service = http
- sudo firewall-cmd --add-service = https
- sudo firewall-cmd - время выполнения для постоянного
Если у вас запущен брандмауэр iptables , команды, которые вам нужно выполнить, сильно зависят от вашего текущего набора правил.Для основного набора правил вы можете добавить доступ HTTP и HTTPS, набрав:
- sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
- sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ПРИНЯТЬ
В веб-браузере попробуйте посетить свое доменное имя или IP-адрес с https: //
, чтобы увидеть новый сертификат в действии.
https://example.com/
Ваш веб-браузер, скорее всего, предупредит вас, что сертификат безопасности сайта не является надежным.Поскольку ваш сертификат не подписан центром сертификации, которому доверяет браузер, браузер не может проверить подлинность сервера, к которому вы пытаетесь подключиться. Мы создали самозаверяющий сертификат вместо доверенного сертификата, подписанного ЦС, так что это имеет смысл.
После того, как вы добавите исключение для проверки личности в браузере, вам будет разрешено перейти на ваш недавно защищенный сайт.
Заключение
Вы настроили сервер Apache для обработки запросов HTTP и HTTPS.Это поможет вам безопасно общаться с клиентами и избежать возможности считывания вашего трафика посторонними лицами.
Если вы планируете использовать SSL для общедоступного веб-сайта, вам, вероятно, следует приобрести сертификат SSL в доверенном центре сертификации, чтобы предотвратить показ страшных предупреждений каждому из ваших посетителей.
Как установить сертификат SSL на Apache для CentOS 7 | автор: Хакан Байрактар
- Скопируйте файлы сертификата на свой сервер.
Загрузите файл сертификата SSL у поставщика SSL, затем скопируйте его в каталог на своем сервере, где вы будете хранить файлы сертификата и ключей. Сделайте их доступными для чтения только root.
2. Установите Mod SSL
Чтобы настроить самозаверяющий сертификат, мы сначала должны убедиться, что на сервере установлен mod_ssl
, модуль Apache, который обеспечивает поддержку шифрования SSL:
yum -y установить httpd mod_ssl
sudo systemctl enable httpd.service
systemctl start httpd.service
3. Настройте сертификат
Сначала скопируйте файл сертификата в / etc / ssl / private
mkdir -p / etc / ssl / private
chmod 700 / etc / ssl / private
Следующее, что нужно сделать, это настроить виртуальные хосты для отображения нового сертификата.
sudo vi /etc/httpd/conf.d/ssl.conf443 >
DocumentRoot / var / www / html
ServerName www.example.com
SSLEngine на
SSLCertificateFile / etc / ssl / частный / сертификат.crt
SSLCertificateKeyFile /etc/ssl/private/private.key
Когда вы закончите вносить эти изменения, вы можете сохранить и закрыть файл.
Настройте имена файлов в соответствии с вашими файлами сертификатов:
- SSLCertificateFile должен быть вашим файлом сертификата (например, your_domain_name.crt).
- SSLCertificateKeyFile должен быть файлом ключа, созданным при создании CSR.
4.Перенаправить на HTTPS
Чтобы перенаправить весь трафик на шифрование SSL, создайте и откройте файл, заканчивающийся на .conf
, в каталоге /etc/httpd/conf.d
:
sudo vi / etc / httpd / conf /httpd. conf
ServerName www.example.com
Redirect "/" "https://www.example.com/"
Сохраните и закройте этот файл, когда закончите .
5. Перед перезапуском проверьте конфигурацию Apache.
apachectl configtest
Перезапустите Apache.
systemctl restart httpd
Теперь вы готовы использовать сертификат SSL с вашим сервером Apache-SSL.
Проверка установки SSL
https://www.ssllabs.com/ssltest/
Как настроить веб-сервер Apache на CentOS 7
Содержание
Введение
Веб-сервер Apache — один из самых популярных и мощных веб-серверов в мире. Это также один из самых безопасных доступных веб-серверов. В этом руководстве объясняется, как установить и настроить базовый и безопасный веб-сервер Apache в CentOS 7.
Требования
- Сервер под управлением CentOS v.7
- Настольный компьютер под управлением Linux
- Статический IP-адрес для вашего сервера
Настройка HTTP-сервера Apache
Этот раздел проведет вас через процесс подготовки вашего сервера для Apache, настройки Apache и тестирования установки.
Обновить репозиторий пакетов
Перед установкой Apache рекомендуется обновить репозиторий пакетов.Вы можете сделать это, выполнив следующие команды:
sudo yum update -y
sudo yum установить httpd -y
Отключить SELinux
По умолчанию SELinux включен в CentOS 7. Рекомендуется сначала отключить его.
Вы можете отключить SELinux, отредактировав файл / etc / selinux / config
:
Судо Нано / и т. Д. / Selinux / config
Измените строку с SELINUX = принудительно
на SELINUX = отключено
SELINUX = отключено
Сохраните и закройте файл, затем перезагрузите компьютер, чтобы изменения вступили в силу.
Разрешить Apache через брандмауэр
Вам нужно будет разрешить порт Apache по умолчанию 80 (HTTP) и 443 (HTTPS) с помощью FirewallD.
Вы можете сделать это, выполнив следующие команды:
sudo firewall-cmd --permanent --add-port = 80 / tcp
sudo firewall-cmd --permanent --add-port = 443 / tcp
Перезагрузите службу брандмауэра, чтобы изменения вступили в силу.
sudo firewall-cmd - перезагрузка
Создать тестовую страницу
В CentOS7 путь Apache DocumentRoot по умолчанию — / var / www / html /
.Однако в этом каталоге нет файла index.html
. Вам нужно будет его создать.
судо нано /var/www/html/index.html
Добавьте следующее содержание:
Перезапустите службу Apache, чтобы отразить изменения:
sudo systemctl start httpd
Вы можете настроить запуск службы Apache при загрузке, выполнив следующую команду:
sudo systemctl включить httpd
Протестируйте HTTP-сервер Apache
Чтобы убедиться, что веб-сервер Apache запущен и работает, откройте веб-браузер и перейдите на IP-адрес вашего сервера с URL-адресом http: // your.server.ip.address
.
Вы должны увидеть страницу по умолчанию, подобную показанной на изображении ниже.
Настроить безопасный HTTPS-сервер Apache с SSL
В этом разделе вы узнаете, как настроить безопасное соединение HTTPS с использованием SSL на Apache.
Установить SSL
Чтобы защитить Apache, сначала необходимо установить SSL.
Вы можете установить SSL, используя следующую команду:
sudo yum установить mod_ssl openssl
Создать самоподписанный сертификат
Во-первых, вам нужно сгенерировать закрытый ключ ca.ключ
с 2048-битным шифрованием.
sudo openssl genrsa -out ca.key 2048
Затем сгенерируйте запрос на подпись сертификата cs.csr
, используя следующую команду.
sudo openssl req -new -key ca.key -out ca.csr
Вам будет предложено ввести информацию о сертификате.
Наконец, сгенерируйте самозаверяющий сертификат ca.crt
типа X509, действительный для 365 ключей.
sudo openssl x509 -req -days 365 -в ок.csr -signkey ca.key -out ca.crt
После создания сертификата вам необходимо скопировать все файлы сертификата в необходимые каталоги.
Вы можете сделать это, выполнив следующие команды:
судо cp ca.crt / etc / pki / tls / certs /
sudo cp ca.key / etc / pki / tls / private /
sudo cp ca.csr / etc / pki / tls / private /
Настроить сертификаты
Все сертификаты готовы. Следующее, что нужно сделать, — это настроить Apache для отображения новых сертификатов.
Вы можете сделать это, отредактировав файл конфигурации SSL:
Судо нано /etc/httpd/conf.d/ssl.conf
Найдите раздел, который начинается с
. Раскомментируйте строки DocumentRoot
и ServerName
и замените example.com
на IP-адрес вашего сервера.
DocumentRoot "/ var / www / html"
Имя сервера 192. 168.1.42:443
Затем найдите строки SSLCertificateFile
и SSLCertificateKeyFile
и обновите их, указав новое расположение сертификатов.
SSLE Двигатель включен
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
После внесения этих изменений перезапустите службу Apache, чтобы изменения вступили в силу.
sudo systemctl перезапустить httpd
Протестируйте безопасный HTTPS-сервер Apache
Чтобы убедиться, что защищенный веб-сервер Apache HTTPS работает, откройте веб-браузер и перейдите на IP-адрес своего сервера с URL-адресом https: // your.server.ip.address
.
В вашем браузере должна появиться ошибка, и вы должны будете принять сертификат вручную.
После того, как вы добавите исключение для проверки личности браузера, вы должны увидеть тестовую страницу для вашего недавно защищенного сайта.
SSL-сертификатов с Apache на CentOS 7
Обновлено
, by Linode
Traducciones al Español
Estamos traduciendo nuestros guías y tutoriales al Español.Es posible que usted esté viendo una traducción generada automáticamente. Estamos trabajando con traductores profesionales para verificar las traducciones de nuestro sitio web. Este proyecto es un trabajo en curso.
Это руководство покажет вам, как включить SSL для защиты веб-сайтов, обслуживаемых через Apache в CentOS или Fedora.
Перед тем, как начать
В этом руководстве предполагается, что вы используете Apache2 на CentOS или Fedora. Перед тем, как начать это руководство, убедитесь, что на вашем Linode были выполнены следующие шаги:
Ознакомьтесь с нашими
Руководство по началу работы и выполните действия по настройке имени хоста и часового пояса вашего Linode.Завершите наш
LAMP в руководстве по CentOS 7 и создайте сайт, который вы хотите защитить с помощью SSL.Следуйте нашему руководству для получения
самоподписанный или
коммерческий SSL-сертификат.Чтобы настроить Linode для работы с SSL, вам необходимо убедиться, что в вашей системе установлен модуль Apache
mod_ssl
. Вы можете сделать это, выполнив следующую команду:yum install mod_ssl
Настройте Apache для использования сертификата SSL
Отредактируйте записи виртуального хоста в файле
/ etc / httpd / conf.d / ssl.conf
, чтобы включить файлы сертификатов и информацию о виртуальном хосте, которые должны использоваться каждым доменом. Для каждого виртуального хоста скопируйте конфигурацию, показанную ниже. Замените каждое упоминаниеexample.com
своим собственным доменом.Если вы используете коммерчески подписанный сертификат и вручную загрузили сертификат корневого ЦС в
/ etc / pki / tls / certs
, убедитесь, что значениеSSLCACertificateFile
настроено так, чтобы указывать непосредственно на корневой сертификат. Если корневой сертификат предоставляется через пакет «ca-Certificates», вы можете просто исключить строкуSSLCACertificateFile
.- Файл: /etc/httpd/conf.d/ssl.conf
1 2 3 4 5 6 7 8 9 10 11 12
SSLEngine включен SSLCertificateFile /etc/pki/tls/certs/example.com.crt SSLCertificateKeyFile /etc/pki/tls/private/example.com.key SSLCACertificateFile / etc / pki / tls / certs / root-certificate.crt # Если используется самозаверяющий сертификат или корневой сертификат, предоставленный ca-сертификатами, пропустите эту строку ServerAdmin [email protected] ServerName www.example.com DocumentRoot /var/www/example.com/public_html/ ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log в сочетании
Перезапустить Apache:
systemctl перезапустить httpd
Теперь вы можете посещать свой сайт с включенным SSL.
Проверьте свою конфигурацию
Протестируйте конфигурацию SSL, используя тестовую страницу на веб-сайте вашего эмитента сертификата, а затем выполните глубокий анализ с помощью
Qualys SSL Labs SSL Server Test
Эта страница была первоначально опубликована на
Как включить SSL для Apache — Дневник компьютерных пользователей
Вот краткая заметка о том, как настроить Apache для использования файла сертификата для SSL или Как включить https на сервере Apache httpd.После того, как вы включите SSL в конфигурации веб-сервера, вы сможете получить доступ к приложению с помощью https.
Установите плагин mod_ssl
1. Убедитесь, что mod_ssl установлен.
2. Если mod_ssl не установлен, установите его с помощью yum:
Изменить сертификат SSL и ключи
1. Измените /etc/httpd/conf.d/ssl.conf , указав имена файлов, содержащие имя сервера и информацию о сертификате SSL. Редактируемые параметры:
a.ServerName
b. SSLCertificateFile
c. SSLCertificateKeyFile
# vi /etc/httpd/conf.d/ssl.conf # ServerName www.example.com:443 SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
Здесь
— ServerName должно совпадать с общим именем (CN) сертификата SSL, иначе клиентские браузеры получат сообщение « domain mismatch ». Для просмотра сертификата Общее имя (CN):
# openssl x509 -noout -text -in localhost.crt | grep CN [/ code]
— SSLCertificateKeyFile — это закрытый ключ, связанный с сертификатом (открытый ключ).
— Убедитесь, что директива Listen в ssl.conf подходит для вашей установки. Например, если указан IP-адрес, он должен совпадать с IP-адресом, к которому привязана служба httpd.
Перезапустите веб-сервер Apache
Чтобы изменения вступили в силу, мы должны перезапустить веб-сервер Apache.
для CentOS / RHEL 5,6
для CentOS / RHEL 7
# systemctl перезапуск httpd.обслуживание
Проверьте подключение SSL из командной строки
Существует несколько инструментов для проверки возможности подключения SSL. В зависимости от того, что нужно протестировать, используйте любой из описанных ниже методов.
1. OpenSSL s_client
Используйте « openssl s_client -connect TARGET: PORT » для тестирования и устранения неполадок соединений SSL / TLS с целевым сервером. Чтобы протестировать веб-сервер на стандартном порту:
# openssl s_client -connect www.example.com:443
2.cURL
Этот инструмент часто является первым выбором, поскольку он позволяет быстро переключаться между протоколами http и https.
# curl --head https://www.example.com
Как установить сертификат Apache SSL на CentOS 7 Linux
В сегодняшнем руководстве мы хотим продемонстрировать, как установить сертификат Apache SSL на CentOS 7 Linux.
Как и сейчас, наличие ssl-сертификата для веб-сайта сегодня является обязательным и существенно влияет на ваш рейтинг в SEO.
также имея сертификат ssl, ваши пользователи больше доверяют вашему веб-сайту.
Вот наша среда:
ОС: CentOS 7 linux на VMWare
Брандмауэр: firewalld
SElinux: принудительный IP-адрес
: 192.168.147.128
1- Установите Apache
, сначала мы устанавливаем apache и mod_ss базовый репозиторий:
# yum install httpd mod_ssl
2- Создать сертификат
Нам нужен каталог для хранения файлов сертификатов. поэтому сначала создайте его:
# mkdir -p / etc / httpd / cert /
затем введите следующую команду для создания сертификата:
# sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout / etc / httpd / cert / private.key -out /etc/httpd/cert/certificate.crt
вывод будет:
Название страны (двухбуквенный код) [AU]: США Название штата или провинции (полное название) [Some-State]: Нью-Йорк Название населенного пункта (например, город) []: Нью-Йорк. Название организации (например, компания) [Internet Widgits Pty Ltd]: Bouncy Castles, Inc. Название организационной единицы (например, раздел) []: Министерство водных горок. Общее имя (например, полное доменное имя сервера или ВАШЕ имя) []: server_IP_address Адрес электронной почты []: [электронная почта защищена] _domain.com
3- Настройте SSL
Теперь мы создаем файл в разделе conf.d с именем ssl.conf и поместите в него следующее содержимое:
# vim /etc/httpd/conf. d/ssl.conf
Слушайте 443 https Встроенный SSLPassPhraseDialog SSLSessionCache shmcb: / var / cache / mod_ssl / scache (512000) SSLSessionCacheTimeout 300 SSLStaplingCache "shmcb: logs / stapling-cache (150000)" Мьютекс по умолчанию Файл запуска SSLRandomSeed: / dev / urandom 256 Встроенный SSLRandomSeed connect Встроенный SSLCryptoDeviceЖурналы ErrorLog / ssl_error_log Журналы TransferLog / ssl_access_log LogLevel предупреждать SSLEngine включен SSLProtocol -all + TLSv1.1 + TLSv1.2 SSLHonorCipherOrder On Заголовок всегда установлен Strict-Transport-Security «max-age = 63072000; includeSubDomains; preload» Заголовок всегда установлен X-Frame-Options DENY Заголовок всегда установлен X-Content-Type-Options nosniff SSLCompression выключен SSLUseStapling на SSLSessionTickets Off SSLCipherSuite HIGH: 3DES:! ANULL:! MD5:! SEED:! IDEA SSLCertificateFile /etc/httpd/cert/certificate.crt SSLCertificateKeyFile /etc/httpd/cert/private.key #SSLCACertificateFile /etc/httpd/cert/ssl/ca-bundle. cer <Файлы ~ "\. (Cgi | shtml | phtml | php3?) $"> SSLOptions + StdEnvVars <Каталог "/ var / www / cgi-bin"> SSLOptions + StdEnvVars SetEnvIf User-Agent ".* MSIE. * "\ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 Журналы CustomLog / ssl_request_log \ "% t% h% {SSL_PROTOCOL} x% {SSL_CIPHER} x \"% r \ "% b" DocumentRoot / var / www / html Имя сервера 192.168.147.128
Примечание: не забудьте изменить «ServerName 192.168.147.128» на свой собственный IP-адрес.
4- Запуск службы
Наконец, мы запускаем службу apache:
# systemctl start httpd # systemctl включить httpd
5- Настройте брандмауэр
, мы должны открыть порт 80 и 443.поэтому запустите следующие команды:
# firewall-cmd --add-service = http --permanent # firewall-cmd --add-service = https --permanent # firewall-cmd --reload
, наконец, укажите https: // your_server_ip_address в вашем любимом браузере.
CentOS 7 — обслуживание HTTPS с Apache2
КБ ID 0001210
Проблема
На этой неделе я работал над переводом сайта на https. Раньше покупка цифрового сертификата была дорогостоящим и долгим делом, но теперь это не так.Быстрый поиск в Интернете показал, что сертификат SSL на 3 года стоит менее 15 фунтов.
Получить сертификат было несложно, установить его, чтобы Apache мог его использовать, было еще одной «проблемой». По шкале от одного до десяти, у меня Linux примерно три (в хороший день)!
Перед тем, как начать, вам необходимо сгенерировать CSR и отправить его тому, кому вы собираетесь купить сертификат у
.
Linux (CentOS 7) Создание CSR (запросов на подпись сертификатов)
А как насчет бесплатных сертификатов? Некоторые фирмы предлагают бесплатные сертификаты, некоторые требуют, чтобы вы установили программное обеспечение, которое обновляет сертификат каждые девяносто дней, другие имеют короткий срок службы. Обычно я не из тех, кто тратит какие-то деньги, кроме пятерки в год, почему бы и нет?
Решение
Ваш поставщик сертификата отправит вам ваш сертификат, вероятно, он будет иметь по крайней мере еще один сертификат. В моем случае это было с тремя другими сертификатами CA (RootCA и двумя промежуточными сертификатами CA). Если вы не знакомы с сертификатами, вот — два золотых правила сертификатов;
- Вы ДОЛЖНЫ доверять органу (ЦС), выдавшему сертификат или выдавшему сертификат ЦС, выдавшему сертификат, и т.
- ИМЯ в сертификате, либо общее имя (CN), либо альтернативное имя субъекта (SAN). ДОЛЖЕН соответствовать адресу, по которому вы собираетесь.
Что вы обнаружите с этими
Хорошо, почему это важно? Что ж, чтобы доверять вашему сертификату, ваши посетители (и Apache) должны иметь возможность видеть все сертификаты в этой цепочке, вплоть до сертификата RootCA вверху (которому они будут доверять, иначе нет особого смысла их продавать! )
Некоторые поставщики предоставят вам комплект сертификатов, мой — нет, поэтому мне пришлось его создать (это несложно, см. Ниже).Но теперь, когда вы создадите этот пакет сертификатов, у вас будет лучшее понимание того, что вы делаете (помещая все сертификаты CA в цепочке в один файл).
Установка сертификатов SSL в Apache
Перед тем, как начать, вам может потребоваться установить mod_ssl ‘ yum install mod_ssl’ сделает это 🙂
Сначала вам нужно скопировать все файлы в CentOS, я создал папку в ‘/ etc / ssl /’ под названием ‘localcertificates’ и скопировал в сертификат домена файл ключа (который был сгенерирован, когда я сделал CSR — см. ссылку выше).И я скопировал все сертификаты CA. (Для этого я использую FileZilla, потому что он бесплатный и простой в использовании).
Теперь войдите на свой сервер CentOS через SSH и перейдите в этот каталог, затем используйте команду «CAT», чтобы создать пакет сертификатов со всеми вашими сертификатами CA (обратите внимание на порядок: SubCA2> SubCA1> RootCA). Примечание : Ваши сертификаты, вероятно, будут иметь разные имена.
компакт-диск / etc / ssl / localcerts cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt> My-CA.ca-bundle
Теперь в том же каталоге у вас будет другой файл с именем My-CA.ca-bundle. Чтобы Apache использовал сертификаты, вам необходимо отредактировать файл httpd.conf. В CentOS 7 это обычно находится в «/ etc / httpd / conf». Я использую nano, потому что с ним легче редактировать файлы ( yum install nano ). Я также собираюсь сделать резервную копию конфигурации на случай, если что-то пойдет не так!
компакт-диск / etc / httpd / conf cp httpd. conf httpd.conf-old нано httpd.conf
Найдите часть файла с надписью «Слушайте * .80» и поместите под ней строку с надписью «Слушайте * .443».
Прокрутите файл до конца и вставьте следующее (измените имена файлов на свои собственные).
SSLEngine включен SSLCertificateFile /etc/ssl/localcerts/your-file.crt SSLCertificateKeyFile /etc/ssl/localcerts/your-file.key SSLCertificateChainFile / etc / ssl / localcerts / My-CA.ca-bundle ServerAdmin [email protected] ServerName www.your-site.com DocumentRoot / var / www / html ErrorLog /var/www/logs/error.log CustomLog /var/www/logs/access.log в сочетании
Примечание : Убедитесь, что папка журналов существует в / var / www, если вы используете те же пути, что и я! Также SSLCertificateChainFile изменится в более новых версиях Apache на SSLCACertificatePath.
Теперь вы можете перезапустить Apache и перейти на https://www.your-site.com. Резервное копирование может занять некоторое время!
перезапуск apachectl статус apachectl
Все сломано, помощь !!
Вот почему мы сделали резервную копию конфигурации: сначала, если есть проблема, в «статусе apache» обычно говорится «есть проблема в строке XYZ файла httpd.conf», если вы откроете ее в текстовом редакторе, который укажет вам на разрешающая способность. Если ничего не помогает, вы можете восстановить исходную конфигурацию следующим образом;
компакт-диск / etc / httpd / conf cp httpd.conf-старый httpd.conf apachectl start статус apachectl
Как перенаправить весь HTTP-трафик на HTTPS в Apache?
Это еще проще, если у вас есть виртуальный хост для плохих пользователей, уже настроенный в https.conf, тогда просто добавьте к нему «Redirect / https://www.