SecCertificateCreateWithData() returns a non-NULL SecCertificateRef even
if the buffer holds an invalid or corrupt certificate. Call
SecCertificateCopyPublicKey() to make sure cacert is a valid
certificate.
return CURLE_SSL_CACERT;
}
+ /* Check if cacert is valid. */
+ SecKeyRef key;
+ OSStatus ret = SecCertificateCopyPublicKey(cacert, &key);
+ if(ret != noErr) {
+ CFRelease(cacert);
+ failf(data, "SSL: invalid CA certificate");
+ return CURLE_SSL_CACERT;
+ }
+ CFRelease(key);
+
CFArrayAppendValue(array, cacert);
CFRelease(cacert);