A partir de hoje (ou nos últimos dias), acertei um erro SSL ao tentar se conectar ao github.com (por exemplo, para clonar um repositório).
Este é um servidor legado que executa o Red Hat 4.1.2-33.
Veja o que parece quando tento me conectar:
$ curl https://www.github.com --verbose
* About to connect() to www.github.com port 443 (#0)
* Trying 192.30.252.130... connected
* Connected to www.github.com (192.30.252.130) port 443 (#0)
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* NSS error -12286
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error
Eu posso ver em esta página que o NSS código de erro é:
"Cannot communicate securely with peer: no common encryption
algorithm(s)."
The local and remote systems share no cipher suites in common. This
can be due to a misconfiguration at either end. It can be due to a
server being misconfigured to use a non-RSA certificate with the RSA
key exchange algorithm.
Se eu estou colocando isso completamente correto, parece que o github.com tem um certificado SSL atualizado recentemente e meu servidor não tem um conjunto de cifras compatível com ele. Este é um servidor legado, então não estou tão surpreso.
Eu tentei yum update nss
(desde que o que o curl parece estar usando), bem como yum update openssl
, mas nenhum desses pacotes foi atualizado.
Eu também tentei seguir o esquema de procedimentos aqui mas sem sucesso.
Estou meio que batendo na parede com o meu conhecimento de como os handshakes TLS funcionam para solucionar problemas ainda mais profundos. Alguém tem alguma boa idéia sobre como começar a cavar mais fundo e descobrir o que está errado e onde eu preciso atualizar as coisas? A atualização do sistema operacional não é, por enquanto, uma opção.
Atualizar
Continuando, parece ser um problema com o libcurl e com a cifra que ele está usando ao se conectar ao github.com via git. Eu posso fazer o curl funcionar se eu especificar explicitamente uma cifra compatível:
$ curl https://github.com --cipher rsa_aes_128_sha
E posso até adicionar o parâmetro --cipher rsa_aes_128_sha
a um arquivo .curlrc e usar o curl que usa cifra por padrão. Infelizmente, isso não parece ser captado pelo comando git, então não me levou a lugar nenhum ... nem poderia encontrar uma maneira alternativa de especificar a cifra. É assim que o resultado de um git pull
detalhado se parece em um repositório github.com:
$ GIT_CURL_VERBOSE=1 git pull
* Couldn't find host github.com in the .netrc file, using defaults
* About to connect() to github.com port 443 (#0)
* Trying 192.30.252.129... * Connected to github.com (192.30.252.129) port 443 (#0)
* CAfile: /root/certs/cacert.pem
CApath: none
* NSS error -12286
* Expire cleared
* Closing connection #0
* Couldn't find host github.com in the .netrc file, using defaults
* About to connect() to github.com port 443 (#0)
* Trying 192.30.252.129... * Connected to github.com (192.30.252.129) port 443 (#0)
* CAfile: /root/certs/cacert.pem
CApath: none
* NSS error -12286
* Expire cleared
* Closing connection #0
error: SSL connect error while accessing https://github.com/twbs/bootstrap.git/info/refs
fatal: HTTP request failed
Isso pode ser um beco sem saída ... parece que esse cara no StackOverflow correu para o exatamente o mesmo problema .