Utilizzo di un certificato SSL autofirmato per un repository APT interno basato su HTTPS


10

Ho creato un repository Debian (Ubuntu in realtà) per uso interno con alcuni pacchetti privati, e ora voglio renderlo disponibile sul web ad alcuni server specifici. Vorrei che apt-get / aptitude si connettesse ad esso tramite HTTPS, e poiché non voglio spendere soldi sto usando un certificato autofirmato.

Ho provato a seguire la pagina man apt.conf puntando apt-get per usare il mio certificato CA root per convalidare l'host, ma sembra non funzionare.

Il mio file apt.conf è simile al seguente:

#Acquire::https::repo.mydomain.com::Verify-Peer "false";
Acquire::https::repo.mydomain.com::CaInfo      "/etc/apt/certs/my-cacert.pem";
Acquire::https::repo.mydomain.com::SslCert     "/etc/apt/certs/my-cert.pem";
Acquire::https::repo.mydomain.com::SslKey      "/etc/apt/certs/my-key.pem";

Uso anche un certificato client, ma non sembra essere un problema perché quando imposto Verify-Peer su "false" (commentato sopra) tutto funziona.

Utilizzando lo stesso certificato CA, il certificato client e la chiave funzionano bene con l'arricciatura.

Ho abilitato il debug di apt (Debug :: Acquire :: https "true") ma offre pochissime informazioni.

Qualche suggerimento su come procedere?

Risposte:


5

Non utilizzo l'autenticazione client, ma solo HTTPS, ma l'ho solo fatto funzionare usando questo:

Acquire::https {
        Verify-Peer "false";
        Verify-Host "false";
}

Ho messo questo su un file sotto /etc/apt/apt.conf.d.


1
Questo è esattamente ciò che non voglio: voglio verificare il server usando il mio CA Cert. La disabilitazione della verifica funziona ma non voglio farlo a lungo termine.
Shevron,

5

Di recente ho riscontrato un problema simile. L'ho risolto aggiungendo l' SslForceVersionopzione.

La mia configurazione è come:

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

    CaInfo "/tmp/ca.crt";

    SslCert "/tmp/client.crt";
    SslKey  "/tmp/client.key";
    SslForceVersion "SSLv3";
};

2
Stai attento con questo. I siti Web stanno iniziando a disabilitare SSLv3 per vari motivi di sicurezza; in futuro funzionerà solo TLSv1 e versioni successive, e successivamente solo TLSv1.2 +
Michael Hampton,

3

In askubuntu , ho trovato una versione un po 'più semplice di questa soluzione e una che limitava l'opzione a un singolo host.

Acquire::https::mirror.ufs.ac.za::Verify-Peer "false";

Questo ha funzionato per me.

L'interrogante qui, tuttavia, voleva preservare l'autenticazione; Ho provato alcune cose seguendo le linee sopra, ma non sono riuscito a farlo funzionare. D'altra parte, poiché il mio repository è firmato e ho installato la chiave di firma, l'autenticazione SSL non è fondamentale per la sicurezza.


ancora una volta, non quello che voglio - io faccio la verifica bisogno peer. Detto questo, personalmente ho una configurazione funzionante (vedi la mia soluzione alternativa con stunnel). Questo può ancora aiutare gli altri.
Shevron,

3

L'ho risolto in un altro modo, installando il certificato ca.

  1. Copia il tuo *.crtfile in `/ usr / local / share / ca-certificati /
  2. correre sudo update-ca-certificates

Questa soluzione funziona almeno con Ubuntu 14.04.


1
Questo funziona anche attorno ai proxy che eseguono l'intercettazione / decrittazione SSL. La semplice aggiunta del certificato a / etc / ssl / certs non lo fa. Grazie per questo!
Jordan Anderson,

1
Non funziona perché il certificato installato da me è un certificato autofirmato dal nostro firewall. Non ho altri certificati.
Paul,

1

Spero che questo aiuti gli altri - non sono stato in grado di risolverlo direttamente.

Per ovviare a questo problema, ora sto usando stunnel4 per creare un tunnel per il mio repository HTTPS. Certi autofirmati e certificato del cliente ho lavorato molto bene con stunnel4.

Ho impostato Stunnel per l'ascolto su localhost: 8888 per le connessioni in entrata e le ho indirizzate al mio repository (repo.mydomain.com:443). Ho impostato apt per cercare il mio repository su http: // localhost: 8888 / .

Finora questo ha funzionato bene, anche se sembra un trucco inutile.


-1

GnuTLS o apt sembrano essere difettosi. Se il nome host dal mio apt sources.list non corrisponde a Apache ServerName dal mio server web repository, ottengo il seguente errore utilizzando TLSv1:

W: Impossibile recuperare https: //repo.example/debian/dists/unstable/non-free/binary-amd64/Packages : gnutls_handshake () non riuscito: è stato ricevuto un avviso TLS.

Usando SSLv3 tutto funziona bene.

Nota: questo non ha nulla a che fare con il certificato SSL. Un certificato non valido comporterebbe il seguente errore:

Err https: //repo1.example pacchetti i386 instabili / non liberi SSL: il nome soggetto certificato (repo.example) non corrisponde al nome host di destinazione 'repo1.example'


In realtà, questo è corretto: Apache supporta SNI e avvisa quando il nome host che riceve dal client non corrisponde al nome host configurato del server. Sarebbe bello se apt stampasse i dettagli dell'avviso, ma sta facendo la cosa giusta. Tornare a SSLv3 è molto poco saggio in questi giorni, e "funziona" solo perché stai disabilitando le funzionalità che dovresti davvero utilizzare.
djmitche,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.