Como alterar o backend SSL do libcurl de gnutls para openssl no servidor Ubuntu

7

Estou recebendo erros específicos no meu servidor Tornado durante o processamento de respostas SSL do Google OpenID. Uma das sugestões que recebi da lista de discussão da Tornado é tentar o back-end do OpenSSL em vez do gnutls. Mas não parece ser simples no servidor Ubuntu (11.10).

No servidor Ubuntu, gnutls é fornecido pelo libcurl3-gnutls package e o openssl curl support é fornecido pelo libcurl4-openssl-dev package. (Eu não sei porque o último é chamado de 4 e dev , mas não encontrei nenhum outro pacote openssl + curl na pesquisa do apt-cache).

Eu tinha libcurl3-gnutls instalado por padrão, mas não libcurl4-openssl-dev . Então instalei as instâncias posteriores e reiniciei o Torando. Mas isso não parece funcionar. Eu ainda tenho erros gnutls mesmo.

Encontrei discussões antigas sobre as listas de discussão sobre os problemas de suportar diferentes backends de SSL para libcurl, mas não achei exatamente como é feito hoje. Até agora, meu palpite é que o openssl é construído em libcurl e o gnutls é fornecido através de um pacote separado (isso explica por que não há libcurl3-openssl). Mas como eu faço libcurl para pegar backs openssl e não gnutls? Existe alguma opção na API libcurl / pycurl para fazer isso?

Eu tentei desinstalar libcurl3-gnutls , mas o apt-get solicitou que ele também removeria python-pycurl junto com ele. Então isso não serve.

    
por Jayesh 11.01.2012 / 12:36

4 respostas

4

Os pacotes -dev são os pacotes de desenvolvimento, eles contêm os cabeçalhos da biblioteca, usados para desenvolver e compilar programas que usam a biblioteca. Eles geralmente não são exigidos pelos pacotes binários de aplicativos (que já estão compilados). Instalar libcurl4-openssl-dev não é suficiente para fazer com que os pacotes binários que foram construídos em relação a libcurl3-gnutls usem o OpenSSL. Seria útil apenas para aplicativos que você compilasse novamente.

O pacote python-pycurl tem uma dependência direta em libcurl3-gnutls e libgnutls26 .

A menos que existam pacotes baseados em cURL para o Ubuntu compilados contra o OpenSSL em vez do GnuTLS em um repositório alternativo, você pode ter que construí-los você mesmo.

Isso pode ser feito, em princípio, fazendo o download da fonte ( apt-get source python-pycurl e pacotes relacionados). Você teria que ir para os arquivos de configuração de pacotes Debian e mudar as opções (geralmente passadas para o script configure que também configura o Makefile s antes da compilação) para mudar as opções de compilação, para usar o OpenSSL. Você também pode precisar alterar a descrição do pacote para limitar a interrupção a outros pacotes, talvez usando a diretiva provide: para dizer que seu pacote pode substituir o pacote do Ubuntu.

    
por 11.01.2012 / 12:53
7

Eu vi uma solução no rastreador de bugs do Debian .

Pensei em postar uma solução alternativa para as pessoas corrigirem o python-pycurl pacote-se.

sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/python-pycurl-openssl
cd ~/python-pycurl-openssl
sudo apt-get source python-pycurl
sudo apt-get build-dep python-pycurl
sudo apt-get install libcurl4-openssl-dev
dpkg-source -x pycurl_7.18.2-1.dsc
cd pycurl-7.18.2

Observação pycurl pode ter sido atualizado para que o nome não seja exatamente pycurl_7.18.2-1.dsc Edite o arquivo debian/control e substitua todas as ocorrências de libcurl4-gnutls-dev com libcurl4-openssl-dev

dpkg-buildpackage -rfakeroot -b
sudo dpkg -i ../python-pycurl_7.18.2-1_i386.deb

Para testar basta pular no interpretador e olhar para a versão.

Costumava dizer:

shell~# python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycurl
>>> pycurl.version
'libcurl/7.18.2 GnuTLS/2.4.2 zlib/1.2.3.3 libidn/1.8'

Agora ele dirá (se você fez tudo certo):

shell~# python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycurl
>>> pycurl.version
'libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.8 libssh2/0.18'

A razão pela qual a edição do arquivo debian / control funciona aqui é porque libcurl4-gnutls-dev e libcurl4-openssl-dev usam o arquivo /usr/bin/curl-config para construir seus pacotes. Um é para gnutls ambientes, enquanto o outro é para openssl.

    
por 02.06.2012 / 11:52
1

Remova o módulo pycurl e reinstale-o usando pip.

sudo pip install pycurl
    
por 05.08.2015 / 18:54
0

Pelo que entendi, o pacote libcurl3 deve oferecer suporte ao OpenSSL.

    
por 11.01.2012 / 12:52