Skip to content

Commit

Permalink
cyassl: deal with lack of *get_peer_certificate
Browse files Browse the repository at this point in the history
The function is only present in wolfssl/cyassl if it was built with
--enable-opensslextra. With these checks added, pinning support is disabled
unless the TLS lib has that function available.

Also fix the mistake in configure that checks for the wrong lib name.

Closes curl#566
  • Loading branch information
bagder committed Dec 16, 2015
1 parent 1ff3a07 commit 151da51
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
11 changes: 8 additions & 3 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2182,7 +2182,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
fi

if test "x$USE_CYASSL" = "xyes"; then
AC_MSG_NOTICE([detected CyaSSL])
AC_MSG_NOTICE([detected $cyassllibname])

dnl cyassl/ctaocrypt/types.h needs SIZEOF_LONG_LONG defined!
AC_CHECK_SIZEOF(long long)
Expand All @@ -2195,9 +2195,14 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then

LIBS="-l$cyassllibname -lm $LIBS"

if test "x$cyassllib" = "xwolfssl"; then
if test "x$cyassllibname" = "xwolfssl"; then
dnl Recent WolfSSL versions build without SSLv3 by default
AC_CHECK_FUNCS(wolfSSLv3_client_method)
dnl WolfSSL needs configure --enable-opensslextra to have *get_peer*
AC_CHECK_FUNCS(wolfSSLv3_client_method \
wolfSSL_get_peer_certificate)
else
dnl Cyassl needs configure --enable-opensslextra to have *get_peer*
AC_CHECK_FUNCS(CyaSSL_get_peer_certificate)
fi

if test -n "$cyassllib"; then
Expand Down
6 changes: 6 additions & 0 deletions lib/vtls/cyassl.c
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,8 @@ cyassl_connect_step2(struct connectdata *conn,
}

if(data->set.str[STRING_SSL_PINNEDPUBLICKEY]) {
#if defined(HAVE_WOLFSSL_GET_PEER_CERTIFICATE) || \
defined(HAVE_CYASSL_GET_PEER_CERTIFICATE)
X509 *x509;
const char *x509_der;
int x509_der_len;
Expand Down Expand Up @@ -449,6 +451,10 @@ cyassl_connect_step2(struct connectdata *conn,
failf(data, "SSL: public key does not match pinned public key!");
return result;
}
#else
failf(data, "Library lacks pinning support built-in");
return CURLE_NOT_BUILT_IN;
#endif
}

conssl->connecting_state = ssl_connect_3;
Expand Down

0 comments on commit 151da51

Please sign in to comment.