Re: [dane] Two additions to draft-york-dane-deployment-observations-00

Viktor Dukhovni <ietf-dane@dukhovni.org> Mon, 10 November 2014 08:53 UTC

Return-Path: <ietf-dane@dukhovni.org>
X-Original-To: dane@ietfa.amsl.com
Delivered-To: dane@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 07F8F1A898C for <dane@ietfa.amsl.com>; Mon, 10 Nov 2014 00:53:10 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.7
X-Spam-Level:
X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, J_CHICKENPOX_41=0.6, J_CHICKENPOX_65=0.6] autolearn=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2AZUR2ZUg-x8 for <dane@ietfa.amsl.com>; Mon, 10 Nov 2014 00:53:08 -0800 (PST)
Received: from mournblade.imrryr.org (mournblade.imrryr.org [38.117.134.19]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5DAD01A894A for <dane@ietf.org>; Mon, 10 Nov 2014 00:53:06 -0800 (PST)
Received: by mournblade.imrryr.org (Postfix, from userid 1034) id F41042AB109; Mon, 10 Nov 2014 08:53:03 +0000 (UTC)
Date: Mon, 10 Nov 2014 08:53:03 +0000
From: Viktor Dukhovni <ietf-dane@dukhovni.org>
To: dane@ietf.org
Message-ID: <20141110085303.GS161@mournblade.imrryr.org>
References: <20141107232915.GA31913@laperouse.bortzmeyer.org> <6DB8CC95-E47A-4C0B-BC0B-7D9A4F8F65B5@edvina.net> <20141109035925.GA20946@laperouse.bortzmeyer.org> <alpine.LFD.2.10.1411100035410.11243@bofh.nohats.ca>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="zS7rBR6csb6tI2e1"
Content-Disposition: inline
In-Reply-To: <alpine.LFD.2.10.1411100035410.11243@bofh.nohats.ca>
User-Agent: Mutt/1.5.23 (2014-03-12)
Archived-At: http://mailarchive.ietf.org/arch/msg/dane/2Hw2djM5uQRm1Zay1qDmFKH48zY
Subject: Re: [dane] Two additions to draft-york-dane-deployment-observations-00
X-BeenThere: dane@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
Reply-To: dane@ietf.org
List-Id: DNS-based Authentication of Named Entities <dane.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dane>, <mailto:dane-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/dane/>
List-Post: <mailto:dane@ietf.org>
List-Help: <mailto:dane-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dane>, <mailto:dane-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 10 Nov 2014 08:53:10 -0000

On Mon, Nov 10, 2014 at 12:36:41AM -0500, Paul Wouters wrote:

[
  Speaking of deploy360, nobody is regularly testing the listed
  sites at:

    http://www.internetsociety.org/deploy360/resources/dane-test-sites/

  For example, https://www.statdns.net/ no longer matches its
  TLSA record, presumably after key rotation without a TLSA RR
  update, since its certificate digest is different from the
  content of the "3 0 1" associated data.
]

> https://www.dnssec-validator.cz/
> 
> DNSSEC/TLSA Validator is a web browser add-on which allows you to check
> the existence and validity of DNS Security Extensions (DNSSEC) records
> and Transport Layer Security Association (TLSA) records related to
> domain names. Results of these checks are displayed by using icons and
> information texts in the page?s address-bar or browser tool-bar.
> Currently, Internet Explorer (IE), Mozilla Firefox (MF), Google
> Chrome/Chromium (GC), Opera (OP), Apple Safari (AS) are supported.

Browser plugins are a bit tricky to script.  For scriptable code:

    $ git clone https://github.com/vdukhovni/ssl_dane
    $ git checkout wip-perl-module
    $ : edit Makefile if platform is not Linux
    $ make
    $ sudo make install

    $ cd Danessl
    $ : edit Makefile.PL if platform is not Linux
    $ perl Makefile.PL
    $ make
    $ sudo make install

With the library and Perl module installed, the attached perl code
can be used as shown in the shell fragment below:

    #! /bin/sh

    # At least one of SSL_CERT_FILE or SSL_CERT_DIR
    # must be set to a suitable cert store for PKIX-TA
    # and PKIX-EE to work.  The OpenSSL built-in defaults
    # are disabled by ssldane.pl, you must elect them
    # explicitly.
    #
    export SSL_CERT_FILE=/etc/ssl/...	# multi-cert CAfile
    export SSL_CERT_DIR=/etc/ssl/...	# hashed CApath

    test_site() {
	echo "--- Testing $1..."
	perl ./ssldane.pl "$@"
	echo "--- Exit code: $?"
	echo
    }

    for site in good bad-hash bad-params bad-sig
    do
	test_site $site.dane.verisignlabs.com 443
    done

Note, the code requires a loopback (127.0.0.1) resolver that is a
DNSSEC validating resolver (unbound is a good choice).  Though for
testing you can edit ssldane.pl and specify some other resolver
address near the top of the file.

Sample output:

    --- Testing good.dane.verisignlabs.com...
    ;; Passed(depth 0): good.dane.verisignlabs.com. IN TLSA 3 0 1 0332aa2d58b3e0544b65656438937068ba44ce2f14469c4f50c9cc6933c808d3
    --- Exit code: 0

    --- Testing bad-hash.dane.verisignlabs.com...
    ;; Failed: bad-hash.dane.verisignlabs.com. IN TLSA 3 0 1 9999999999999999999999999999999999999999999999999999999999999999: unable to get local issuer certificate: (20)
    --- Exit code: 1

    --- Testing bad-params.dane.verisignlabs.com...
    ;; Failed: bad-params.dane.verisignlabs.com. IN TLSA 3 0 17 0332aa2d58b3e0544b65656438937068ba44ce2f14469c4f50c9cc6933c808d3: error processing TLSA RR
    ;; Failed: bad-params.dane.verisignlabs.com. IN TLSA 3 119 1 0332aa2d58b3e0544b65656438937068ba44ce2f14469c4f50c9cc6933c808d3: error processing TLSA RR
    ;; Failed: bad-params.dane.verisignlabs.com. IN TLSA 51 0 1 0332aa2d58b3e0544b65656438937068ba44ce2f14469c4f50c9cc6933c808d3: error processing TLSA RR
    --- Exit code: 1

    --- Testing bad-sig.dane.verisignlabs.com...
    DNS Lookup failed: bad-sig.dane.verisignlabs.com IN A ?: SERVFAIL
    --- Exit code: 255

Digest agility support is not yet a feature of the underlying C
library.  So it should be added to the script, until the library
support is in place.  That's a TODO.

-- 
	Viktor.

P.S.  Your Net::SSLeay Perl module needs to be quite recent, get
a newer one from CPAN if it does not understand the get_peer_cert_chain()
method.

The "Danessl.pm" Perl module is still in early development.  Use
at your own risk, no support or documentation beyond RTFS.

The module code assumes (for no particular reason) that Perl is at
least 5.12.5, likely earlier versions work too, adjust as necessary.