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_mode
doorgeven aan de open
methode. 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:
- het certificaat is geldig, maar uw systeem heeft niet het benodigde basiscertificaat voor verificatie.
- het certificaat is zelfondertekend, b.v. in uw bedrijf en u moet het vertrouwen
- 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()