Adam Brand Asked: 2009-08-30 11:09:49 +0800 CST2009-08-30 11:09:49 +0800 CST 2009-08-30 11:09:49 +0800 CST 如何在 Ubuntu 上使用 Apache2 和 Ruby on Rails 设置 SSL? 772 在 Apache2/Ubuntu 上托管的 Ruby on Rails 应用程序上设置 SSL 需要采取哪些步骤? ubuntu apache-2.2 ruby-on-rails ssl 1 个回答 Voted Best Answer Adam Brand 2009-08-30T11:10:32+08:002009-08-30T11:10:32+08:00 注意:我从以前错误的“社区 wiki”帖子中转移了这个。 前几天,我们的一些 Rails 开发人员要求我在应用程序上启用 SSL。 谷歌上有很多关于使用 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)。 创建您的企业社会责任 这是您实际发送给 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 可以读取它们: sudo chmod 400 /etc/apache2/ssl/* 通过安装 Mod 准备 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 之前,这些更改不会生效,因此请执行以下操作: sudo /etc/init.d/apache2 restart 调整您的 Rails 应用程序 现在我们需要调整您的 Rails 应用程序,使其支持 SSL。编辑您的 /app/controllers/application_controller.rb 并将其添加到底部: def ssl_required? true end 如果你想变得花哨,你可以在那里添加一些代码来返回 false iflocal_request或RAILS_ENV == ‘test’. 而已!希望这可以为其他人节省一些网络研究!
注意:我从以前错误的“社区 wiki”帖子中转移了这个。
前几天,我们的一些 Rails 开发人员要求我在应用程序上启用 SSL。
谷歌上有很多关于使用 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,因此首先执行以下操作:
然后您实际上制作了您的私钥,如下所示:
它会要求您输入密码。您稍后将删除它,但现在只需输入您会记住的内容。您将保留在本地的此密钥(不要将其发送给 GoDaddy)。
创建您的企业社会责任
这是您实际发送给 GoDaddy 以获取证书的文件:
获取您的证书和中级证书
现在您通过 Godaddy(或您的证书颁发机构)的流程来获取您的证书及其中间证书。您将向他们发送您的 CSR 以获取这些信息。将它们放在您的 /etc/apache2/ssl 文件夹中。
从您的私钥中删除密码
此步骤是可选的,但如果您不这样做,Apache 将不会在重新启动时自动启动(它会提示输入密码)。
为您的密钥文件设置适当的权限
你不希望随机的人抢到你的钥匙。此时,如果您在 /etc/apache2/ssl 文件夹中执行 ls -l 操作,您应该会看到文件归根用户所有。现在我们只需要更改权限,以便只有 root 可以读取它们:
通过安装 Mod 准备 Apache
您的 Apache 安装可能没有安装 mod_ssl 或 mod_headers,因此您需要执行以下操作:
在 Apache 中调整站点配置文件
假设您的站点已经可以使用 http 运行,您应该在 /etc/apache2/sites-available 下已经有一个配置文件(如默认值)。编辑该文件,使其看起来像:
…您当然需要在适用的情况下输入您的域,并在其中输入您的密钥文件的名称。
重启阿帕奇
在您重新启动 apache 之前,这些更改不会生效,因此请执行以下操作:
调整您的 Rails 应用程序
现在我们需要调整您的 Rails 应用程序,使其支持 SSL。编辑您的 /app/controllers/application_controller.rb 并将其添加到底部:
如果你想变得花哨,你可以在那里添加一些代码来返回 false if
local_request
或RAILS_ENV == ‘test’
.而已!希望这可以为其他人节省一些网络研究!