通过“Snow Leopard”在Mac OS上使用SSL与Apache / Passenger一起使用

时间:2011-01-04 10:33:19

标签: macos ssl apache2 ruby-on-rails-3 passenger

我有一台带有“Snow Leopard”v10.6.5的Mac OS,我正在使用Passenger Preference Pane v 1.3开发Ruby on Rails 3应用程序。

要继续开发我的应用程序,我需要 SSL 支持,但我有类似的problem

我遵循的步骤来自默认的apache osx install:

  1. 安装乘客和乘客偏好窗格。
  2. 添加我的Ruby on Rails应用程序(有效)
  3. 创建我的ca.key,server.crt和server.key为detailed on the Apple website ...
  4. ...但是在第三步中我不得不停下来,原因是编辑/ private / etc / apache2 / httpd.conf 文件时出现了以下原因(有关详情,请访问Apple网站) :

    1。  Port 80 should be changed to #Port 80.

    我还没有找到“端口80”,但我认为这不是问题,因为即使它存在于代码中,也会被注释掉。

    2。  You will need to add the following just below where the Port directive was:

    < IfModule mod_ssl.c>
        Listen 443
        Listen 80
    < /IfModule>
    

    如果我添加这些代码行并重新启动apache2,我的应用程序将不再有效。

    3。  [...] The two lines should now look like this:

    LoadModule ssl_module libexec/httpd/libssl.so
    
    AddModule mod_ssl.c
    

    由于代码'AddModule mod_ssl.c'不存在(LoadModule已准备好使用),我尝试添加它并重启apache2,但我的应用程序不再有效。

    4。  Now find the “ServerName” directive and make sure it has 127.0.0.1 for it’s entry.

    ServerName 127.0.0.1
    

    我不知道是否必须输入它,因为我使用Passenger。但是,在文件中我找到了代码行(已经注释)'#ServerName www.example.com:80'。

    关于SSL证书的Passenger代码,我认为它必须与problem reported above相同。

    我认为这是因为指南是很久以前写的。那么,如何在apache2中使用SSL?

    为了清楚起见,我还提供了与乘客偏好窗格相关的代码......

    ... /私有的/ etc / apache2的/的的httpd.conf

       LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
       PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2
       PassengerRuby /usr/local/bin/ruby
    
    # Added by the Passenger preference pane
    # Make sure to include the Passenger configuration (the LoadModule,
    # PassengerRoot, and PassengerRuby directives) before this section.
    <IfModule passenger_module>
      NameVirtualHost *:80
      <VirtualHost *:80>
        ServerName _default_
      </VirtualHost>
      Include /private/etc/apache2/passenger_pane_vhosts/*.conf
    </IfModule>
    

    ... /私有的/ etc / apache2的/ passenger_pane_vhosts /的 subdomain.domain.com.vhost.conf

    <VirtualHost *:443>
    
      ServerName subdomain.domain.com
      DocumentRoot "/Users/<my_user_name>/Sites/subdomain/public"
      RackEnv development
      <Directory "/Users/<my_user_name>/Sites/subdomain/public">
        Order allow,deny
        Allow from all
      </Directory>
    
      # SSL Configuration
      SSLEngine on
      SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
      SSLOptions +FakeBasicAuth +ExportCertData +StdEnvVars +StrictRequire
    
      #Self Signed certificates
      SSLCertificateFile /private/etc/apache2/ssl/server.crt
      SSLCertificateKeyFile /private/etc/apache2/ssl/server.key
      SSLCertificateChainFile /private/etc/apache2/ssl/ca.crt
    
      SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    
    </VirtualHost>
    

1 个答案:

答案 0 :(得分:0)

我刚刚遇到同样的问题,这就是我为了让它发挥作用而做的。

按照相同的步骤生成密钥(此外还会提到删除密码。我必须这样做以便工作)。

接下来,我执行了以下操作以在Apache上启用SSL:

在Snow Leopard的“/private/etc/apache2/httpd.conf”文件中有一行:

# Include /private/etc/apache2/extra/httpd-manual.conf

我刚删除了#并保存了文件。

接下来编辑文件(/private/etc/apache2/extra/httpd-manual.conf)并确保

SSLCertificateFile
SSLCertificateKeyFile

指向您创建的正确密钥文件。

接下来,同一个文件中的条目(/private/etc/apache2/extra/httpd-manual.conf)开始:

<VirtualHost _default_:443>

我必须将该文件及其后的所有内容(或者您可以删除它)注释掉

</VirtualHost> 

条目。该条目与我的网站冲突。

您看到的虚拟主机条目看起来是正确的,但为了完整性,我将在此处添加。

我刚修改了Passenger PrefsPane为我的网站创建的原始Vhost文件:

<VirtualHost *:443 *:80>
  ServerName mysite.local
  DocumentRoot "/Users/username/mysite/public"
  RackEnv development
  <Directory "/Users/username/mysite/public">
    Order allow,deny
    Allow from all
  </Directory>
  SSLEngine on
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  SSLOptions +FakeBasicAuth +ExportCertData +StdEnvVars +StrictRequire
  SSLCertificateFile /etc/apache2/sslkey/server.crt
  SSLCertificateKeyFile /etc/apache2/sslkey/server.key
  SSLCertificateChainFile /etc/apache2/sslkey/ca.crt
  SetEnvIf User-Agent &quot;.*MSIE.*&quot; nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>

接下来重启Apache,你应该好好去。 : - )