Hoe omzeil je SSL-certificaatverificatie in open-uri?

Ik probeer toegang te krijgen tot een bestand met open-uri via een https-verbinding. Helaas is er iets mis met het certificaat, ik krijg de foutmelding certificaat verifiëren mislukt. Daar kan ik niets aan doen, dus ik moet de verificatie omzeilen.

Ik heb dit antwoord

gevonden

Ik wil/kan de oen-uri.rb op de server niet wijzigen en ik gebruik Ruby 1.8.6.

Hoe wijzig ik de verificatiemodus? Of meer precies, waar kan ik het wijzigen?

Waar kan ik dit plaatsen?

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

of de vuile hack: waar kan ik dit plaatsen?

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

Antwoord 1, autoriteit 100%

Waarschuwing, doe dit niet in productie, je schakelt SSL op deze manier volledig uit.

Als u de extra beveiliging van het gebruik van certificaatverificatie echt niet wilt, en kunt upgraden naar Ruby 1.9.3p327+, kunt u de optie ssl_verify_modedoorgeven aan de openmethode. Hier is bijvoorbeeld hoe ik het doe:

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("")

Antwoord 2, autoriteit 52%

Ik heb het nu zelf ontdekt: ik heb de vuile hack gebruikt, wat prima werkt voor mij.

Ik moest het in: yourrailsapp/initalizers/

Daar heb ik een bypass_ssl_verification_for_open_uri.rb

gemaakt

En zet:

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

Antwoord 3, autoriteit 21%

het is goed (het kan uninitialized constant OpenSSL (NameError)voortbrengen) om ‘openssl’ voor die regel te plaatsen, dus

app/config/initializers/bypass_ssl_verification_for_open_uri.rb (bestandsnaam van initializer doet er niet toe)

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


Antwoord 4, autoriteit 16%

Zoals je zelf al zei, is dit een vuile hack. Het is duidelijk geen goed idee om SSL-certificaatverificatie uit te schakelen.

Er is een zeer nuttig artikelvan Mislav Marohnić, dat ingaat op geef aan waarom dit slecht is en hoe u dit op de juiste manier kunt aanpakken.

Samengevat krijgt u meestal de SSL-verificatiefout als:

  1. het certificaat is geldig, maar uw systeem heeft niet het benodigde basiscertificaat voor verificatie.
  2. het certificaat is zelfondertekend, b.v. in uw bedrijf en u moet het vertrouwen
  3. je bent onderworpen aan een man-in-the-middle-aanval

Voor mij was het eerste geval van toepassing, en het eenvoudig bijwerken van het ca-certificates-pakket op mijn Ubuntu-systeem was voldoende.

Een geweldig hulpmiddel om uw SSL-fout op te sporen is de ssl-dokter script.


Antwoord 5, autoriteit 5%

Het is aan jou, maar VERIFY_PEER instellen op NONE is in principe gelijk
om TLS helemaal uit te schakelen en verbinding te maken via HTTP in platte tekst. Het maakt
man in the middle valt triviaal aan en zal niet slagen voor een PCI-audit.


Antwoord 6, autoriteit 4%

Lijkt een goede kandidaat voor opname in environment.rb, of als deze hack alleen nodig is in bepaalde omgevingen, dan in hun individuele configuratiebestanden.


Antwoord 7, autoriteit 4%

Een zwakke maar gecontroleerde manier is

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

Dan bel je gewoon

client.disableSSLVerification()

Other episodes