2015-04-20 14 views
9

बिना पोस्ट अनुरोध बनाने मैं, क्योंकि यह सुरक्षा हमलों अप opend और पीईएम प्रमाण पत्र के बिना है SSL के साथ लेकिन OpenSSL :: एसएसएल :: VERIFY_NONE बिना पोस्ट अनुरोध बनाने का प्रयास करें। लेकिन मैं समस्याओं स्थित भेजें पोस्ट अनुरोध के लिए मेरे गहरे लाल रंग का कोड को पकड़ने:रूबी सिनात्रा पीईएम और OpenSSL :: एसएसएल :: VERIFY_NONE

post '/test/test1' do 
    cross_origin 
    post_data = request.body.read 
    res_Data = JSON.parse(post_data) 
    userName = res_Data['username'] 

    @responseFromServer='' 
    uri = URI('https://test.com/test1') 
    Net::HTTP.start(uri.host, uri.port, 
        :use_ssl => uri.scheme == 'https', 
        :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http| 
    request = Net::HTTP::Post.new uri.request_uri 
    request.basic_auth 'aa', 'bb' 
    request.body = {'username' =>userName}.to_json 
    response = http.request request 
    @responseFromServer = response.body.to_s 
    end 
    newJson = JSON.parse(@responseFromServer) 

    status_msg = newJson['status']['status_msg'] 
    if (status_msg == "Success") 
    return 'true' 
    end 
    return 'false' 
end 

यह है विधि काम किया लेकिन वह OpenSSL :: एसएसएल :: VERIFY_NONE का उपयोग करें। ओपनएसएसएल :: एसएसएल :: VERIFY_NONE और पीईएम प्रमाण पत्र के बिना POST अनुरोध भेजने के लिए विधि कैसे बनाएं?

संपादित SSL/HTTPS अनुरोध अद्यतन: वहाँ कुछ अच्छे कारण हैं इस कोड उदाहरण खराब है। यह एक संभावित सुरक्षा भेद्यता का परिचय देता है यदि आप आवश्यक हैं कि आप जिस सर्वर से कनेक्ट कर रहे हैं उसकी पहचान सत्यापित करने के लिए सर्वर प्रमाण पत्र का उपयोग करें। हालांकि इस मुद्दे के लिए एक फिक्स है!

require "net/https" 
require "uri" 

uri = URI.parse("https://secure.com/") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

request = Net::HTTP::Get.new(uri.request_uri) 

response = http.request(request) 
response.body 
response.status 
response["header-here"] # All headers are lowercase 

SSL/HTTPS पीईएम प्रमाण पत्र के साथ अनुरोध

require "net/https" 
require "uri" 

uri = URI.parse("https://secure.com/") 
pem = File.read("/path/to/my.pem") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.cert = OpenSSL::X509::Certificate.new(pem) 
http.key = OpenSSL::PKey::RSA.new(pem) 
http.verify_mode = OpenSSL::SSL::VERIFY_PEER 

request = Net::HTTP::Get.new(uri.request_uri) 

मेरा प्रश्न: कैसे पीईएम और OpenSSL :: एसएसएल :: VERIFY_NONE बिना POST विधि बनाने के लिए?

+2

यह आपकी मदद कर सकता है: http://stackoverflow.com/questions/1113422/how-to-bypass-ssl-certificate-verification-in-open-uri – karlingen

+0

@karlingen आपका मतलब है कि मुझे उपयोग की आवश्यकता है ** ओपनएसएसएल: : एसएसएल :: VERIFY_PEER = ओपनएसएसएल :: एसएसएल :: VERIFY_NONE **? यह काम करता है है, लेकिन मैं बिना OpenSSL :: एसएसएल :: VERIFY_NONE ** पोस्ट अनुरोध का उपयोग की जरूरत है ** –

+0

@karlingen या अगर मैं का उपयोग ** OpenSSL :: एसएसएल :: VERIFY_PEER = OpenSSL :: एसएसएल :: VERIFY_NONE ** यह हल है सुरक्षा की समस्या? –

उत्तर

1

यह सवाल काफी भ्रामक है, लेकिन मैं पूरी कोशिश यह पता लगाने की। यहां मेरी सलाह दी गई है:

क्या आप केवल उस सेवा से कनेक्ट करना चाहते हैं जो केवल https के माध्यम से उपलब्ध है और आपको कोई परवाह नहीं है कि प्रमाणपत्र मान्य है या नहीं?

फिर क्लाइंट प्रारंभ करते समय आप :verify_mode => OpenSSL::SSL::VERIFY_NONE का उपयोग कर सकते हैं। आपके पास किसी प्रकार की परिवहन सुरक्षा होगी, लेकिन आप यह सुनिश्चित नहीं कर सकते कि जिस सर्वर से आप बात कर रहे हैं वह वह है जिसे आप सोचते हैं। आप कमजोर हैं।

क्या आप https और http दोनों के माध्यम से उपलब्ध एक सेवा से कनेक्ट करना चाहते हैं, और आपको परिवहन सुरक्षा की परवाह नहीं है?

तो फिर तुम http://... endpoint उपयोग करना चाहिए।

आप एक सेवा से कनेक्ट करना चाहते हैं और आप परिवहन सुरक्षा के बारे में परवाह है?

तो आप निश्चित रूप से https://... endpoint उपयोग करना चाहिए। :verify_mode ओवरराइड न करें! यदि आपको प्रमाणपत्र सत्यापन त्रुटियां मिल रही हैं, तो सुनिश्चित करें कि आपके सिस्टम पर सही प्रमाणपत्र प्राधिकरण स्थापित है।

संबंधित मुद्दे