AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 60363
Accepted
Adam Brand
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 1 个回答
  • 3909 Views

1 个回答

  • Voted
  1. 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’.

    而已!希望这可以为其他人节省一些网络研究!

    • 7

相关问题

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 您最喜欢的 SSL 证书提供商是什么?[关闭]

  • mod_rewrite 不转发 GET 参数

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve