On Tue, Jun 17, 2014, Viktor Dukhovni wrote:
> On Mon, Jun 16, 2014 at 02:12:07PM -0700, Steve Bush wrote:
>
> > We have openssl installed with an apache server and we just
> > upgraded from openssl-0.9.8u to openssl-0.9.8za, however we suddenly
> > have large numbers of clients failing to connect. Both .NET and
> > Java 1.7 clients fail with the error "unrecognized_name". When
> > delving into this further using Wireshark, the change in behavior
> > in 0.9.8za to send back the TLSv1 Alert is causing both .NET and
> > Java to reject the handshake.
>
> Are you sure this is not the result of a change in the Apache
> version? I see Apache code online that returns SSL_TLSEXT_ERR_ALERT_WARNING
> when no matching certificate is found. I don't see any recent
> changes in OpenSSL in the handling of this return value.
>
> > Is there a way to disable this behavior in openssl-0.9.8za or
> > how should we best to deal with this? We have probably two to
> > three thousand servers that are potentially affected
>
> This looks to me like an Apache issue.
>
> > Here is the relevant entry from the changelog
> > (http://git.openssl.org/gitweb/?p=openssl.git;a=blob_plain;f=CHANGES;hb=refs/heads/OpenSSL_0_9_8-stable)
> > that affected this:
> > Thanks to mancha for backporting the fix to the 0.9.8 branch.
> >
> > *) Fix handling of warning-level alerts in SSL23 client mode so they
> > don't cause client-side termination (eg. on SNI unrecognized_name
> > warnings). Add client and server support for six additional alerts
> > per RFC 6066 and RFC 4279.
> > [mancha]
>
> This commit does not introduce the alert generation. The alert is
> generated when the server callback returns SSL_TLSEXT_ERR_ALERT_WARNING,
> as in Apache's ssl_callback_ServerNameIndication() function in some
> Apache versions. Are you asking that OpenSSL not send a warning
> despite Apache's request to do so?
>
Looking through Apache 2.2 (I'm assuming the OP is using that) we have this:
int ssl_callback_ServerNameIndication(SSL *ssl, int *al, modssl_ctx_t *mctx)
{
... snip ...
else {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c,
"No matching SSL virtual host for servername "
"%s found (using default/first virtual host)",
servername);
return SSL_TLSEXT_ERR_ALERT_WARNING;
}
}
}
return SSLnTLSEXT_ERR_NOACK;
While in the 2.4 sources there is an interesting comment:
else {
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02044)
"No matching SSL virtual host for servername "
"%s found (using default/first virtual host)",
servername);
/*
* RFC 6066 section 3 says "It is NOT RECOMMENDED to send
* a warning-level unrecognized_name(112) alert, because
* the client's behavior in response to warning-level alerts
* is unpredictable."
*
* To maintain backwards compatibility in mod_ssl, we
* no longer send any alert (neither warning- nor fatal-level),
* i.e. we take the second action suggested in RFC 6066:
* "If the server understood the ClientHello extension but
* does not recognize the server name, the server SHOULD take
* one of two actions: either abort the handshake by sending
* a fatal-level unrecognized_name(112) alert or continue
* the handshake."
*/
}
}
}
return SSL_TLSEXT_ERR_NOACK;
So OpenSSL is doing what Apache is telling it to if the OP is using 2.2.x.
Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [email protected]