Статьи

Защита вашего сервера Apache 2 с помощью SSL

Защита веб-сервера Apache 2 может быть пугающей перспективой для новых сертификатов уровня защищенных сокетов (SSL). Однако это не обязательно так. SSL обеспечивает безопасность подключения веб-сервера к веб-браузеру. Читайте дальше, чтобы лучше понять SSL-сертификаты, узнать, как настроить их на Apache и запустить свой сайт с поддержкой SSL.

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

Предостережение пользователям Apache 1.x

Несмотря на то, что это руководство специально предназначено для Apache 2, между этой и 1.x версиями Apache не так уж и много. До версии 2 поддержка SSL не была встроена в Apache из-за требований по экспорту и шифрованию. Тем не менее, apache-ssl и mod_ssl доступны для версий 1.x Apache. Большая часть содержимого openssl и httpd.conf в этом руководстве охватывает обе версии.

Центры сертификации и доверенные корни

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

Определенные обстоятельства были необходимы для того, чтобы SSL получил широкое коммерческое применение. Необходимо установить «доверие», прежде чем пользователи будут охотно передавать конфиденциальную информацию через Интернет. Таким образом, сертификационные органы (CA) были рождены. Чтобы гарантировать, что компании-разработчики, создающие современные популярные веб-браузеры, будут включать поддержку этих ЦС, некоторые из них получили свои доверенные корневые сертификаты — сертификаты, которые создают сертификаты SSL, продаваемые пользователям для защиты веб-сайтов. Эти компании называются доверенными центрами сертификации; примеры включают GeoTrust, Thawte и VeriSign.

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

SSL Review — это веб-сайт, посвященный демистификации SSL-сертификатов, и, хотя он принадлежит GeoTrust, крупному поставщику SSL, этот сайт достаточно объективен. Он включает в себя превосходную таблицу сравнения SSL, ранее представленную в Open Sourcery .

Какой тип сертификата мне выбрать?

Существует множество поставщиков, предлагающих различные сертификаты SSL. Цены на сертификаты могут значительно варьироваться — от 1495 долларов США до бесплатных — в зависимости от того, как вы планируете использовать сертификат, а также услуг и поддержки, предлагаемых поставщиком. Давайте посмотрим на несколько вариантов.

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

Защита данных в некоммерческой среде

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

Сертификаты в этой категории должны стоить менее 50 долларов США в год и включать доступность от Trusted CAs ipsCA и FreeSSL.com . Поскольку эти сертификаты не несут известную торговую марку, контроль за мошенничеством или поддержку со стороны персонала, они подходят для некоммерческой или легкой коммерции, хотя они и предоставляют дополнительное 128-битное шифрование. Согласно FreeSSL.com, среда легкой торговли — это среда, в которой не более 50 транзакций в неделю, а средняя стоимость транзакции составляет 50 долларов США.

Сертификаты с подстановочными знаками — защита нескольких доменов одним сертификатом

Могут быть случаи, когда необходимо защитить несколько поддоменов в одном домене. Например, защита www.domain.com, orders.domain.com и service.domain.com под одним сертификатом возможна с помощью SSL-сертификата с подстановочными знаками.

Поскольку вы можете защитить неограниченное количество имен хостов, подстановочные сертификаты, как правило, стоят дороже, чем обычные сертификаты, но они становятся очень экономичными для тех, кому необходимо защитить несколько доменов. Сертификаты в этой категории могут варьироваться от 299 до 800 долларов США и доступны на FreeSSL.com, ipsCA, GeoTrust и других.

Обеспечение безопасности для электронной коммерции

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

Каждый Trusted CA разработал свои собственные функции, преимущества и платформы для поддержки своей ставки для вашего бизнеса SSL; однако некоторые предоставляют более комплексные решения, чем другие.

При поиске SSL для электронной коммерции рассмотрите следующие вопросы:

  • Предлагает ли Trusted CA вашим пользователям метод аутентификации или проверки вашего SSL-сертификата через веб-браузер?
  • Есть ли гарантийная защита, если ваш сертификат украден, испорчен, подделан или вы потеряли его?
  • Какие виды льгот добавляются, если в сертификат инвестируются дополнительные доллары, такие как расширенные услуги продления и оплаты для обработки транзакций?

Стоимость сертификата электронной коммерции может варьироваться от 199 до 1495 долларов США в год. Они доступны у всех основных поставщиков Trusted CA, включая GeoTrust, Thawte и VeriSign.

Тестирование SSL через самоподписанные сертификаты /

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

Начало работы с SSL на Apache

