"known in advance" public key authentication?

Ivan Shmakov oneingray at gmail.com
Sun Nov 11 15:59:34 CET 2012


>>>>> Nikos Mavrogiannopoulos <nmav at gnutls.org> writes:
>>>>> On 11/07/2012 05:32 PM, Ivan Shmakov wrote:

[…]

 >> To put it short, the application in question uses “self-certified
 >> identifiers”; i. e., the public key /is/ the identifier of the peer.
 >> Thus, there doesn't seem to be any reason whatsoever to sign the
 >> public keys used, and both X.509 and OpenPGP hence become of little
 >> use.

 > Currently you cannot avoid using a container for the public keys,
 > either X.509 or Openpgp.

	Do I understand it correctly that it's a requirement of the TLS
	protocol itself?

	As for the implementation, gnutls_certificate_set_x509_key ()
	assumes that at least one certificate is available, and, AIUI,
	GnuTLS will try to find the “best” matching certificate
	associated with the credentials sometime later (during
	handshake?)

 > You may completely ignore it after that and only compare the raw
 > keys, or their identifiers e. g. with by using one of the
 > _get_key_id () functions.

	ACK, thanks!

	What'd be the simplest code to craft a self-signed certificate
	out of a gnutls_x509_privkey_t instance?

	I guess, it'd be something along the lines of:

  gnutls_x509_crt_t crt;
  {
    /* craft a dummy certificate */
    int ra
      = gnutls_x509_crt_init (&crt);
    assert (ra == 0);
    int rb
      = gnutls_x509_crt_set_key (crt, priv);
    assert (rb == 0);
    /* NB: doesn't accept empty strings */
    int rc
      = gnutls_x509_crt_set_dn_by_oid (crt, GNUTLS_OID_X520_COMMON_NAME,
                                       0, "Foo!", 4);
    assert (rc == 0);
    /* FIXME: what else to call? */
  }

-- 
FSF associate member #7257





More information about the Gnutls-help mailing list