On Aug 19, 2014, at 10:13 AM, Alan M. Carroll <a...@network-geographics.com> wrote:
> James, > > I can answer a few of these. > >> Thanks for the docs, this looks very promising. When you are ready to submit >> patches, this will need API review >> <https://cwiki.apache.org/confluence/display/TS/API+Review+Process>. > > Actually, Susan forgot to mention that you can review the code at > https://github.com/shinrich/trafficserver/tree/ts-3006 > >> There's already and API to get the SSL *, TSHttpSsnSSLConnectionGet. I don't >> see the need for a TSSslVConn, the TSHttpSsn should be sufficient. > > I don't think that works, because the pre handshake hook is called before a > client session exists so TSHttpSsnSSLConnectionGet() will fail in that > context. > >> Are TS_SSL_CLIENT_PRE_HANDSHAKE_HOOK and TS_SSL_SNI_HOOK session hooks? If >> so, they should follow the session hook naming conventions. If not, how do >> do register these hooks? > > Not really, as there's no client session instance at that time. Both of these > hooks are called before any of the session accept logic is executed. This > makes for some ugly choices in the API. Hmm. I would like to avoid additional API object is possible. Could you use a TSVConn rather than creating TSSslVConn? >> Previously, then we looked at SSL integration APIs, we eschewed wrapped >> types like TSSslContext in favour of directly returning OpenSSL pointers (as >> void *). My argument at the time was that there's a lot of API surface >> needed to deal with SSL and not much value in just wrapping OpenSSL. > > I recommended that because there was a discussion about potentially using a > different SSL library. The expectation is that these wrapper types can be > directly cast to a SSL library type, which is dependent on how ATS was built. I'm happy to assume that we will always use OpenSSL ;) >> There's no TSSslVConnOp value for the default action? ie. to just accept the >> SSL session? > > In that case, don't call TSSslVConnOpSet. But I suppose you might want to > undo, so that should be added. I think it's better to include the default for completeness and documentation. >> IIRC, OpenSSL doesn't guarantee anything about the SNI name except that is >> is a bag of bytes. Is it OK for TSSslVConnServernameGet() to present that as >> a C string? > > Ah, yes. It should return a void* and size value. There's also an issue on > what maximum length can be presumed and how storage for that is handled. The > spec, as I read it, puts a limit of 64K, but in practice openSSL seems to > limit it to 256 (TS_MAX_HOST_NAME_LEN). > >> Finally, I'm not thrilled with the idea of using ssl_multicert.config to >> specify the tunneling action. What would you do if you had a wildcard cert >> and only wanted to tunnel a specific name? > > Write a plugin :-).