Есть несколько ключевых компонентов, которые вам нужно будет использовать с Apache для защиты вашего веб-сервера: OpenSSL, mod_ssl и корневой доступ к серверу.

OpenSSL — это набор инструментов командной строки для использования шифрования на уровне защищенных сокетов на сервере, который можно получить на openssl.org . Этот инструмент работает с модулем Apache mod_ssl при выполнении задач, связанных с SSL. Для установки OpenSSL в его традиционное место назначения /usr/local/ssl/install/openssl вам потребуются права суперпользователя.

Вы также должны убедиться, что mod_ssl доступен на вашем сервере. Есть и другие альтернативы mod_ssl; один из них — apache-ssl, из которого был разветвлен код mod_ssl. Однако принятие mod_ssl было драматичным — почти 20% серверов Apache работали на нем в начале 2002 года.

Чтобы увидеть, какие модули активны в Apache, введите следующую команду в терминале от имени пользователя root на вашем сервере.

 /usr/sbin/httpd -l 

Если у вас установлен последний дистрибутив Linux, вполне вероятно, что модули Apache скомпилированы как динамически загружаемые модули, и в этом случае вам нужно будет отредактировать файл httpd.conf и убедиться, что следующая строка не закомментирована.

 LoadModule ssl_module modules/libmodssl.so 

Перезапуск Apache загрузит модуль в действие. В моем случае, используя основанную на RPM установку Red Hat и Apache, это достигается с помощью команды apachectl, обычно находящейся в /usr/sbin/apachectl . Вы можете перезапустить Apache, набрав следующее:

 /usr/sbin/apachectl restart 

Есть несколько полезных функций apachectl, включая остановку, запуск, перезапуск, состояние и проверку конфигурации. Смотрите man-страницы через man apachectl.

Обратите внимание, что в последних дистрибутивах Apache файл httpd.conf содержит <IfDefine HAVE_SSL> который должен содержать определения <VirtualHost> для всех ваших веб-сайтов SSL. Поместив эти определения в раздел <IfDefine> , вы можете быть уверены, что сайты не будут доступны, пока на сервере не будет успешно загружена поддержка SSL. Это предотвращает любые проблемы, возникающие при использовании SSL для защиты ваших безопасных сайтов.

Создать локальную пару ключей

Если вы еще этого не сделали, вашим первым шагом должно быть создание локального частного / открытого ключа, из которого вы можете генерировать запросы на сертификат. Затем их можно использовать для самозаверяющих сертификатов или при покупке сертификата в ЦС.

OpenSSL позволяет нам использовать командную строку для генерации ключей. У вас есть возможность использовать надежное шифрование и фразу-пароль для защиты вашего закрытого ключа, как показано ниже.

 openssl genrsa -des3 -out domainname.com.key 1024 

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

Обратите внимание, что если OpenSSL не находится на вашем пути, вам может потребоваться ввести полный путь к двоичному файлу для этой цели; по умолчанию это /usr/local/ssl/install/openssl/bin/openssl . Ключ будет создан в каталоге, в котором вы находитесь.

Наконец, вы должны изменить разрешения, чтобы ограничить доступ к новому ключу, введя chmod 400 domainname.com.key в командной строке. Это гарантирует, что только пользователь root имеет доступ к этому файлу, и ему по-прежнему требуется пароль, который вы могли использовать для создания ключа, чтобы открыть его.

Создание самоподписанного сертификата

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

Создайте свой собственный сертификат, вернувшись в командную строку и введя следующее:

 openssl req -new -key domainname.com.key -x509 -out sslname.crt 

Эта команда создает самозаверяющий сертификат SSL, который затем можно поместить в соответствующий каталог. После этого можно внести необходимые изменения в httpd.conf (мы расскажем об этом чуть позже).

Генерация запроса на подпись сертификата

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

Запрос CSR прост; это выполняется в командной строке с OpenSSL следующим образом:

 /usr/local/ssl/install/bin/openssl req -new -key domainname.com.key -out domainname.com.csr 

Эта команда создает файл .csr, который отправляется или загружается в ЦС в процессе заказа сертификата SSL.

Получение и установка вашего сертификата SSL

Как правило, центры сертификации предоставляют подробные инструкции по установке своих сертификатов SSL; Тем не менее, я расскажу некоторые общие моменты здесь.

