You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by Wei Sun <su...@yahoo-inc.com> on 2014/02/13 10:14:32 UTC

[API Review] Add lifecycle hook for SSL_CTX initialization

Hi all,

I'd like to add two new lifecycle hooks, TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK and TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK, as discussed on this jira:

https://issues.apache.org/jira/browse/TS-2437?focusedCommentId=13897621&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13897621

The reason for these hooks is that I have a use case to manipulate (overwrite) the OpenSSL related callbacks in my plugin. I think it is also useful for applications who have a need to change or retrieve the ssl related attributes (callbacks, certs, configurations, etc.).

The doc for the hooks is attached in the Jira above, and below as well.

There are no ABI / API incompatibilities with this patch.

Please comment.

Thanks,
Wei Sun

/*
      TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK

        called every time after a server SSL_CTX has finished the initialization.
        It exposes the initialized SSL_CTX pointer.

        Event: TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED

      TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK

        called once, after the client SSL_CTX has finished the initialization.
        It exposes the initialized SSL_CTX pointer.

        Event: TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED
*/

@@ -322,6 +336,8 @@ extern "C"
     TS_LIFECYCLE_PORTS_INITIALIZED_HOOK,
     TS_LIFECYCLE_PORTS_READY_HOOK,
     TS_LIFECYCLE_CACHE_READY_HOOK,
+    TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK,
+    TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK,
     TS_LIFECYCLE_LAST_HOOK
   } TSLifecycleHookID;

@@ -413,6 +429,8 @@ extern "C"
     TS_EVENT_LIFECYCLE_PORTS_INITIALIZED = 60018,
     TS_EVENT_LIFECYCLE_PORTS_READY = 60019,
     TS_EVENT_LIFECYCLE_CACHE_READY = 60020,
+    TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED = 60021,
+    TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED = 60022,
     TS_EVENT_MGMT_UPDATE = 60100,


RE: [API Review] Add lifecycle hook for SSL_CTX initialization

Posted by Luca Rea <lu...@contactlab.com>.
Absolutely +1

Re: [API Review] Add lifecycle hook for SSL_CTX initialization

Posted by Wei Sun <su...@yahoo-inc.com>.
Tweak a little bit..

On 2/13/14 5:43 PM, "Wei Sun" <su...@yahoo-inc.com> wrote:

>Hi Brian,
>
>Below is a piece of code snippet I used in a test plugin, please let me
>know if you need more details.
>
>Thanks,
>Wei
>
>---
>
>int
>SSLCtxInitCallbackHandler(TSCont cnt, TSEvent id, void* ssl_ctx) {
>  switch (id) {
>  case TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED:
>      {
>          SSL_CTX *ctx = (SSL_CTX *)ssl_ctx;
>          // init ssl_ctx callbacks
>      }
>
>      break;
>
>  case TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED:
>      {
>          SSL_CTX *ctx = (SSL_CTX *)ssl_ctx;
>          //handle ssl ctx
>      }
>      break;
>  default:
>    TSDebug("lifecycle-plugin", "Unexpected event %d", id);
>    break;
>  }
>
>  return TS_EVENT_NONE;
>}
>
>void
>TSPluginInit(int argc, const char *argv[])
>{
>  TSPluginRegistrationInfo info;
>
>  info.plugin_name = (char *)("ats_session_reuse");
>  info.vendor_name = (char *)("ssl_ctx");
>  info.support_email = (char *)("dev@trafficserver.apache.org");
>
>  if (TSPluginRegister(TS_SDK_VERSION_3_0, &info) != TS_SUCCESS) {
>    TSError("Plugin registration failed.\n");
>  }
    TSCont cont = TSContCreate(SSLCtxInitCallbackHandler, NULL);	
>
>  TSLifecycleHookAdd(TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK, cont);
>  TSLifecycleHookAdd(TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK, cont);
>}
>
>
>
>On 2/13/14 5:19 PM, "Brian Geffon" <br...@apache.org> wrote:
>
>>Do you guys have any example plugins that use these hooks?
>>
>>Brian
>>
>>On Thursday, February 13, 2014, Wei Sun <su...@yahoo-inc.com> wrote:
>>
>>> Hi all,
>>>
>>> I'd like to add two new lifecycle hooks,
>>> TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK and
>>> TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK, as discussed on this
>>>jira:
>>>
>>>
>>> 
>>>https://issues.apache.org/jira/browse/TS-2437?focusedCommentId=13897621&
>>>p
>>>age=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#com
>>>m
>>>ent-13897621
>>>
>>> The reason for these hooks is that I have a use case to manipulate
>>> (overwrite) the OpenSSL related callbacks in my plugin. I think it is
>>>also
>>> useful for applications who have a need to change or retrieve the ssl
>>> related attributes (callbacks, certs, configurations, etc.).
>>>
>>> The doc for the hooks is attached in the Jira above, and below as well.
>>>
>>> There are no ABI / API incompatibilities with this patch.
>>>
>>> Please comment.
>>>
>>> Thanks,
>>> Wei Sun
>>>
>>> /*
>>>       TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK
>>>
>>>         called every time after a server SSL_CTX has finished the
>>> initialization.
>>>         It exposes the initialized SSL_CTX pointer.
>>>
>>>         Event: TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED
>>>
>>>       TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK
>>>
>>>         called once, after the client SSL_CTX has finished the
>>> initialization.
>>>         It exposes the initialized SSL_CTX pointer.
>>>
>>>         Event: TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED
>>> */
>>>
>>> @@ -322,6 +336,8 @@ extern "C"
>>>      TS_LIFECYCLE_PORTS_INITIALIZED_HOOK,
>>>      TS_LIFECYCLE_PORTS_READY_HOOK,
>>>      TS_LIFECYCLE_CACHE_READY_HOOK,
>>> +    TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK,
>>> +    TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK,
>>>      TS_LIFECYCLE_LAST_HOOK
>>>    } TSLifecycleHookID;
>>>
>>> @@ -413,6 +429,8 @@ extern "C"
>>>      TS_EVENT_LIFECYCLE_PORTS_INITIALIZED = 60018,
>>>      TS_EVENT_LIFECYCLE_PORTS_READY = 60019,
>>>      TS_EVENT_LIFECYCLE_CACHE_READY = 60020,
>>> +    TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED = 60021,
>>> +    TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED = 60022,
>>>      TS_EVENT_MGMT_UPDATE = 60100,
>>>
>>>
>


Re: [API Review] Add lifecycle hook for SSL_CTX initialization

Posted by Wei Sun <su...@yahoo-inc.com>.
Hi Brian,

Below is a piece of code snippet I used in a test plugin, please let me
know if you need more details.

Thanks,
Wei

---

int
SSLCtxInitCallbackHandler(TSCont cnt, TSEvent id, void* ssl_ctx) {
  switch (id) {
  case TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED:
      {
          SSL_CTX *ctx = (SSL_CTX *)ssl_ctx;
          // init ssl_ctx callbacks
      }

      break;

  case TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED:
      {
          SSL_CTX *ctx = (SSL_CTX *)ssl_ctx;
          //handle ssl ctx
      }
      break;
  default:
    TSDebug("lifecycle-plugin", "Unexpected event %d", id);
    break;
  }

  return TS_EVENT_NONE;
}

void
TSPluginInit(int argc, const char *argv[])
{
  TSPluginRegistrationInfo info;

  info.plugin_name = (char *)("ats_session_reuse");
  info.vendor_name = (char *)("ssl_ctx");
  info.support_email = (char *)("dev@trafficserver.apache.org");

  if (TSPluginRegister(TS_SDK_VERSION_3_0, &info) != TS_SUCCESS) {
    TSError("Plugin registration failed.\n");
  }

  TSLifecycleHookAdd(TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK,
TSContCreate(SSLCtxInitCallbackHandler, NULL));
  TSLifecycleHookAdd(TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK,
TSContCreate(SSLCtxInitCallbackHandler, NULL));
}



On 2/13/14 5:19 PM, "Brian Geffon" <br...@apache.org> wrote:

>Do you guys have any example plugins that use these hooks?
>
>Brian
>
>On Thursday, February 13, 2014, Wei Sun <su...@yahoo-inc.com> wrote:
>
>> Hi all,
>>
>> I'd like to add two new lifecycle hooks,
>> TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK and
>> TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK, as discussed on this jira:
>>
>>
>> 
>>https://issues.apache.org/jira/browse/TS-2437?focusedCommentId=13897621&p
>>age=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comm
>>ent-13897621
>>
>> The reason for these hooks is that I have a use case to manipulate
>> (overwrite) the OpenSSL related callbacks in my plugin. I think it is
>>also
>> useful for applications who have a need to change or retrieve the ssl
>> related attributes (callbacks, certs, configurations, etc.).
>>
>> The doc for the hooks is attached in the Jira above, and below as well.
>>
>> There are no ABI / API incompatibilities with this patch.
>>
>> Please comment.
>>
>> Thanks,
>> Wei Sun
>>
>> /*
>>       TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK
>>
>>         called every time after a server SSL_CTX has finished the
>> initialization.
>>         It exposes the initialized SSL_CTX pointer.
>>
>>         Event: TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED
>>
>>       TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK
>>
>>         called once, after the client SSL_CTX has finished the
>> initialization.
>>         It exposes the initialized SSL_CTX pointer.
>>
>>         Event: TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED
>> */
>>
>> @@ -322,6 +336,8 @@ extern "C"
>>      TS_LIFECYCLE_PORTS_INITIALIZED_HOOK,
>>      TS_LIFECYCLE_PORTS_READY_HOOK,
>>      TS_LIFECYCLE_CACHE_READY_HOOK,
>> +    TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK,
>> +    TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK,
>>      TS_LIFECYCLE_LAST_HOOK
>>    } TSLifecycleHookID;
>>
>> @@ -413,6 +429,8 @@ extern "C"
>>      TS_EVENT_LIFECYCLE_PORTS_INITIALIZED = 60018,
>>      TS_EVENT_LIFECYCLE_PORTS_READY = 60019,
>>      TS_EVENT_LIFECYCLE_CACHE_READY = 60020,
>> +    TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED = 60021,
>> +    TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED = 60022,
>>      TS_EVENT_MGMT_UPDATE = 60100,
>>
>>


Re: [API Review] Add lifecycle hook for SSL_CTX initialization

Posted by Brian Geffon <br...@apache.org>.
Do you guys have any example plugins that use these hooks?

Brian

On Thursday, February 13, 2014, Wei Sun <su...@yahoo-inc.com> wrote:

> Hi all,
>
> I'd like to add two new lifecycle hooks,
> TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK and
> TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK, as discussed on this jira:
>
>
> https://issues.apache.org/jira/browse/TS-2437?focusedCommentId=13897621&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13897621
>
> The reason for these hooks is that I have a use case to manipulate
> (overwrite) the OpenSSL related callbacks in my plugin. I think it is also
> useful for applications who have a need to change or retrieve the ssl
> related attributes (callbacks, certs, configurations, etc.).
>
> The doc for the hooks is attached in the Jira above, and below as well.
>
> There are no ABI / API incompatibilities with this patch.
>
> Please comment.
>
> Thanks,
> Wei Sun
>
> /*
>       TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK
>
>         called every time after a server SSL_CTX has finished the
> initialization.
>         It exposes the initialized SSL_CTX pointer.
>
>         Event: TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED
>
>       TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK
>
>         called once, after the client SSL_CTX has finished the
> initialization.
>         It exposes the initialized SSL_CTX pointer.
>
>         Event: TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED
> */
>
> @@ -322,6 +336,8 @@ extern "C"
>      TS_LIFECYCLE_PORTS_INITIALIZED_HOOK,
>      TS_LIFECYCLE_PORTS_READY_HOOK,
>      TS_LIFECYCLE_CACHE_READY_HOOK,
> +    TS_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED_HOOK,
> +    TS_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED_HOOK,
>      TS_LIFECYCLE_LAST_HOOK
>    } TSLifecycleHookID;
>
> @@ -413,6 +429,8 @@ extern "C"
>      TS_EVENT_LIFECYCLE_PORTS_INITIALIZED = 60018,
>      TS_EVENT_LIFECYCLE_PORTS_READY = 60019,
>      TS_EVENT_LIFECYCLE_CACHE_READY = 60020,
> +    TS_EVENT_LIFECYCLE_SERVER_SSL_CTX_INITIALIZED = 60021,
> +    TS_EVENT_LIFECYCLE_CLIENT_SSL_CTX_INITIALIZED = 60022,
>      TS_EVENT_MGMT_UPDATE = 60100,
>
>