2017-05-10 2 views
0

Je reçois des erreurs de vérification SSL lors de l'exécution d'appels sur un site SSL depuis la console rails (ou dans l'environnement rails en général).La vérification du certificat ssl de Rails a échoué après Rails.application.initialize

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed 

J'ai retracé le processus d'initialisation entière application des rails du début à la fin, allant de config.ru tout au long, ce qui nécessite des fichiers d'environnement, etc.

L'erreur SSL ne commence que se passe après que je lance Rails.application.initialize! J'ai purgé toutes les gemmes rubis du système et n'ai que celles installées à partir du Gemfile. Il est donc impossible d'avoir une version de gem différente avant/après le processus d'initialisation. Je sais que le correctif à court terme serait de définir mes appels HTTPS pour ne pas vérifier le certificat obtenu, mais cela n'est pas possible en raison de problèmes de sécurité dans l'environnement de production.

Le problème semble se rapporter à la SNI (Server Name Indication) étant donné que lorsque je lance

openssl s_client -connect sub.domain.com:443 -showcerts -servername sub.domain.com 

je reçois le CERT bon, mais quand je lance

openssl s_client -connect sub.domain.com:443 -showcerts 

je reçois un cert pour sub2.domain.com ce qui explique pourquoi la vérification échoue. Comment cela est-il modifié par le processus d'initialisation de Rails et si oui, existe-t-il une option pour indiquer aux rails d'utiliser SNI?

  • Rails v4.2.5.2
  • rubis 2.3.3p222 (révision 21.11.2016 56859) [x86_64 Linux]
  • OS: Fedora 25
  • ca-certificates-11/02/2017 -1.1.fc25_2017.2.14-1.0.fc25.noarch.drpm: fait
+0

SSL. Je ressens ta douleur. Avez-vous regardé cet outil: https://github.com/mislav/ssl-tools/blob/8b3dec4/doctor.rb - Je l'ai trouvé très utile (je ne suis en aucun cas lié au développeur). J'ai également trouvé ce poste particulièrement utile: http://stackoverflow.com/questions/36966650/ruby-nethttp-responds-with-opensslsslss-error-certificate-verify-failed/43769753#43769753. Bonne chance!!! – jvillian

+0

Merci, mais malheureusement, cela n'aide pas car le problème ici est le fait que le même appel ('HTTParty.get ('https: // ...')') fonctionne bien si exécuté dans un IRB, mais après une application rails initialise il donne cette erreur SSL. – Killerpixler

Répondre

0

en fin de compte, il n'a pas été un problème, mais un problème Rails de pierres précieuses google-api-client. Afin de travailler dans un environnement Windows, nous avons chargé le fichier cacerts.pem à partir de la gem API Google via un fichier d'initialisation.

config/initializers/ga.rb:

cert_path = Gem.loaded_specs['google-api-client'].full_gem_path+'/lib/cacerts.pem' 
ENV['SSL_CERT_FILE'] = cert_path 

Cela résout le fichier CA à

"/home/user/appname/vendor/bundle/ruby/2.3.0/gems/google-api-client-0.11.1/lib/cacerts.pem" 

Et cela ne prend pas en charge la SNI pour certificats SSL générés par LetsEncrypt.