int strict_sni; /* refuse negotiation if sni doesn't match a certificate */
struct eb_root sni_ctx; /* sni_ctx tree of all known certs full-names sorted by name */
struct eb_root sni_w_ctx; /* sni_ctx tree of all known certs wildcards sorted by name */
- struct tls_sess_key *tls_ticket_keys; /* TLS ticket keys */
- int tls_ticket_enc_index; /* array index of the key to use for encryption */
+ struct tls_keys_ref *keys_ref; /* TLS ticket keys reference */
#endif
int is_ssl; /* SSL is required for these listeners */
unsigned long bind_proc; /* bitmask of processes allowed to use these listeners */
int i;
conn = (struct connection *)SSL_get_app_data(s);
- keys = objt_listener(conn->target)->bind_conf->tls_ticket_keys;
- head = objt_listener(conn->target)->bind_conf->tls_ticket_enc_index;
+ keys = objt_listener(conn->target)->bind_conf->keys_ref->tlskeys;
+ head = objt_listener(conn->target)->bind_conf->keys_ref->tls_ticket_enc_index;
if (enc) {
memcpy(key_name, keys[head].name, 16);
}
#if (defined SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB && TLS_TICKETS_NO > 0)
- if(bind_conf->tls_ticket_keys) {
+ if(bind_conf->keys_ref) {
if (!SSL_CTX_set_tlsext_ticket_key_cb(ctx, ssl_tlsext_ticket_key_cb)) {
Alert("Proxy '%s': unable to set callback for TLS ticket validation for bind '%s' at [%s:%d].\n",
curproxy->id, bind_conf->arg, bind_conf->file, bind_conf->line);
FILE *f;
int i = 0;
char thisline[LINESIZE];
+ struct tls_keys_ref *keys_ref;
if (!*args[cur_arg + 1]) {
if (err)
return ERR_ALERT | ERR_FATAL;
}
- conf->tls_ticket_keys = malloc(TLS_TICKETS_NO * sizeof(struct tls_sess_key));
+ keys_ref = malloc(sizeof(struct tls_keys_ref));
+ keys_ref->tlskeys = malloc(TLS_TICKETS_NO * sizeof(struct tls_sess_key));
if ((f = fopen(args[cur_arg + 1], "r")) == NULL) {
if (err)
return ERR_ALERT | ERR_FATAL;
}
+ keys_ref->filename = strdup(args[cur_arg + 1]);
+
while (fgets(thisline, sizeof(thisline), f) != NULL) {
int len = strlen(thisline);
/* Strip newline characters from the end */
if(thisline[len - 1] == '\r')
thisline[--len] = 0;
- if (base64dec(thisline, len, (char *) (conf->tls_ticket_keys + i % TLS_TICKETS_NO), sizeof(struct tls_sess_key)) != sizeof(struct tls_sess_key)) {
+ if (base64dec(thisline, len, (char *) (keys_ref->tlskeys + i % TLS_TICKETS_NO), sizeof(struct tls_sess_key)) != sizeof(struct tls_sess_key)) {
if (err)
memprintf(err, "'%s' : unable to decode base64 key on line %d", args[cur_arg+1], i + 1);
return ERR_ALERT | ERR_FATAL;
/* Use penultimate key for encryption, handle when TLS_TICKETS_NO = 1 */
i-=2;
- conf->tls_ticket_enc_index = i < 0 ? 0 : i;
+ keys_ref->tls_ticket_enc_index = i < 0 ? 0 : i;
+ conf->keys_ref = keys_ref;
return 0;
#else