Subject: Re: bug#24466: `guix download` accepts expired TLS certificates

From: [email-masked] (Ludovic Courtès)
Date: Mon, 07 Nov 2016 23:45:23 +0100

Leo Famulari <[email-masked]> skribis:

> While testing Nicolas's patch "Update giac-xcas", I found that `guix
> download` accepts expired TLS certificates.
>
> I tried visiting the upstream site in order to verify the hash of the
> updated package, and my browsers (Firefox and Chromium) warned me that
> the site's certificate had expired ~1 day ago.
>
> However, `guix build -S` did not warn me or prevent me from downloading
> the source code.
>
> Perhaps it doesn't matter for the case of `guix build -S`, since we
> already know what we expect to download. But, for `guix download`, this
> is a bug.

This is fixed by commit bc3c41ce36349ed4ec758c70b48a7059e363043a.

Now ‘guix download’ shows a message like this upon failure:

--8<---------------cut here---------------start------------->8---
$ SSL_CERT_DIR=/nowhere ./pre-inst-env guix download https://mirror.guixsd.org/index.html

Starting download of /tmp/guix-file.jT2WjA
>From https://mirror.guixsd.org/index.html...
ERROR: X.509 certificate of 'mirror.guixsd.org' could not be verified:
  signer-not-found
  invalid

failed to download "/tmp/guix-file.jT2WjA" from "https://mirror.guixsd.org/index.html"
--8<---------------cut here---------------end--------------->8---

The message is not optimal, but it convey the message that something is
wrong.

For fixed-output derivations (‘guix build -S’, etc.), the behavior is
unchanged: server certificates are happily ignored.  This is IMO the
right thing because (1) we know the hash of the expected content, which
is the only authentication method that matters, and (2) checking
certificates would require having fixed-output derivations depend on
‘nss’.

Thanks,
Ludo’.