lix/tests
Eelco Dolstra 0fdf4da0e9 Support cryptographically signed binary caches
NAR info files in binary caches can now have a cryptographic signature
that Nix will verify before using the corresponding NAR file.

To create a private/public key pair for signing and verifying a binary
cache, do:

  $ openssl genrsa -out ./cache-key.sec 2048
  $ openssl rsa -in ./cache-key.sec -pubout > ./cache-key.pub

You should also come up with a symbolic name for the key, such as
"cache.example.org-1".  This will be used by clients to look up the
public key.  (It's a good idea to number keys, in case you ever need
to revoke/replace one.)

To create a binary cache signed with the private key:

  $ nix-push --dest /path/to/binary-cache --key ./cache-key.sec --key-name cache.example.org-1

The public key (cache-key.pub) should be distributed to the clients.
They should have a nix.conf should contain something like:

  signed-binary-caches = *
  binary-cache-public-key-cache.example.org-1 = /path/to/cache-key.pub

If all works well, then if Nix fetches something from the signed
binary cache, you will see a message like:

  *** Downloading ‘http://cache.example.org/nar/7dppcj5sc1nda7l54rjc0g5l1hamj09j-subversion-1.7.11’ (signed by ‘cache.example.org-1’) to ‘/nix/store/7dppcj5sc1nda7l54rjc0g5l1hamj09j-subversion-1.7.11’...

On the other hand, if the signature is wrong, you get a message like

  NAR info file `http://cache.example.org/7dppcj5sc1nda7l54rjc0g5l1hamj09j.narinfo' has an invalid signature; ignoring

Signatures are implemented as a single line appended to the NAR info
file, which looks like this:

  Signature: 1;cache.example.org-1;HQ9Xzyanq9iV...muQ==

Thus the signature has 3 fields: a version (currently "1"), the ID of
key, and the base64-encoded signature of the SHA-256 hash of the
contents of the NAR info file up to but not including the Signature
line.

Issue #75.
2014-01-08 15:42:53 +01:00
..
lang
add.sh
binary-cache.sh
binary-patching.nix
binary-patching.sh
build-hook.hook.sh
build-hook.nix
build-hook.sh
check-refs.nix
check-refs.sh
common.sh.in
config.nix.in
dependencies.builder0.sh
dependencies.builder1.sh
dependencies.builder2.sh
dependencies.nix
dependencies.sh
export-graph.nix
export-graph.sh
export.sh
fallback.sh
fetchurl.nix
fetchurl.sh
filter-source.nix
filter-source.sh
fixed.builder1.sh
fixed.builder2.sh
fixed.nix
fixed.sh
gc-concurrent.builder.sh
gc-concurrent.nix
gc-concurrent.sh
gc-concurrent2.builder.sh
gc-runtime.nix
gc-runtime.sh
gc.sh
hash-check.nix
hash.sh
import-derivation.nix
import-derivation.sh
init.sh
install-package.sh
lang.sh
logging.sh
Makefile.am
misc.sh
multiple-outputs.nix
multiple-outputs.sh
negative-caching.nix
negative-caching.sh
nix-build.sh
nix-channel.sh
nix-copy-closure.nix
nix-profile.sh
nix-pull.sh
nix-push.sh
optimise-store.sh
parallel.builder.sh
parallel.nix
parallel.sh
referrers.sh
remote-builds.nix
remote-store.sh
secure-drv-outputs.nix
secure-drv-outputs.sh
simple.builder.sh
simple.nix
simple.sh
substituter.sh
substituter2.sh
substitutes.sh
substitutes2.sh
timeout.builder.sh
timeout.nix
timeout.sh
user-envs.builder.sh
user-envs.nix
user-envs.sh
verify.sh