Hi Robert,
The parsing of the CN name is OK now, as i said earlier there still is a
problem only the first and last certificate seems to be matched,
although all are parsed from the config file without error.
--
Sander
When pound starts:
Starting reverse proxy and load balancer: poundstarting...
CN=<backup.eikelenboom.it>
CN=<git.eikelenboom.it>
CN=<davical.eikelenboom.it>
CN=<security.eikelenboom.it>
So all have been parsed OK.
Below the log after applying the patch below:
root@webproxy:/usr/src/pound-2.6d# diff -U5 ../Pound-2.6d/config.c config.c
--- ../Pound-2.6d/config.c 2011-04-11 15:59:05.000000000 +0200
+++ config.c 2011-04-11 19:20:00.000000000 +0200
@@ -795,18 +795,19 @@
return SSL_TLSEXT_ERR_NOACK;
/* logmsg(LOG_DEBUG, "Received SSL SNI Header for servername %s",
servername); */
SSL_set_SSL_CTX(ssl, NULL);
- for(pc = ctx; pc; pc = pc->next)
+ for(pc = ctx; pc; pc = pc->next){
+ logmsg(LOG_DEBUG, "try to match pc->server_name %s to server_name
%s",pc->server_name,server_name);
if(fnmatch(pc->server_name, server_name, 0) == 0) {
/* logmsg(LOG_DEBUG, "Found cert for %s", servername); */
SSL_set_SSL_CTX(ssl, pc->ctx);
return SSL_TLSEXT_ERR_OK;
}
-
- /* logmsg(LOG_DEBUG, "No match for %s, default used", server_name); */
+ }
+ logmsg(LOG_DEBUG, "No match for %s, default used", server_name);
SSL_set_SSL_CTX(ssl, ctx->ctx);
return SSL_TLSEXT_ERR_OK;
}
#endif
Here you see the output when iterating through the certificates, only the first
and last present.
Apr 11 19:21:46 webproxy pound: try to match pc->server_name
backup.eikelenboom.it to server_name davical.eikelenboom.it
Apr 11 19:21:46 webproxy pound: try to match pc->server_name
security.eikelenboom.it to server_name davical.eikelenboom.it
Apr 11 19:21:46 webproxy pound: No match for davical.eikelenboom.it, default
used
Probably the parsing code isn't storing the certificates properly in the
variable or overwriting them somewhere in:
#ifdef SSL_CTRL_SET_TLSEXT_SERVERNAME_CB
/* we have support for SNI */
FILE *fcert;
char server_name[MAXBUF], *cp;
X509 *x509;
if(has_other)
conf_err("Cert directives MUST precede other SSL-specific
directives - aborted");
if(res->ctx) {
for(pc = res->ctx; res->next; res = res->next)
;
if((pc->next = malloc(sizeof(POUND_CTX))) == NULL)
conf_err("ListenHTTPS new POUND_CTX: out of memory -
aborted");
pc = pc->next;
} else {
if((res->ctx = malloc(sizeof(POUND_CTX))) == NULL)
conf_err("ListenHTTPS new POUND_CTX: out of memory -
aborted");
pc = res->ctx;
}
if((pc->ctx = SSL_CTX_new(SSLv23_server_method())) == NULL)
conf_err("SSL_CTX_new failed - aborted");
pc->server_name = NULL;
pc->next = NULL;
lin[matches[1].rm_eo] = '\0';
if(SSL_CTX_use_certificate_chain_file(pc->ctx, lin +
matches[1].rm_so) != 1)
conf_err("SSL_CTX_use_certificate_chain_file failed - aborted");
if(SSL_CTX_use_PrivateKey_file(pc->ctx, lin + matches[1].rm_so,
SSL_FILETYPE_PEM) != 1)
conf_err("SSL_CTX_use_PrivateKey_file failed - aborted");
if(SSL_CTX_check_private_key(pc->ctx) != 1)
conf_err("SSL_CTX_check_private_key failed - aborted");
if((fcert = fopen(lin + matches[1].rm_so, "r")) == NULL)
conf_err("ListenHTTPS: could not open certificate file");
if((x509 = PEM_read_X509(fcert, NULL, NULL, NULL)) == NULL)
conf_err("ListenHTTPS: could not get certificate subject");
fclose(fcert);
memset(server_name, '\0', MAXBUF);
X509_NAME_oneline(X509_get_subject_name(x509), server_name, MAXBUF
- 1);
X509_free(x509);
if(!regexec(&CNName, server_name, 4, matches, 0)) {
server_name[matches[1].rm_eo] = '\0';
if((pc->server_name = strdup(server_name + matches[1].rm_so))
== NULL)
conf_err("ListenHTTPS: could not set certificate subject");
} else
conf_err("ListenHTTPS: could not get certificate CN");
fprintf(stderr, "CN=<%s>\n", pc->server_name);
#else
/* no SNI support */
Monday, April 11, 2011, 4:06:39 PM, you wrote:
> This is to announce the release of Pound v2.6d. This is an experimental
> version - the fourth (and hopefully the last prior to the stable
> release) in the 2.6 series. Changes since version 2.6c:
> Enhancements:
> - added parsing for the certificate CN
> Bug fixes:
> - fixed problem in task enqueing
> - fixed small problem in Makefile
> The software is at version 2.6d (beta quality). Further testing
> (especially under heavy loads), improvements and suggestions are
> welcome.
--
Best regards,
Sander mailto:[email protected]
--
To unsubscribe send an email with subject unsubscribe to [email protected].
Please contact [email protected] for questions.