2012-02-06 13 views
1

外部APIからのSSL接続を介してJSONデータをプルして解析するレーキタスクがあります。SSLCaertBadFileエラーheroku curb

私は、この外部APIをラップ宝石を使用してローカルで実行している問題はないが、タスクが失敗した#<Curl::Err::SSLCaertBadFile: Curl::Err::SSLCaertBadFile>

でHerokuの上で実行したとき、私はそれはそれを修正するかもしれません期待して、ピギーバックSSLアドオンがインストールされていますが、サイコロはありません。

アイデア?

request.ssl_verify_peer 
request.ssl_verify_host 

私は正確に知っているSSLについて十分に知らない:私は以前、以下の二つのフィールドで設定されたカールの要求にSSL検証を無効にすることで、それを修正するために管理

UPDATE

ヒロクの環境でこれらの設定が原因でエラーが発生した理由、またはセキュリティを低下させることを除いて、これを無効にすることの意義は何ですか?

答えて

2

証明書のチェックを無効にすることは悪い考えです。そのトピックの詳細については、http://www.rubyinside.com/how-to-cure-nethttps-risky-default-https-behavior-4010.html,http://jamesgolick.com/2011/2/15/verify-none..htmlおよび関連する参考文献を参照してください。

問題は、HTTPクライアントがherokuでCA証明書バンドルを見つける場所を知らないことです。

Faraday.new "https://example.com", ssl: { ca_path: "/etc/ssl/certs" } 

幸運:ここFaradayを使用した例がある

require "net/https" 
require "uri" 

root_ca_path = "/etc/ssl/certs" 

url = URI.parse "https://example.com" 
http = Net::HTTP.new(url.host, url.port) 
http.use_ssl = (url.scheme == "https") 

if (File.directory?(root_ca_path) && http.use_ssl?) 
    http.ca_path = root_ca_path 
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
    http.verify_depth = 5 
end 

request = Net::HTTP::Get.new(url.path) 
response = http.request(request) 

あなたがここにあなたが使用しているクライアント言及したが、していないがHerokuの上net/httpsを使用するための一例です。

+0

宝石が以前に使っていたクライアントは確かではありませんが、ファラデーに更新されました。問題は解消され、証明書のチェックが再び有効になりました。親切にありがとう。 – manafire