2009-10-12 4 views
3

J'essaie d'utiliser le support de SOAP Ruby comme suit:Comment puis-je dire à la bibliothèque OpenSSL de Ruby d'ignorer une erreur de certificat auto-signée?

SERVICE_URL = 'https://...' 
... 
def create_driver 
    ::SOAP::WSDLDriverFactory.new(SERVICE_URL).create_rpc_driver 
    driver.options['protocol.http.ssl_config.verify_mode'] = OpenSSL::SSL::VERIFY_NONE 
    driver.options['protocol.http.ssl_config.client_cert'] = @certificate_path 
    driver 
end 

mais l'appel à new(SERVICE_URL) souffle avec "OpenSSL::SSL::SSLError: certificate verify failed." Comment puis-je faire l'équivalent de driver.options['protocol.http.ssl_config.verify_mode'] = OpenSSL::SSL::VERIFY_NONE pour le premier appel pour récupérer le WSDL lui-même?

Répondre

4

je mets un fichier appelé "soap/property" sur mon chemin de charge, par exemple:

- lib/ 
    - foo.rb 
    - foo/ 
     - bar.rb 
    - soap/ 
     - property 

Et mettre cela dans le fichier:

client.protocol.http.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE 

Sinon, si vous avez plusieurs paramètres avec le même préfixe, vous pouvez utiliser la syntaxe du groupe:

[client.protocol.http] 
ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE 
... 
0

essayez ceci:

... 
    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
    ::SOAP::WSDLDriverFactory.new(SERVICE_URL).create_rpc_driver 
... 
+1

Vous dites que je redéfinis 'VERIFY_PEER' pour être la valeur de' VERIFY_NONE'? C'est risqué car je ne peux pas être certain que le code de vérification de la méthode de vérification vérifie la valeur de VERIFY_NONE ou de VERIFY_PEER. Redéfinir les constantes est un dernier recours absolu. –

+0

merci Gaius. c'est assez sournois, tu as raison. – avguchenko

+0

Je dois dire, cependant, que ça * va * marcher. C'est peut-être un dernier recours parce que c'est sournois, mais si tout le reste échoue ... –

Questions connexes