J'ai utilisé RVM pour installer Ruby 1.9.3 sur Ubuntu 12.04 en faisant
rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr
Et puis, quand j'essaie de lancer quelque chose dans le sens de:
require 'open-uri'
open('https://www.google.com/')
J'ai l'erreur: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Comment résoudre ce problème? J'ai beaucoup de threads similaires où les gens ont ce problème dans OSX, mais comment puis-je le résoudre dans Ubuntu?
Merci de votre aide.
Cela se produit parfois si le "répertoire OpenSSL" par défaut n'est pas défini correctement avec la bibliothèque OpenSSL native. open-uri utilise OpenSSL::X509::Store#set_default_paths
afin d'indiquer à OpenSSL de rechercher dans le répertoire OpenSSL le fichier contenant les certificats racine de confiance approuvés par OpenSSL.
Dans votre cas, cette recherche échoue. Vous pouvez y parvenir en définissant une variable d'environnement qui remplace le paramètre par défaut et en ordonnant à OpenSSL de rechercher dans ce répertoire:
export SSL_CERT_FILE=/etc/pki/tls/cert.pem
C’est l’emplacement par défaut de l’ensemble d’autorités de certification racine sur mon Fedora 16 64 bits. Les autres emplacements populaires sont /etc/ssl/ca-bundle.crt etc. vous devez donc rechercher un candidat approprié pour le fichier d’autorité de certification racine par défaut. Une fois la variable d’environnement définie correctement, l’appel à open-uri aboutira.
Pour rendre la variable d'environnement permanente, utilisez les méthodes habituelles, telles que la définition de l'exportation dans .bashrc,/etc/profile ou tout ce qui convient le mieux à votre situation.
Le fichier cacert.pem est manquant dans OpenSl installé par rvm.
$ cd $rvm_path/usr/ssl
$ Sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ Sudo mv cacert.pem cert.pem
Ajoutez la gemme «certifiée» à votre Gemfile.
Plus d'infos: https://rubygems.org/gems/certified
Voir http://jjinux.blogspot.nl/2012/02/Ruby-working-around-ssl-errors-on-os-x.html comme réponse alternative à votre question, cela devrait fonctionner pour Ubuntu Mac OS X et n’exige pas de modification des variables d’environnement.
La solution du lien ci-dessus:
# config/initializers/fix_ssl.rb
#
# Work around errors that look like:
#
# SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
require 'open-uri'
require 'net/https'
module Net
class HTTP
alias_method :original_use_ssl=, :use_ssl=
def use_ssl=(flag)
# Ubuntu
if File.exists?('/etc/ssl/certs')
self.ca_path = '/etc/ssl/certs'
# MacPorts on OS X
# You'll need to run: Sudo port install curl-ca-bundle
elsif File.exists?('/opt/local/share/curl/curl-ca-bundle.crt')
self.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
end
self.verify_mode = OpenSSL::SSL::VERIFY_PEER
self.original_use_ssl = flag
end
end
end
Hit cette erreur sur une machine virtuelle après une longue période (1 semaine) sans utilisation. La mise à jour de mon horloge système a résolu le problème immédiatement.
Si vous utilisez ntpd
, ntpdate -b -u pool.ntp.org
le fera pour vous.
Cela a maintenant fonctionné pour moi. Les choses ont commencé à fonctionner quand j'ai lancé "brassage de médecin", ce qui m'a conduit à des indices comme "unset SSL_CERT_DIR"