Certificado de cliente SSL do Apt-get não está funcionando no 16.04 (Erro ao ler o arquivo)

2

Eu portei a mesma chave / certificado de cliente SSL e a regra /etc/apt/apt.conf.d/01_https_client_cert de uma VM 14.04 (funcional) para uma nova instalação 16.04.

Eu posso usar o certificado de cliente SSL para acessar o repositório do apt via curl , mas apt-get update reclama com este erro:

6% [Working]* Hostname example.com was found in DNS cache
*   Trying 11.22.33.44...
* Connected to example.com (11.22.33.44) port 443 (#29)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 697 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* error reading X.509 key or certificate file: Error while reading file.
* Closing connection 29
Ign:5 https://example.com/apt release/main all Packages

/etc/apt/apt.conf.d/01_ssl_client_auth é o mesmo em ambos os sistemas:

Debug::Acquire::https "true";
Acquire::https::example.com::SslCert "/opt/example/keyring/ssl_client.crt";
Acquire::https::example.com::SslKey "/opt/example/keyring/ssl_client.key";

As permissões são as mesmas nas duas máquinas:

ubuntu@ubuntu:~$ namei -mo /opt/example/keyring/ssl_client.crt
f: /opt/example/keyring/ssl_client.crt
 drwxr-xr-x root    root    /
 drwxr-sr-x ubuntu ubuntu opt
 drwxrwsr-x ubuntu ubuntu example
 drwxrws--- ubuntu ubuntu keyring
 -rw-rw---- ubuntu ubuntu ssl_client.crt

Curiosidades:

  1. A remoção da regra 01_ssl_client_auth devolve a resposta esperada 403 proibida (como repo requer certificado de cliente)

  2. curl funciona bem assim:

    curl --cert /opt/example/keyring/ssl_client.crt --key /opt/example/keyring/ssl_client.key https://example.com/apt/
    
    Connected to example.com (11.22.33.44) port 443 (#0)
    found 173 certificates in /etc/ssl/certs/ca-certificates.crt
    found 697 certificates in /etc/ssl/certs
    ALPN, offering http/1.1
    SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
         server certificate verification OK
         server certificate status verification SKIPPED
         common name: *.example.com (matched)
         server certificate expiration date OK
         server certificate activation date OK
         certificate public key: RSA
           (snip)
    ALPN, server did not agree to a protocol
    GET /apt/ HTTP/1.1
    Host: example.com
    User-Agent: curl/7.47.0
    Accept: */*
    
    HTTP/1.1 200 OK
    Server: nginx/1.4.6 (Ubuntu)
    Date: Wed, 18 May 2016 01:18:30 GMT
    Content-Type: text/html
    Transfer-Encoding: chunked
    Connection: keep-alive
    
  3. E é claro que apt-get e curl funcionam no sistema original com o mesmo apt.conf.d e cert ...

Mais alguma coisa que eu deveria olhar? Houve alguma mudança de crt / key para pem no apt-get ou algo assim?

    
por summerhat83 18.05.2016 / 03:33

2 respostas

1

O Apt tenta eliminar permissões e executar como o usuário _apt . Não me lembro de quando essa mudança aconteceu, mas foi bastante recente (ou seja, provavelmente após 14.04). Então, tendo corrigido meu problema semelhante da mesma forma que você fez (ou seja, garantiu que a+rx estivesse disponível em todos os diretórios que levavam ao certificado que eu queria que _apt usasse) Eu acho que é seguro dizer que você identificou o problema corretamente.

    
por frrisus 25.07.2016 / 15:35
0

Você deve encontrar mais detalhes no link

As configurações recomendadas são copiar o certificado e as chaves para um diretório diferente e alterar as permissões do usuário para

  

_apt: nogroup

e configure

  

apt_transport_https

configuração para usar o novo caminho.

Acquire::https::cdn-mirror.insnw.net::CaInfo "/new/path/ca.crt";
Acquire::https::cdn-mirror.insnw.net::SslCert "/new/path.crt";
Acquire::https::cdn-mirror.insnw.net::SslKey  "/new/path.key"";
    
por davidls 24.01.2018 / 23:38