gpt4 book ai didi

ruby-on-rails - 在本地主机中使用 Apache\Phusion Passenger 为虚拟主机设置 SSL 证书时出现问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:11 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3,我想在 localhost 上建立 HTTPS 连接。

我正在使用:

  • Apache v2 + Phusion Passenger
  • Mac 操作系统 + 雪豹 v10.6.6

我的 Ruby on Rails 安装使用 Typhoeus gem (可以使用 Ruby net\http 库,但结果不会改变)通过 HTTPS 发出 HTTP 请求。

我创建了自签名的 ca.keypjtname.crtpjtname.key 作为 detailed on the Apple website .

注意:按照 Apple 网站的说明,运行 openssl req -new -key server.key -out server.csr 命令(参见链接)这点

Common Name (eg, YOUR name) []: (this is the important one)

我输入了 *pjtname.com 以便该站点的所有子域都有效。


在我的 Apache httpd.conf 中,我有两个这样配置的虚拟主机:

# Secure (SSL/TLS) connections
#Include /private/etc/apache2/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Include /private/etc/apache2/other/*.conf



# Passenger configuration
LoadModule passenger_module /Users/<my_user_name>/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2/ext/apache2/mod_passenger.so
PassengerRoot /Users/<my_user_name>/.rvm/gems/ruby-1.9.2-p136/gems/passenger-3.0.2
PassengerRuby /Users/<my_user_name>/.rvm/wrappers/ruby-1.9.2-p136/ruby




# Go ahead and accept connections for these vhosts
# from non-SNI clients
SSLStrictSNIVHostCheck off


# Ensure that Apache listens on port 443
Listen 443

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
NameVirtualHost *:443



#
# PJTNAME.COM and subdomains SETTING
#



<VirtualHost *:443>
# Because this virtual host is defined first, it will
# be used as the default if the hostname is not received
# in the SSL handshake, e.g. if the browser doesn't support
# SNI.

ServerName pjtname.com:443
DocumentRoot "/Users/<my_user_name>/Sites/pjtname.com/pjtname.com/public"

ServerAdmin you@example.com
ErrorLog "/private/var/log/apache2/error_log"
TransferLog "/private/var/log/apache2/access_log"

RackEnv development

<Directory "/Users/<my_user_name>/Sites/pjtname.com/pjtname.com/public">
Order allow,deny
Allow from all
</Directory>

# SSL Configuration
SSLEngine on

# Self Signed certificates
# Server Certificate
SSLCertificateFile /private/etc/apache2/ssl/wildcard.certificate/pjtname.crt
# Server Private Key
SSLCertificateKeyFile /private/etc/apache2/ssl/wildcard.certificate/pjtname.key
# Server Intermediate Bundle
SSLCertificateChainFile /private/etc/apache2/ssl/wildcard.certificate/ca.crt
</VirtualHost>

# HTTP Setting
<VirtualHost *:80>
ServerName pjtname.com
DocumentRoot "/Users/<my_user_name>/Sites/pjtname.com/pjtname.com/public"

RackEnv development

<Directory "/Users/<my_user_name>/Sites/pjtname.com/pjtname.com/public">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>




<VirtualHost *:443>
ServerName users.pjtname.com:443
DocumentRoot "/Users/<my_user_name>/Sites/pjtname.com/users.pjtname.com/public"

ServerAdmin you@example.com
ErrorLog "/private/var/log/apache2/error_log"
TransferLog "/private/var/log/apache2/access_log"

RackEnv development

<Directory "/Users/<my_user_name>/Sites/pjtname.com/users.pjtname.com/public">
Order allow,deny
Allow from all
</Directory>

# SSL Configuration
SSLEngine on

