在Apache2 / Ubuntu上托pipe的Ruby on Rails应用程序中,需要采取什么措施来设置SSL?
注意:我从之前错误的“社区维基”post中提出这个问题。
有一天,我的一些Rails开发人员要求在应用程序上启用SSL。
Google上有很多来源可以用Ubuntu和Apache来configurationSSL,还有一些来自Rails,还有一些来自Ubuntu / Apache / Rails,但是我找不到一个让我觉得直接和全面的东西。
因此,花了一点时间搞清楚在这个stream行configuration上使用SSL所需的步骤的确切组合后,我决定在Apache2 / Ubuntu上的Rails应用程序中创build一个ServerFault条目。
随意编辑/添加/评论根据您的经验!
对于这种情况,我们假设您从GoDaddy(不是自签名证书)获得证书,但是您可以从任何证书颁发机构获得您的证书,并且步骤应该相同。
我将使用www.yourdomain.com作为我们想要保护的示例域。
设置您的证书目录
SSL有四个与encryption有关的文件需要一个家:1)CSR(你发送给GoDaddy),2)私钥(你保存的),3)GoDaddy发送给你的实际证书,以及4)中级证书(GoDaddy会寄给你)。
如果你有Ubuntu,你可能有一个/ etc / apache2文件夹。 所以在那里创build一个名为ssl的文件夹。
创build您的私钥
你需要openssl,所以首先要做的是:
sudo apt-get install openssl
那么你实际上是你的私钥,就像这样:
sudo openssl genrsa -des3 -out www.yourdomain.com.key 1024
它会要求你input密码。 稍后您将删除它,但现在只需键入您将记住的内容。 您将保留在本地的密钥(不要发送给GoDaddy)。
创build您的CSR
这是您实际发送给GoDaddy以获取您的证书的文件:
sudo openssl req -new -key www.yourdomain.com.key -out www.yourdomain.com.csr
获取您的证书和中级证书
现在您通过Godaddy(或您的证书颁发机构)的stream程获取证书和中间证书。 你会把他们的CSR发送给他们。 把它们放在你的/ etc / apache2 / ssl文件夹中。
从您的私钥中删除密码
这一步是可选的,但如果你不这样做,Apache不会在重启时自动启动(它会提示input密码)。
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/*
通过安装Mod来准备Apache
你的Apache安装可能没有安装mod_ssl或mod_headers,所以你需要做:
sudo a2enmod ssl sudo a2enmod headers
在Apache中调整站点configuration文件
假设你的网站已经可以使用http,你应该有一个configuration文件已经在/ 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' 。
而已! 希望这可以节省别人一些networking研究!