2009-07-11 34 views
41

Tôi cố gắng truy cập tệp có uri mở qua kết nối https. Rất tiếc, có một số lỗi xảy ra với chứng chỉ, tôi nhận được chứng chỉ xác minh lỗi không thành công. Tôi không thể làm bất cứ điều gì về điều đó, vì vậy tôi phải bỏ qua việc xác minh.Cách bỏ qua xác minh chứng chỉ SSL trong open-uri?

Tôi thấy điều này answer

Tôi không muốn/không thể thay đổi Oen-uri.rb trên máy chủ, và tôi đang chạy Ruby 1.8.6.

Làm cách nào để thay đổi chế độ xác minh? Hay chính xác hơn tôi phải thay đổi nó ở đâu?

Tôi có thể đặt cái này ở đâu?

if target.class == URI::HTTPS 
require 'net/https' 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
store = OpenSSL::X509::Store.new 
store.set_default_paths 
http.cert_store = store 
end 

hoặc lỗi bẩn: tôi có thể đặt cái này ở đâu?

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 

Trả lời

59

Nếu bạn thực sự không muốn an ninh bổ sung của việc sử dụng xác minh chứng chỉ, và có thể nâng cấp với Ruby 1.9.3p327 +, bạn có thể vượt qua các tùy chọn ssl_verify_mode với phương pháp open. Ở đây ví dụ là cách tôi đang làm nó:

request_uri=URI.parse('myuri?that_has=params&encoded=in_it&optionally=1') 

# The params incidentally are available as a String, via request_uri.query 
output = open(request_uri, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE}) 
obj = JSON.parse output.readlines.join("") 
+0

@JimmyDean 2.2.1p85 trên mac os x tại đây, verify_mode không hoạt động. – nurettin

+0

@nurettin - Bạn đúng 100%. Tôi đã nhìn vào đá quý sai. HTTPClient nó là verify_mode. Tôi đã xóa bình luận để không lộn xộn với thông tin sai lệch. Cảm ơn bạn đã chỉ ra điều này. http://www.rubydoc.info/gems/httpclient/HTTPClient%2FSSLConfig%3Averify_mode – JamesDeHart

+1

@JimmyDean cảm ơn vì đã sửa lỗi – nurettin

38

Tìm thấy chính bản thân mình bây giờ: Tôi đã sử dụng phần mềm bẩn, hoạt động tốt cho tôi.

tôi đã phải đặt nó vào: yourrailsapp/initalizers/

Ở đó tôi đã tạo ra một bypass_ssl_verification_for_open_uri.rb

Và đặt:

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
+8

Nếu bạn gặp lỗi 'gán liên tục động', hãy làm như sau: OpenSSL :: SSL.const_set (: VERIFY_PEER, OpenSSL :: SSL :: VERIFY_NONE) – Sam

+3

Và để tránh ngay cả cảnh báo: đã được khởi tạo liên tục OpenSSL :: Cảnh báo SSL :: VERIFY_PEER', sử dụng 'remove_const' để loại bỏ hằng số trước khi thêm nó trở lại. Thật khó để nhập vào nhận xét để [xem gist này] (https://gist.github.com/siruguri)/66926b42a0c70ef7119e). – sameers

+0

Thích @sameers trả lời nếu bạn đang sử dụng ruby ​​1.9.3p327 + – jvenezia

1

Có vẻ như một ứng cử viên tốt để đưa vào environment.rb, hoặc nếu điều này hack chỉ cần thiết trong các môi trường cụ thể, sau đó trong các tệp cấu hình riêng lẻ của chúng.

13

rất tốt (có thể đẻ trứng uninitialized constant OpenSSL (NameError)) để đưa require 'openssl' trước dòng đó, vì vậy

app/config/initializers/bypass_ssl_verification_for_open_uri.rb (filename của initializer doesn' vấn đề)

require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

+3

Tôi có thể sử dụng nó như thế nào trên tập lệnh? Tôi đã thử nó và tôi nhận được 'cảnh báo: đã được khởi tạo hằng số VERIFY_PEER.' và nó không hoạt động – daitangio

+0

có vẻ như, hằng số VERIFY_PEER đã ở đâu đó được xác định trước đó, bạn sẽ nhận được xác nhận lỗi xác minh? –

3

Một cách yếu nhưng kiểm soát là

class XMLRPC::Client 
# WEAK: Enrich the Client with a method for disabling SSL VERIFICATION 
# See /usr/lib/ruby/1.9.1/xmlrpc/client.rb:324 
# Bad hack but it works 
def disableSSLVerification 
    @http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
    warn "Proxyman SSL Verification disabled" 
end 
end 

Sau đó, bạn chỉ cần gọi

client.disableSSLVerification() 
9

Như bạn nói cho mình, đây là một bẩn Hack. Rõ ràng, việc tắt xác minh chứng chỉ SSL không phải là một ý tưởng hay.

Có một số rất hữu ích article bởi Mislav Marohnić, điều này rất chi tiết tại sao điều này là xấu và cách giải quyết vấn đề này đúng cách.

Nói tóm lại, bạn chủ yếu có được SSL xác minh lỗi nếu:

  1. giấy chứng nhận là hợp lệ, nhưng hệ thống của bạn không có chứng chỉ gốc cần thiết để xác minh.
  2. chứng chỉ là tự ký, ví dụ: trong công ty của bạn và bạn cần phải tin tưởng nó
  3. bạn phải tuân thủ một man-in-the-middle tấn công

Đối với tôi, trường hợp đầu tiên áp dụng, và chỉ cần cập nhật các gói ca-certificates hệ thống Ubuntu của tôi đã thực hiện thủ thuật.

Một công cụ tuyệt vời để theo dõi lỗi SSL của bạn là ssl doctor script.

3

Đó là cuộc gọi của bạn, nhưng việc đặt VERIFY_PEER thành NONE về cơ bản là tương đương để tắt TLS hoàn toàn và kết nối qua HTTP thuần văn bản. Nó làm cho người đàn ông trong cuộc tấn công tầm thường, và sẽ không vượt qua một cuộc kiểm toán PCI.

Các vấn đề liên quan