aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2015-12-16 10:25:31 +0100
committerDaniel Stenberg <daniel@haxx.se>2015-12-16 10:27:18 +0100
commit151da51404b46e011bfd0466af5d31af4cb33721 (patch)
treecb735f260c5c8706288ac56b73ef6b81017b14e8
parent1ff3a07be9b875155b0076a91a0b8f5c5fd22067 (diff)
cyassl: deal with lack of *get_peer_certificate
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 #566
-rw-r--r--configure.ac11
-rw-r--r--lib/vtls/cyassl.c6
2 files changed, 14 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 3031f05ae..4fba81715 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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)
@@ -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
diff --git a/lib/vtls/cyassl.c b/lib/vtls/cyassl.c
index 20629f45d..e762d339f 100644
--- a/lib/vtls/cyassl.c
+++ b/lib/vtls/cyassl.c
@@ -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;
@@ -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;