Какие шаги необходимо предпринять для настройки SSL в приложении Ruby on Rails, размещенном на Apache2 / Ubuntu?
ПРИМЕЧАНИЕ. Я переместил это из предыдущего ошибочного сообщения «вики сообщества».
На днях некоторые из наших разработчиков Rails попросили меня включить SSL в приложении.
В Google есть много источников для настройки SSL с Ubuntu и Apache, некоторые - на Rails, а некоторые - на Ubuntu / Apache / Rails, но мне не удалось найти тот, который, на мой взгляд, был простым и всеобъемлющим.
Итак, потратив немного времени на выяснение точной комбинации шагов, необходимых для работы SSL с этой популярной конфигурацией, я решил сделать запись ServerFault о том, как включить SSL в вашем приложении Rails на Apache2 / Ubuntu.
Не стесняйтесь редактировать / добавлять / комментировать, основываясь на вашем опыте!
В этом случае мы предполагаем, что вы получаете сертификат от GoDaddy (а не самоподписанный сертификат), но вы можете получить свой сертификат в любом центре сертификации, и действия должны быть такими же.
Я буду использовать www.yourdomain.com в качестве примера домена, который мы хотим защитить.
Настройте каталог сертификатов
Есть четыре файла, связанных с криптографией для SSL, которым нужен дом: 1) CSR (вы отправляете GoDaddy), 2) закрытый ключ (который вы сохраняете), 3) фактический сертификат, отправленный вам GoDaddy, и 4) промежуточный сертификат (GoDaddy пришлет вам).
Если у вас Ubuntu, у вас, вероятно, есть папка / etc / apache2. Так что создайте там папку с именем ssl.
Создайте свой закрытый ключ
Для этого вам понадобится openssl, поэтому сначала выполните:
sudo apt-get install openssl
Затем вы фактически создаете свой закрытый ключ, например:
sudo openssl genrsa -des3 -out www.yourdomain.com.key 1024
Он попросит вас ввести пароль. Позже вы удалите его, а пока просто введите то, что запомните. Этот ключ вы будете хранить локально (не отправляйте его в GoDaddy).
Создайте свой CSR
Это файл, который вы отправите в GoDaddy для получения сертификата:
sudo openssl req -new -key www.yourdomain.com.key -out www.yourdomain.com.csr
Получите сертификат и промежуточный сертификат
Теперь вы проходите через процесс Godaddy (или вашего центра сертификации) для получения сертификата и промежуточного сертификата. Вы отправите им свой CSR, чтобы получить их. Поместите их в папку / etc / apache2 / ssl.
Удалите пароль из вашего закрытого ключа
Этот шаг не является обязательным, но если вы этого не сделаете, Apache не запустится автоматически при перезагрузке (он запросит пароль).
sudo mv www.yourdomain.com.key www.yourdomain.com.passkey
sudo openssl rsa -in www.yourdomain.com.passkey -out www.yourdomain.com.key
Установите соответствующие разрешения для ваших ключевых файлов
Вы же не хотите, чтобы случайные люди забирали ваши ключи. На этом этапе, если вы выполните команду ls -l в папке / etc / apache2 / ssl, вы должны увидеть, что файлы принадлежат пользователю root. Теперь нам просто нужно изменить разрешения, чтобы только root мог их читать:
sudo chmod 400 /etc/apache2/ssl/*
Подготовьте Apache, установив моды
В вашей установке Apache, вероятно, не установлены mod_ssl или mod_headers, поэтому вам нужно будет сделать:
sudo a2enmod ssl
sudo a2enmod headers
Настройте файл конфигурации сайта в Apache
Предполагая, что ваш сайт уже работает с http, у вас должен быть файл конфигурации уже в / etc / apache2 / sites-available (как по умолчанию). Отредактируйте этот файл так, чтобы он выглядел так:
<VirtualHost *:443>
ServerName www.yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/apps/yourapp/public
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/www.yourdomain.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/www.yourdomain.com.key
SSLCertificateChainFile /etc/apache2/ssl/gd_bundle.crt
#For RoR "Mongrel"
RequestHeader set X-Forwarded-Proto "https"
#Hack for IE
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
</VirtualHost>
… Вам, конечно, нужно будет указать свой домен там, где это возможно, а также указать имена ваших ключевых файлов.
Перезагрузите Apache
Эти изменения не вступят в силу, пока вы не перезапустите apache, поэтому сделайте следующее:
sudo /etc/init.d/apache2 restart
Настройте свое приложение Rails
Теперь нам нужно настроить ваше приложение rails так, чтобы оно поддерживало SSL. Отредактируйте свой /app/controllers/application_controller.rb и добавьте его внизу:
def ssl_required?
true
end
Если вы хотите пофантазировать, вы можете добавить туда код, чтобы вернуть false, если local_request
или RAILS_ENV == ‘test’
.
Это оно! Надеюсь, это спасет кого-то еще от некоторых веб-исследований!