Re: TLS API discussion

David Brownell <"brownell"@ix.dot.netcom.com> Tue, 20 May 1997 19:40:26 -0700
Newsgroups gmane.ietf.apps-tls
Organization Dave's VAX
Message-ID <[email protected]>
If portability is a primary concern, I've got a rather portable
Java API to present!  :-)

Before an API (in some language) is settled on, it strikes me there
ought to be some agreements on exactly what features should be
exposed, and how.  If those can't be agreed on, then there may be
no real virtue in trying to focus on some specific C/C++/Java/...
interface set.


Sessions and associated data (active cipher suite, peer cert chain,
creation time, etc) seem like no-brainers ... but then, how are
applications supposed to associate data with those sessions?  It'll
be important to let apps be involved in session creation/destruction,
both by providing policies (must/mustn't create a new session here,
invalidate now, invalidate after N hours not in use, etc) and
notifications (just created/destroyed this session etc).

Handshaking seems to me to be a lot easier.  Even there, one finds
issues.  It's easy to say "enable only these cipher suites", or
"handshake now" (and tell me when it's finished).  But surely some
folk will claim it's important for clients to prioritize suites,
or for servers to choose amongst clients' prioritized suites, at the
application level ... and such policy flexibility is annoying to get
well tested.  (Similarly, "re-key after every N Megabytes.")

Stuff like peer authentication is curiously tricky too.  Where is the
agreed standard for X509v3 certificate APIs?  That's unrelated to SSL,
but one sort of needs an API there to use SSL well.  How do applications
say whether they accept the cert chain proferred during handshaking?
How does the TLS layer get access to the N different private keys
(and associated cert chains) it may need to authenticate itself?  How
do clients choose which of the M appropriate cert chains to send?

Plus, oddly enough, there are languages where TLS sockets "need" to
work differently from other sockets.  Hmm.  Even C++ can't do what
Java does, since there's no 100% standard "Socket" class which is
used by everyone.  So, there are clearly going to be some areas where
the API functionality needs to differ between different languages.


The discussion I've seen so far on this list seems focussed on low
level issues ... what about policies for how the data exposed by TLS
gets used?  For example, isn't the whole point of TLS-izing SMTP to
create a "trusted" mail network, used to ensure that senders, forwarding
agents, and recipients are who they say they are?  Thus being able to
do stuff like exclude forgers and abusers (SPAM SPAM SPAM)??  (I'm not
forgetting privacy-in-transit, but remember that forwarding agents get
the plaintext anyway.)

We need to be thinking more broadly about how the capabilities of TLS
get used by applications ... and then ensure they get exposed in the
TLS APIs.  We can of course try to expose every protocol feature in
a "basic" API, but that quickly get unwieldy.

So ... how do YOU think applications should use TLS sessions?  Or use
peer authentication?  What control do they need over handshaking?

- Dave