如何使用 Apache2 和 Ruby on Rails 在 Ubuntu 上设置 SSL?

如何使用 Apache2 和 Ruby on Rails 在 Ubuntu 上设置 SSL?

在 Apache2/Ubuntu 上托管的 Ruby on Rails 应用程序上设置 SSL 需要采取哪些步骤?

答案1

注意:我将其从之前错误的“社区维基”帖子中移出。

有一天,我们的一些 Rails 开发人员要求我在应用程序上启用 SSL。

Google 上有许多关于使用 Ubuntu 和 Apache 配置 SSL 的资料,还有一些关于 Rails 的资料,还有一些关于 Ubuntu/Apache/Rails 的资料,但我找不到一个我觉得简单而全面的资料。

因此,在花了一些时间弄清楚使 SSL 在这个流行配置上运行所需的确切步骤组合之后,我决定制作一个 ServerFault 条目,介绍如何在 Apache2 / Ubuntu 上的 Rails 应用程序中运行 SSL。

请根据您的经验随意编辑/添加/评论!

对于这种情况,我们假设您从 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

为关键文件设置适当的权限

您不希望随机的人窃取您的密钥。此时,如果您在 /etc/apache2/ssl 文件夹中执行 ls -l,您应该会看到这些文件归 root 所有。现在我们只需更改权限,以便只有 root 可以读取它们:

sudo chmod 400 /etc/apache2/ssl/*

通过安装 Mods 准备 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

如果您想要更花哨一点,您可以在那里添加一些代码来在local_request或时返回 false RAILS_ENV == ‘test’

就是这样!希望这能为其他人节省一些网络搜索的时间!

相关内容