Центр сертификации, у которого вы заказываете сертификат, отправит вам по электронной почте либо сертификат, либо ссылку, по которой вы можете его скачать. Точно следуйте инструкциям, особенно в отношении открытия сертификата в текстовом редакторе. Не используйте текстовый процессор или текстовый редактор, поскольку код сертификата может быть поврежден. Вы также должны позаботиться о том, чтобы ни начальные, ни конечные пробелы не следовали за началом и концом кода сертификата — см. Пример кода ниже:

 -----BEGIN CERTIFICATE-----  MIIC8DCCAlmgAwIBAgIBEDANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx  FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD  VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv  biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm  MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTkwNTI1  MDMwMDAwWhcNMDIwNjEwMDMwMDAwWjBTMQswCQYDVQQGEwJVUzEbMBkGA1UEChMS  RXF1aWZheCBTZWN1cmUgSW5jMScwJQYDVQQDEx5FcXVpZmF4IFNlY3VyZSBFLUJ1  c2luZXNzIENBLTIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYna8GjS9mG  q4Cb8L0VwDBMZ+ztPI05urQb8F0t1Dp4I3gOFUs2WZJJv9Y1zCFwQbQbfJuBuXmZ  QKIZJOw3jwPbfcvoTyqQhM0Yyb1YzgM2ghuv8Zz/+LYrjBo2yrmf86zvMhDVOD7z  dhDzyTxCh5F6+K6Mcmmar+ncFMmIum2bAgMBAAGjYjBgMBIGA1UdEwEB/wQIMAYB  Af8CAQAwSgYDVR0lBEMwQQYIKwYBBQUHAwEGCCsGAQUFBwMDBgorBgEEAYI3CgMD  BglghkgBhvhCBAEGCCsGAQUFBwMIBgorBgEEAYI3CgMCMA0GCSqGSIb3DQEBBAUA  A4GBALIfbC0RQ9g4Zxf/Y8IA2jWm8Tt+jvFWPt5wT3n5k0orRAvbmTROVPHGSLw7  oMNeapH1eRG5yn+erwqYazcoFXJ6AsIC5WUjAnClsSrHBCAnEn6rDU080F38xIQ3  j1FBvwMOxAq/JR5eZZcBHlSpJad88Twfd7E+0fQcqgk+nnjH  -----END CERTIFICATE----- 

При использовании установок по умолчанию на основе RPM мой закрытый ключ и действительные сертификаты SSL, возвращаемые ЦС, попадают в /etc/httpd/conf/ssl.key/ и /etc/httpd/conf/ssl.crt/ соответственно. Ваши самозаверяющие сертификаты также должны находиться в последнем каталоге вместо официальных сертификатов SSL, выданных ЦС, или в дополнение к ним.

Это будет отличаться в зависимости от того, как была установлена ​​ваша версия Apache. VeriSign предлагает на своем сайте обширный указатель по установке, который охватывает множество веб-серверов, включая Apache. Учебник Apache mod_ssl основан в основном на информации, доступной на веб-сайте modssl.org.

Конфигурирование Apache для включения SSL для защищаемых доменов происходит в файле httpd.conf. Для начала сделайте резервную копию файла. Затем откройте его в своем любимом текстовом редакторе.

Вы можете добавить домен виртуального хоста, который вы <IfDefine HAVE_SSL> раздел <IfDefine HAVE_SSL> указанный выше. Ниже приведен минимальный пример записи прямо из файла httpd.conf по умолчанию. Вы должны изменить такие элементы, как пути и IP-адреса, чтобы они соответствовали вашей среде. Порт SSL — 443, если вы специально не настраиваете порт на другой номер порта (конфигурация SSL выделена жирным шрифтом ниже):

 <IfDefine HAVE_SSL>   <VirtualHost 10.0.0.5:443>  DocumentRoot /home/sites/domainname.com/html  ServerName www.domainname.com  ServerAlias domainname.com  ServerAdmin [email protected]  ErrorLog /home/sites/domainname.com/logs/error_log  TransferLog / home/sites/domainname.com/logs/access_log  SSLEngine on  SSLCertificateFile /etc/httpd/conf/ssl.crt/domainname.com.crt  SSLCertificateKeyFile /etc/httpd/conf/ssl.key/domainname.com.key  SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown  </VirtualHost>   </IfDefine> 

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

Теперь вы должны перезапустить Apache с помощью команды apachectl, чтобы убедиться, что все ваши изменения включены. После этого вы сможете получить безопасный доступ к своему сайту, перейдя по адресу https://domainname.com/ .

Заключение, дополнительные функции и инструменты

Как видите, хотя для запуска и запуска SSL требуется некоторое исследование, планирование и усилия, это не является непреодолимой задачей. В ближайшие недели я буду вести блог в Open Sourcery по темам, связанным с SSL, таким как настройка файлов веб-журнала для регистрации активности SSL на защищенной части вашего сайта и несколько интересных инструментов с возможностью применения SSL. Будьте на связи!