[ 
https://issues.apache.org/jira/browse/TS-5022?focusedWorklogId=34655&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-34655
 ]

ASF GitHub Bot logged work on TS-5022:
--------------------------------------

                Author: ASF GitHub Bot
            Created on: 04/Jan/17 14:30
            Start Date: 04/Jan/17 14:30
    Worklog Time Spent: 10m 
      Work Description: Github user shinrich commented on a diff in the pull 
request:

    https://github.com/apache/trafficserver/pull/1226#discussion_r94591982
  
    --- Diff: iocore/net/P_SSLNetProcessor.h ---
    @@ -63,6 +64,90 @@ struct SSLNetProcessor : public UnixNetProcessor {
         return client_ctx;
       }
     
    +  // InsertCTX hashes on the absolute path to the client certificate file 
and stores in the map
    +  bool
    +  InsertCTX(cchar *client_cert, SSL_CTX *cctx)
    +  {
    +    ink_mutex_acquire(&ctxMapLock);
    +    if (client_cert == nullptr) {
    +      ctx_map.put(nullptr, cctx);
    +      return true;
    +    }
    +    // dup is required here to avoid the nullifying of the keys stored in 
the map.
    +    // client_cert is coming from the overridable clientcert config 
retrieved by the remap plugin.
    +    cchar *cert = ats_strdup(client_cert);
    +    // Hashmap has no delete functionality :(
    +    ctx_map.put(cert, cctx);
    +    ink_mutex_release(&ctxMapLock);
    +    return true;
    +  }
    +
    +  void
    +  printCTXmap()
    +  {
    +    Vec<cchar *> keys;
    +    ctx_map.get_keys(keys);
    +    for (size_t i = 0; i < keys.length(); i++)
    +      Debug("ssl", "Client certificates in the map %s", keys.get(i));
    +  }
    +  void
    +  freeCTXmap()
    +  {
    +    ink_mutex_acquire(&ctxMapLock);
    +    Vec<cchar *> keys;
    +    ctx_map.get_keys(keys);
    +    size_t n = keys.length();
    +    Debug("ssl", "freeing CTX Map");
    +    for (size_t i = 0; i < n; i++) {
    +      deleteKey(keys.get(i));
    +      ats_free((char *)keys.get(i));
    +    }
    +    ctx_map.clear();
    +    ink_mutex_release(&ctxMapLock);
    +  }
    +
    +  void
    +  deleteKey(cchar *key)
    +  {
    +    SSL_CTX_free((SSL_CTX *)ctx_map.get(key));
    +  }
    +  // creates a new context attaching the provided certificate
    +  SSL_CTX *
    +  getNewCTX(char *client_cert)
    +  {
    +    SSL_CTX *client_ctx = nullptr;
    +
    +    SSLConfig::scoped_config params;
    +
    +    client_ctx = SSLInitClientContext(params);
    +    if (!client_ctx) {
    +      SSLError("Can't initialize the SSL client, HTTPS in remap rules will 
not function");
    +    }
    +    if (client_ctx && client_cert != nullptr) {
    +      if (!SSL_CTX_use_certificate_chain_file(client_ctx, (const char 
*)client_cert)) {
    +        SSLError("failed to load client certificate from %s", 
params->clientCertPath);
    +        goto fail;
    +      }
    +    }
    +    return client_ctx;
    +  fail:
    +    SSLReleaseContext(client_ctx);
    +    ::exit(1);
    +  }
    +
    +  // getCTX: returns the context attached to the given certificate
    +  SSL_CTX *
    +  getCTX(cchar *client_cert)
    +  {
    +    ink_mutex_acquire(&ctxMapLock);
    +    if (client_cert == nullptr) {
    +      return ctx_map.get(nullptr);
    --- End diff --
    
    Are we returning without dropping the mutex?


Issue Time Tracking
-------------------

    Worklog Id:     (was: 34655)
    Time Spent: 2h  (was: 1h 50m)

> Multiple Client Certificate to Origin
> -------------------------------------
>
>                 Key: TS-5022
>                 URL: https://issues.apache.org/jira/browse/TS-5022
>             Project: Traffic Server
>          Issue Type: Improvement
>          Components: Security, SSL, TLS
>            Reporter: Scott Beardsley
>            Assignee: Syeda Persia Aziz
>              Labels: yahoo
>             Fix For: 7.1.0
>
>          Time Spent: 2h
>  Remaining Estimate: 0h
>
> Yahoo has a use case where the origin is doing mutual TLS authentication 
> which requires ATS to send a client certificate. This works fine (for now) 
> because ATS supports configuring *one* client cert but this feature should 
> really allow multiple client certificates to be configured which would depend 
> upon the origin being contacted.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to