Как создать сертификат SSL на Apache для Ubuntu 14.04

Вступление

TLS или безопасность транспортного уровня, а также его предшественник SSL , уровень защищенных сокетов — это безопасные протоколы, созданные для размещения обычного трафика в защищенной, зашифрованной оболочке.

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

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

Примечание. Возможно, вам захочется использовать «Использовать шифрование» вместо самозаверяющего сертификата. Let’s Encrypt — это новый центр сертификации, который выдает бесплатные сертификаты SSL / TLS, которым доверяют большинство веб-браузеров. 

Предпосылки

Прежде чем начать, вы должны иметь некоторую конфигурацию, о которой уже позаботились.

Мы будем работать как пользователь без полномочий root с привилегиями sudo в этом руководстве.

Вам также понадобится установить Apache. Если у вас еще нет этого, вы можете быстро исправить это, набрав:

sudo apt-get update
sudo apt-get install apache2

Шаг первый — активируйте модуль SSL

Поддержка SSL фактически входит в пакет Ubuntu 14.04 Apache. Нам просто нужно включить его для использования SSL в нашей системе.

Включите модуль, набрав:

sudo a2enmod ssl

После того, как вы включили SSL, вам придется перезапустить веб-сервер для распознавания изменений:

sudo service apache2 restart

Таким образом, наш веб-сервер теперь может обрабатывать SSL, если мы его настроим.

Шаг второй. Создайте самоподписанный SSL-сертификат.

Начнем с создания подкаталога в иерархии конфигурации Apache для размещения файлов сертификатов, которые мы будем делать:

sudo mkdir /etc/apache2/ssl

Теперь, когда у нас есть место для размещения нашего ключа и сертификата, мы можем создать их как в один шаг, набрав:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Давайте перейдем к тому, что это значит.

  • openssl : Это основной инструмент командной строки, предоставляемый OpenSSL для создания и управления сертификатами, ключами, запросами подписи и т. д.
  • req : Указывает подкоманду для управления запросом на подпись сертификата X.509 (CSR). X.509 — это стандарт инфраструктуры открытого ключа, который SSL придерживается для управления ключами и сертификатами. Поскольку мы хотим создать новый сертификат X.509, это то, что мы хотим.
  • -x509 : Этот параметр указывает, что мы хотим создать самозаверяющий файл сертификата вместо создания запроса сертификата.
  • -nodes : эта опция сообщает OpenSSL, что мы не хотим защищать наш ключевой файл парольной фразой. Наличие защищенного паролем ключевого файла будет затруднять запуск Apache, поскольку мы должны будем вводить пароль каждый раз, когда служба перезагружается.
  • -дней 365 : Это указывает, что создаваемый сертификат будет действителен в течение одного года.
  • -newkey rsa: 2048 : этот параметр одновременно создаст запрос сертификата и новый закрытый ключ. Это необходимо, так как мы не создали секретный ключ заранее. Команда rsa:2048сообщает OpenSSL для генерации ключа RSA длиной 2048 бит.
  • -keyout : Этот параметр называет выходной файл для создаваемого файла секретного ключа.
  • -out : Этот параметр указывает выходной файл для генерируемого сертификата.

Когда вы нажмете «ENTER», вам будет задан ряд вопросов.

Самый важный элемент, который запрашивается, — это строка, которая гласит «Общее имя (например, полное доменное имя сервера или ваше имя)». Вы должны указать имя домена, которое хотите связать с сертификатом, или общедоступный IP-адрес сервера, если у вас нет имени домена.

Часть вопросов выглядит примерно так:

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your Company
Organizational Unit Name (eg, section) []:Department of Kittens
Common Name (e.g. server FQDN or YOUR name) []:your_domain.com
Email Address []:your_email@domain.com

Ключ и сертификат будут созданы и помещены в ваш /etc/apache2/sslкаталог.

Шаг третий. Настройка Apache для использования SSL.

Теперь, когда у нас есть наш сертификат и доступный ключ, мы можем настроить Apache для использования этих файлов в файле виртуального хоста. Подробнее о настройке виртуальных хостов Apache вы можете узнать здесь.

Вместо того, чтобы привязать наш файл конфигурации к 000-default.confфайлу в sites-availableподкаталоге, мы собираемся настроить эту конфигурацию в default-ssl.confфайле, который содержит определенную конфигурацию SSL по умолчанию.

Теперь откройте файл с правами root:

sudo nano /etc/apache2/sites-available/default-ssl.conf

С удалением комментариев файл выглядит примерно так:

<IfModule mod_ssl.c>
    <VirtualHost _default_: 443>
        ServerAdmin webmaster @ localhost
        DocumentRoot / var / www / html
        ErrorLog $ {APACHE_LOG_DIR} /error.log
        CustomLog $ {APACHE_LOG_DIR} /access.log в сочетании
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        <FilesMatch "\. (Cgi | shtml | phtml | php) $">
                        SSLOptions + StdEnvVars
        </ FilesMatch>
        <Directory / usr / lib / cgi-bin>
                        SSLOptions + StdEnvVars
        </ Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </ VirtualHost>
</ IfModule>

Это может выглядеть немного сложно, но, к счастью, нам не нужно беспокоиться о большинстве вариантов здесь.

Мы хотим установить обычные вещи, которые мы будем настраивать для виртуального хоста (ServerAdmin, ServerName, ServerAlias, DocumentRoot и т. Д.), А также изменить местоположение, где Apache ищет сертификат SSL и ключ.

В конце концов, это будет выглядеть примерно так. Записи красного цвета были изменены из исходного файла:

<IfModule mod_ssl.c>
    <VirtualHost _default_: 443>
        ServerAdmin admin@example.com 
        ServerName your_domain.com 
        ServerAlias www.your_domain.com 
        DocumentRoot / вар / WWW / HTML
        ErrorLog $ {APACHE_LOG_DIR} /error.log
        CustomLog $ {APACHE_LOG_DIR} /access.log в сочетании
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt 
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key
        <FilesMatch "\. (Cgi | shtml | phtml | php) $">
                        SSLOptions + StdEnvVars
        </ FilesMatch>
        <Directory / usr / lib / cgi-bin>
                        SSLOptions + StdEnvVars
        </ Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </ VirtualHost>
</ IfModule>

Сохраните и выйдите из файла, когда вы закончите.

Шаг четвертый — активируйте виртуальный хост SSL

Теперь, когда мы настроили наш виртуальный хост с поддержкой SSL, нам нужно включить его.

Мы можем сделать это, набрав:

sudo a2ensite default-ssl.conf

Затем нам нужно перезапустить Apache для загрузки нашего нового файла виртуального хоста:

sudo service apache2 restart

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

Шаг пятый — проверьте настройки

Теперь, когда у вас все готово, вы можете проверить свою конфигурацию, посетив доменное имя вашего сервера или общедоступный IP-адрес после указания https://протокола, например:

https: // server_domain_name_or_IP

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

Предупреждение apache ssl

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

Поскольку это ожидается, вы можете нажать кнопку «Продолжить в любом случае» или любой другой аналогичный вариант, который у вас есть в вашем браузере.

Теперь DocumentRootвы попадете в контент, который вы настроили для своего виртуального хоста SSL. На этот раз ваш трафик зашифрован. Вы можете проверить это, щелкнув значок блокировки в строке меню:

apache ssl зашифрован

Вы можете видеть в средней зеленой секции, что соединение зашифровано.

Заключение

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

Если вы планируете запускать общедоступный сайт и нуждаетесь в SSL, вам будет лучше покупать сертификат SSL из доверенного центра сертификации.

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

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