Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku带FTPTLS-SSL连接错误_Heroku_Ftp_Openssl_Ssl Certificate_Ssl - Fatal编程技术网

Heroku带FTPTLS-SSL连接错误

Heroku带FTPTLS-SSL连接错误,heroku,ftp,openssl,ssl-certificate,ssl,Heroku,Ftp,Openssl,Ssl Certificate,Ssl,我正在尝试使用rails 1.9通过Heroku上的TLS连接到FTP Rails 1.9不包含FTPTLS,因此我将Rails 1.8 FTPTLS.rb文件复制到lib/assets中 这在本地主机上运行良好,但在我将其推送到Heroku时失败,因为证书验证失败 lib/assets/ftptls.rb: =begin = $RCSfile$ -- SSL/TLS enhancement for Net::HTTP. = Info 'OpenSSL for Ruby 2' projec

我正在尝试使用rails 1.9通过Heroku上的TLS连接到FTP

Rails 1.9不包含FTPTLS,因此我将Rails 1.8 FTPTLS.rb文件复制到lib/assets中

这在本地主机上运行良好,但在我将其推送到Heroku时失败,因为证书验证失败

lib/assets/ftptls.rb:

=begin
= $RCSfile$ -- SSL/TLS enhancement for Net::HTTP.

= Info
  'OpenSSL for Ruby 2' project
  Copyright (C) 2003 Blaz Grilc <farmer@gmx.co.uk>
  All rights reserved.

= Licence
  This program is licenced under the same licence as Ruby.
  (See the file 'LICENCE'.)

= Requirements

= Version
  $Id: ftptls.rb 13657 2007-10-08 11:16:54Z gotoyuzo $

= Notes
  Tested on FreeBSD 5-CURRENT and 4-STABLE
  - ruby 1.6.8 (2003-01-17) [i386-freebsd5]
  - OpenSSL 0.9.7a Feb 19 2003
  - ruby-openssl-0.2.0.p0
  tested on ftp server: glftpd 1.30
=end

require 'socket'
require 'openssl'
require 'net/ftp'

module Net
  class FTPTLS < FTP
    def connect(host, port=FTP_PORT)
      @hostname = host
      super
    end

    def login(user = "anonymous", passwd = nil, acct = nil)
       store = OpenSSL::X509::Store.new
       store.set_default_paths
       ctx = OpenSSL::SSL::SSLContext.new('SSLv23')
       ctx.cert_store = store
       ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
       ctx.key = nil
       ctx.cert = nil
       voidcmd("AUTH TLS")
       @sock = OpenSSL::SSL::SSLSocket.new(@sock, ctx)
       @sock.connect
       @sock.post_connection_check(@hostname)
       super(user, passwd, acct)
       voidcmd("PBSZ 0")
    end
  end
end

有什么想法可以让它工作吗?

您确信您的FTPTLS服务器有一个由/usr/lib/ssl/certs/ca certificates.crt中的一个权威机构签署的证书吗?有趣的一点。不是100%,我明天会做一些测试,看看结果如何。如果没有,我有什么选择?我可以从我的本地主机复制证书文件并指向它吗?我仍然没有让它工作。我向Heroku申请了一张支持票以获得更多帮助。我的本地ca_文件与Heroku的不同有什么原因吗?不同的发行版有不同的集合;您可能可以复制您的本地版本并使用它,但这可能会错过删除CA或添加CA的更新…嘿-我刚刚发布了一个相关问题的答案,这可能会帮助您:
ctx.ca_file = '/usr/lib/ssl/certs/ca-certificates.crt'