mirror of
https://github.com/NixOS/nix.git
synced 2024-11-26 16:52:27 +00:00
0fdf4da0e9
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.
44 lines
1.4 KiB
Makefile
44 lines
1.4 KiB
Makefile
%: %.in Makefile
|
|
sed \
|
|
-e "s^@abs_top_srcdir\@^$(abs_top_srcdir)^g" \
|
|
-e "s^@abs_top_builddir\@^$(abs_top_builddir)^g" \
|
|
-e "s^@extra1\@^$(extra1)^g" \
|
|
-e "s^@prefix\@^$(prefix)^g" \
|
|
-e "s^@bindir\@^$(bindir)^g" \
|
|
-e "s^@datadir\@^$(datadir)^g" \
|
|
-e "s^@sysconfdir\@^$(sysconfdir)^g" \
|
|
-e "s^@profiledir\@^$(profiledir)^g" \
|
|
-e "s^@localstatedir\@^$(localstatedir)^g" \
|
|
-e "s^@datadir\@^$(datadir)^g" \
|
|
-e "s^@libdir\@^$(libdir)^g" \
|
|
-e "s^@libexecdir\@^$(libexecdir)^g" \
|
|
-e "s^@storedir\@^$(storedir)^g" \
|
|
-e "s^@system\@^$(system)^g" \
|
|
-e "s^@shell\@^$(bash)^g" \
|
|
-e "s^@curl\@^$(curl)^g" \
|
|
-e "s^@bzip2\@^$(bzip2)^g" \
|
|
-e "s^@xz\@^$(xz)^g" \
|
|
-e "s^@perl\@^$(perl)^g" \
|
|
-e "s^@perlFlags\@^$(perlFlags)^g" \
|
|
-e "s^@coreutils\@^$(coreutils)^g" \
|
|
-e "s^@sed\@^$(sed)^g" \
|
|
-e "s^@tar\@^$(tar)^g" \
|
|
-e "s^@tarFlags\@^$(tarFlags)^g" \
|
|
-e "s^@gzip\@^$(gzip)^g" \
|
|
-e "s^@pv\@^$(pv)^g" \
|
|
-e "s^@tr\@^$(tr)^g" \
|
|
-e "s^@dot\@^$(dot)^g" \
|
|
-e "s^@xmllint\@^$(xmllint)^g" \
|
|
-e "s^@xmlflags\@^$(xmlflags)^g" \
|
|
-e "s^@xsltproc\@^$(xsltproc)^g" \
|
|
-e "s^@sqlite_bin\@^$(sqlite_bin)^g" \
|
|
-e "s^@version\@^$(VERSION)^g" \
|
|
-e "s^@perlbindings\@^$(perlbindings)^g" \
|
|
-e "s^@testPath\@^$(coreutils):$$(dirname $$(type -p expr))^g" \
|
|
-e "s^@openssl\@^$(openssl_prog)^g" \
|
|
< $< > $@ || rm $@
|
|
if test -x $<; then chmod +x $@; fi
|
|
|
|
$(CONFIG_HEADER):
|
|
true
|