problemas ao obter o apt-get para trabalhar com https

3

Eu tenho uma configuração do repositório apt (privada) em um servidor. Estou permitindo apenas o acesso a este repositório por SSL e somente com um certificado de cliente. Eu testei a conexão usando o curl:

$ curl --cacert /opt/CA.crt --cert /opt/user.crt --key /opt/user.key --pass 1234 https://example.com/dists/lucid/main/binary-amd64/Packages.gz

O conteúdo é baixado como esperado.

Eu criei um arquivo em /etc/apt/apt.conf.d/45example-com com

Debug::Acquire::https "true";

Acquire::https::example.com {
    Verify-Peer "true";
    Verify-Host "true";

    CaInfo "/opt/CA.crt";

    SslCert "/opt/user.crt";
    SslKey  "/opt/user.key";
};

Eu adicionei um arquivo em /etc/apt/sources.list.d/example.com.list com:

deb https://example.com/ lucid main

Parece haver um problema com o certificado de CA, quando tento uma atualização recebo o seguinte:

# apt-get update
* Connected to example.com (8.0.0.8) port 443 (#0)
* found 1 certificates in /opt/CA.crt
* error reading X.509 key or certificate file
* Closing connection #0

Os logs do servidor em example.com mostram que nenhuma solicitação chegou lá, então acho que o apt-get está falhando antes de tentar enviar a solicitação (que corresponde ao que o log diz).

Eu tive dificuldade em encontrar qualquer documentação sobre o apt-get com o ssl nas interwebs, e nem consegui encontrar o código-fonte.

Alguém tem alguma ideia?

    
por AEE 21.07.2012 / 04:28

2 respostas

2

Após algumas pesquisas, tenho uma ideia melhor do que está acontecendo (mas ainda não há solução).

Eu encontrei o código-fonte do apt no link . Ele usa libcurl para ssl, que por sua vez usa gntls.

A mensagem de erro vem do libcurl e está reclamando sobre a chave / senha, não o certificado da CA. A linha:

* found 1 certificates in /opt/CA.crt

está dizendo que o CA.crt foi carregado corretamente. A mensagem de erro é a seguinte:

if(gnutls_certificate_set_x509_key_file(
     conn->ssl[sockindex].cred,
     data->set.str[STRING_CERT],
     data->set.str[STRING_KEY] ?
     data->set.str[STRING_KEY] : data->set.str[STRING_CERT],
     do_file_type(data->set.str[STRING_CERT_TYPE]) ) !=
   GNUTLS_E_SUCCESS) {
  failf(data, "error reading X.509 key or certificate file");
  return CURLE_SSL_CONNECT_ERROR;
}

(De gtls.c em link )

O problema está na senha associada a essa chave. Eu tirei a senha da chave usando:

$ openssl rsa -in user.key -out user-nopasswd.key

Isso não é ideal, mas parece funcionar.

    
por AEE 23.07.2012 / 21:31
0

Um problema que tive ao tentar obter o apt-get para executar o https foi que para a opção SslCert você não pode usar um arquivo .pem como apt-get não reconhecerá isso como um formato válido para uso com a conexão ao seu repositório. Eu tenho um auto-assinado .pem que eu uso para se conectar ao meu servidor e está em um formato .pem é por isso que eu tentei usá-lo.

A solução foi simplesmente dividir o .pem nos arquivos corretos a .crt e um .key e apt-get conectados com sucesso.

TLDR: divida seu arquivo .pem em um .crt e um .key e ele funcionará .

    
por ihatecache 18.12.2015 / 16:35