【问题标题】:Getting SSL to work with Apache/Passenger on Mac OS with "Snow Leopard"使用“Snow Leopard”让 SSL 在 Mac OS 上与 Apache/Passenger 一起工作
【发布时间】:2011-01-04 10:33:18
【问题描述】:

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

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

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

  1. 安装乘客和乘客首选项窗格。
  2. 添加我的 Ruby on Rails 应用程序(有效)
  3. 将我的 ca.key、server.crt 和 server.key 创建为 detailed on the Apple website...

...但是在第三步中,由于以下原因,我不得不停止编辑 /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

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

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

我认为这是因为指南是很久以前写的。那么,我应该怎么做才能将 SSL 与 apache2 一起使用?

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

.../private/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>

.../private/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>

【问题讨论】:

  • 您在 Apple 网站上关注的文档已有大约 10 年的历史,并且针对的是 Apache 1.3,因为当时安装了 Mac OS X。这些说明不会完全适用于当前的 Apache 2.2 安装。请改用 Apache 文档。

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


【解决方案1】:

我刚刚遇到了同样的问题,这就是我为使其正常工作所做的工作。

按照相同的步骤生成密钥(还进一步提到了删除密码。我必须这样做才能正常工作)。

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

在我的雪豹上的“/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 就可以了。 :-)

【讨论】:

  • 如果您尝试在 localhost 中为 HTTPS 连接验证对等体,它将使用您的自签名证书吗?
  • 应该可以,虽然它是本地主机测试,但我并不太担心安全警告:-)
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 2012-08-17
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 2010-12-26
相关资源
最近更新 更多