# Self Signed certificates
# Server Certificate
SSLCertificateFile /private/etc/apache2/ssl/wildcard.certificate/pjtname.crt
# Server Private Key
SSLCertificateKeyFile /private/etc/apache2/ssl/wildcard.certificate/pjtname.key
# Server Intermediate Bundle
SSLCertificateChainFile /private/etc/apache2/ssl/wildcard.certificate/ca.crt
</VirtualHost>

# HTTP Setting
<VirtualHost *:80>
ServerName users.pjtname.com
DocumentRoot "/Users/<my_user_name>/Sites/pjtname.com/users.pjtname.com/public"

RackEnv development

<Directory "/Users/<my_user_name>/Sites/pjtname.com/users.pjtname.com/public">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

host 文件中我有:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost

# PJTNAME.COM SETTING

127.0.0.1 pjtname.com
127.0.0.1 users.pjtname.com

一切似乎都正常工作,因为我已经设置了一切(我认为是正确的):

  • 我为我的域和子域生成了一个通配符证书(在这个例子中:*.pjtname.com)
  • 我在 http.conf 文件中设置了基本命名的虚拟主机,监听端口 :433:80
  • 如果我的浏览器提醒我这些证书不安全,它也会接受证书(注意:我必须接受每个域\子域的证书;也就是说,[仅]在第一次我通过 HTTPS 访问域或子域我必须执行相同的接受程序)并且我可以使用 HTTPS 访问页面

完成所有这些工作后,当我使用 Typhoeus 从 pjtname.com RoR 应用程序发出请求时(我也可以使用 Ruby Net::Http 库,结果不会改变):

# Typhoeus request
Typhoeus::Request.get("https://users.pjtname.com/")

我收到类似关于证书的警告:

--- &id001 !ruby/object:Typhoeus::Response 
app_connect_time: 0.0
body: ""
code: 0
connect_time: 0.000625

# Here is the warning
curl_error_message: Peer certificate cannot be authenticated with known CA certificates

curl_return_code: 60
effective_url: https://users.pjtname.com/
headers: ""
http_version:
mock: false
name_lookup_time: 0.000513
pretransfer_time: 0.0
request: !ruby/object:Typhoeus::Request
after_complete:
auth_method:
body:
...

所有这些都意味着出了问题。那么,我必须做什么才能避免“无法使用已知 CA 证书验证对等证书”警告并使 HTTPS 请求正常工作?哪里是错误\错误(我认为在 Apache 配置中,但在哪里?!)

附言:如果您需要更多信息,请告诉我。

最佳答案

我认为你的 Apache 配置没问题,只是因为你使用的是自签名证书,你需要在客户端指定你信任证书颁发机构。

看起来 Typhoeus 使用 curl,它有自己的证书存储,独立于 OS X 的钥匙串(keychain)(您的浏览器将使用它)

在我的盒子上,它位于/opt/local/share/curl/curl-ca-bundle.crt,并且只是一个串联的认证机构列表。要消除警告,您应该能够将您创建的 CA 添加到该文件的末尾:

cat /path/to/ca.crt >> /path/to/curl-ca-bundle.crt

(或者您可以手动编辑它以添加一些关于该证书的评论)

但是,在下一次 curl 更新时,您很可能会丢失这些更改,因此让 curl 简单地不验证对等方的证书可能会更好。 (在您的应用程序中为此设置不同的产品/开发设置可能会很好)。我从未使用过 Typhoeus,但看起来您可以指定以下内容:

:disable_ssl_peer_verification => true

当你打电话时:

Typhoeus::Request.get("https://mail.google.com/mail", :disable_ssl_peer_verification => true). 

Curl 有一个 verify_peer 和一个 verify_host 设置。如果我没记错的话,verify_peer 检查证书是否由受信任的机构签署,verify_host 检查证书是否颁发给您正在连接的主机。

自述文件中有一些关于使用自签名证书的信息:https://github.com/dbalatero/typhoeus

关于ruby-on-rails - 在本地主机中使用 Apache\Phusion Passenger 为虚拟主机设置 SSL 证书时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com