Разное

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.comIP-адресом вашего домена или сервера (в зависимости от того, что вы указали как общее имя в своем сертификате):

/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, ознакомьтесь с инструкциями в этой статье.

  1. Найдите на сервере папку, в которой хранятся файлы сертификатов и ключей, и загрузите в нее промежуточный сертификат (с названием вида gd_bundle.crt) и основной сертификат (файл в формате .crt со случайным названием).
  • В целях безопасности убедитесь, что эти файлы доступны для чтения только пользователям с root-правами.
  • Найдите файл конфигурации Apache.
    • По умолчанию это файл httpd.conf, который находится в папке /etc/httpd.
    • Если вы изменяли конфигурацию сервера, этот файл можно найти с помощью следующей команды:
    grep -i -r "SSLCertificateFile" /etc/httpd/
    • Вместо /etc/httpd/ может быть указан базовый каталог вашей версии Apache.
  • Откройте этот файл в любом текстовом редакторе.
  • Найдите в файле httpd. conf блок VirtualHost>.
  • Чтобы для подключения к вашему сайту можно было использовать как безопасный (https), так и небезопасный протокол (http), скопируйте блок VirtualHost> и вставьте копию сразу после исходного блока.
  • Теперь копию блока 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
  • Если вы получите ответ Syntax OK, значит, всё в порядке. В противном случае проверьте файлы конфигурации.
  • Внимание! Если в файлах конфигурации есть синтаксические ошибки, сервис Apache не запустится снова.

  • Получив ответ Syntax OK, перезапустите 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 — это инструмент, который упрощает процесс получения SSL-сертификатов от Let’s Encrypt и автоматического включения HTTPS на вашем сервере.


    Пакет certbot доступен для установки от EPEL. Если репозиторий EPEL не установлен в вашей системе, вы можете установить его с помощью следующей команды:

    sudo yum install epel-release
    
    


    После включения репозитория EPEL установите пакет certbot, набрав:

    sudo yum install certbot
    
    


    Обмен ключами Diffie-Hellman (DH) — это метод безопасного обмена криптографическими ключами по незащищенному каналу связи. Создайте новый набор 2048-битных параметров DH для усиления безопасности:

    sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
    
    

    Вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.


    Чтобы получить сертификат 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 действительны в течение 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 расположена здесь.

    1. Открываем порты
    2. Установка certbot
    3. Проверка сертификата
    4. Настройка автоматического продления

    Открываем порты

    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 | автор: Хакан Байрактар ​​

    1. Скопируйте файлы сертификата на свой сервер.

    Загрузите файл сертификата 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.conf 443 > 
    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

    1. Отредактируйте записи виртуального хоста в файле / 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 в сочетании
        
    2. Перезапустить 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). ДОЛЖЕН соответствовать адресу, по которому вы собираетесь.

    Что вы обнаружите с этими более дешевыми сертификатами, так это то, что вы доверяете ЦС, и что ЦС выдает другой сертификат ЦС (подчиненному ЦС), который выдает другой сертификат ЦС (подчиненному ЦС), и что CA выдает ваш сертификат. Все эти сертификаты образуют «цепочку», и это выглядит так:

    Хорошо, почему это важно? Что ж, чтобы доверять вашему сертификату, ваши посетители (и 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.

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *