On Wed, Jul 12, 2017 at 07:45:36AM +0200, Christian Barthel wrote:
> Hi,
>
> earlier this year, jca@ worked on support for DNSSEC and the EDNS0
> extension [1] and committed this work at [2] (thanks!). I tried this
> with SSHFP records to check authenticity of hosts with DNSSEC; but ssh
> reported that the hostkey fingerprints were insecure.
>
> I am using this configuration file:
>
> # cat /etc/resolv.conf
> nameserver 8.8.8.8
> options edns0
>
> And ssh reports the following:
>
> $ ssh -o VerifyHostKeyDNS=yes -vvvv doamin_with_sshpf_dnssec
> ...
> debug3: verify_host_key_dns
> debug1: found 8 insecure fingerprints in DNS
> debug1: matching host key fingerprint found in DNS
> The authenticity of host 'xxxxxxxxxxx (xxxxxxxxxxxx)' can't be established.
> ECDSA key fingerprint is ....
> Matching host key fingerprint found in DNS.
> Are you sure you want to continue connecting (yes/no)?
> ...
>
> I tried to find out why and after going through the asr code, I found
> the following:
>
> Index: lib/libc/asr/res_send_async.c
> ===================================================================
> RCS file: /cvs/src/lib/libc/asr/res_send_async.c,v
> retrieving revision 1.36
> diff -u -p -r1.36 res_send_async.c
> --- lib/libc/asr/res_send_async.c 15 Mar 2017 15:54:41 -0000 1.36
> +++ lib/libc/asr/res_send_async.c 11 Jul 2017 20:09:59 -0000
> @@ -385,7 +385,7 @@ setup_query(struct asr_query *as, const
> _asr_pack_query(&p, type, class, dname);
> if (as->as_ctx->ac_options & (RES_USE_EDNS0 | RES_USE_DNSSEC))
> _asr_pack_edns0(&p, MAXPACKETSZ,
> - as->as_ctx->ac_options & RES_USE_DNSSEC);
> + as->as_ctx->ac_options & (RES_USE_EDNS0 | RES_USE_DNSSEC));
> if (p.err) {
> DPRINT("error packing query");
> errno = EINVAL;
The current code is correct, RES_USE_EDNS0 does not imply RES_USE_DNSSEC.
The real problem is that there is no resolv.conf option for RES_USE_DNSSEC.
It can only be set in user code by tweaking _res.options.
Eric.