Ada*_*and 1 ubuntu ssl ruby-on-rails apache-2.2
在 Apache2/Ubuntu 上托管的 Ruby on Rails 应用程序上设置 SSL 需要采取哪些步骤?
注意:我从之前错误的“社区维基”帖子中移走了它。
前几天,我们的一些 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
Run Code Online (Sandbox Code Playgroud)
然后你实际上制作了你的私钥,就像这样:
sudo openssl genrsa -des3 -out www.yourdomain.com.key 1024
Run Code Online (Sandbox Code Playgroud)
它会要求您输入密码。您稍后将删除它,但现在只需输入您会记住的内容。您将在本地保留此密钥(不要将其发送给 GoDaddy)。
创建您的企业社会责任
这是您实际发送到 GoDaddy 以获取证书的文件:
sudo openssl req -new -key www.yourdomain.com.key -out www.yourdomain.com.csr
Run Code Online (Sandbox Code Playgroud)
获得您的证书和中级证书
现在,您可以通过 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
Run Code Online (Sandbox Code Playgroud)
为您的密钥文件设置适当的权限
你不希望随便的人抢你的钥匙。此时,如果您在 /etc/apache2/ssl 文件夹中执行 ls -l ,您应该看到文件归 root 所有。现在我们只需要更改权限,以便只有 root 可以读取它们:
sudo chmod 400 /etc/apache2/ssl/*
Run Code Online (Sandbox Code Playgroud)
通过安装 Mod 来准备 Apache
您的 Apache 安装可能没有安装 mod_ssl 或 mod_headers,因此您需要执行以下操作:
sudo a2enmod ssl
sudo a2enmod headers
Run Code Online (Sandbox Code Playgroud)
在 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>
Run Code Online (Sandbox Code Playgroud)
…您当然需要在适用的地方放入您的域,并将您的密钥文件的名称也放入其中。
重启阿帕奇
这些更改在您重新启动 apache 之前不会生效,因此请执行以下操作:
sudo /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)
调整你的 Rails 应用
现在我们需要调整您的 rails 应用程序,使其支持 SSL。编辑您的 /app/controllers/application_controller.rb 并将其添加到底部:
def ssl_required?
true
end
Run Code Online (Sandbox Code Playgroud)
如果你想花哨,你可以在那里添加一些代码来返回 false iflocal_request或RAILS_ENV == ‘test’。
就是这样!希望这可以为其他人节省一些网络研究!
| 归档时间: |
|
| 查看次数: |
3811 次 |
| 最近记录: |