Não é possível instalar nenhuma gema ruby no Mac OS - erro SSL_connect
Meu ambiente é o Mac OS 10.10.5, a versão ruby 2.2.4 (ou 2.2.2 ou 2.2.0) gem (após a atualização) é 2.6.7, rvm versão 1.27.0.
Isso tem várias duplicatas, mesmo nos últimos dias, mas é mais informação do que posso colocar em um comentário.
Ao instalar qualquer gema em qualquer versão do ruby, recebo o seguinte:
$ gem install bundler
ERROR: Could not find a valid gem 'bundler' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
Há muitas informações disponíveis sobre isso, principalmente para problemas no Windows. Vejohttp://guides.rubygems.org/ssl-certificate-update/ para a solução proposta. Sigo isso, mas continuo recebendo o mesmo erro.
O problema parece estar na obtenção do arquivo GlobalSignRootCA.pem no local apropriado, o que não está totalmente claro. O link acima explica como encontrar o diretório ssl_certs apropriado, dos quais existem 2 no meu sistema, mas nenhum deles funciona.
Eu esqueço onde aprendi o seguinte:
$ ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_DIR'
/etc/openssl/certs
$ ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'
/etc/openssl/cert.pem
que pode ter dado uma dica, mas anexar o arquivo .pem ao último ou copiar para o primeiro não tem efeito.
Quando reinstalo o openssl (homebrew), ele é útil para me dizer:
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/openssl/bin/c_rehash
mas isso também não resolve o problema.
De outra pergunta SO:
rvm osx-ssl-certs update all
não funciona Nem faz:
security find-certificate -a -p /Library/Keychains/System.keychain > "$cert_file"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$cert_file"
Alguém sabe como entender o que rubygems espera aqui? Onde ele quer esse arquivo ou é mesmo o arquivo que ele quer? Devo importar o arquivo .pem para o chaveiro OSX? Como é que alguém faz isso?
Ou existe uma maneira de obter o arquivo gem e instalá-lo localmente? rubygems faz isso de maneira útil para as próprias rubygems, mas não para as gemas individuais, pelo que sei.
-- Gambiarra
Ok - a resposta para a pergunta de onde obter a gema: vá parahttps://rubygems.org/gems/[package name]
selecione uma versão e vá para o download - atualmente em links no lado direito. Faça o download do arquivo egem install --local [downloaded gem file]
. Além de todas as dependências.
Para automatizar:
# start by adding insecure source for --explain - thanks to @tnum
gem source -a http://rubygems.org/
while read x
do
wget https://rubygems.org/downloads/$x.gem
gem install --local $x.gem
rm $x.gem
done < <(gem install --explain [package name] | grep "^ ")
# remove insecure source
gem source -r http://rubygems.org/
Parte da falta de segurança pode ser atenuada por um melhor regex grep, mas ainda é inseguro. Observe quewget https://
funciona, então o problema do ssl é definitivamente com rubygems.