@@ -213,7 +213,7 @@ int writeAeadAuthData(WOLFSSL* ssl, word16 sz, byte type, byte* additional,
213213#include <Security/SecCertificate.h>
214214#include <Security/SecTrust.h>
215215#include <Security/SecPolicy.h>
216- static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
216+ static int DoAppleNativeCertValidation(WOLFSSL* ssl, const WOLFSSL_BUFFER_INFO* certs,
217217 int totalCerts);
218218#endif /* #if defined(__APPLE__) && defined(WOLFSSL_SYS_CA_CERTS) */
219219
@@ -16810,7 +16810,7 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx,
1681016810 * into wolfSSL, try to validate against the system certificates
1681116811 * using Apple's native trust APIs */
1681216812 if ((ret != 0) && (ssl->ctx->doAppleNativeCertValidationFlag)) {
16813- if (DoAppleNativeCertValidation(args->certs,
16813+ if (DoAppleNativeCertValidation(ssl, args->certs,
1681416814 args->totalCerts)) {
1681516815 WOLFSSL_MSG("Apple native cert chain validation SUCCESS");
1681616816 ret = 0;
@@ -42744,7 +42744,8 @@ static SecCertificateRef ConvertToSecCertificateRef(const byte* derCert,
4274442744 * wolfSSL's built-in certificate validation mechanisms anymore. We instead
4274542745 * must call into the Security Framework APIs to authenticate peer certificates
4274642746 */
42747- static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
42747+ static int DoAppleNativeCertValidation(WOLFSSL* ssl,
42748+ const WOLFSSL_BUFFER_INFO* certs,
4274842749 int totalCerts)
4274942750{
4275042751 int i;
@@ -42753,7 +42754,8 @@ static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
4275342754 CFMutableArrayRef certArray = NULL;
4275442755 SecCertificateRef secCert = NULL;
4275542756 SecTrustRef trust = NULL;
42756- SecPolicyRef policy = NULL ;
42757+ SecPolicyRef policy = NULL;
42758+ CFStringRef hostname = NULL;
4275742759
4275842760 WOLFSSL_ENTER("DoAppleNativeCertValidation");
4275942761
@@ -42782,7 +42784,17 @@ static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
4278242784 }
4278342785
4278442786 /* Create trust object for SecCertifiate Ref */
42785- policy = SecPolicyCreateSSL(true, NULL);
42787+ if (ssl->buffers.domainName.buffer &&
42788+ ssl->buffers.domainName.length > 0) {
42789+ /* Create policy with specified value to require host name match */
42790+ hostname = CFStringCreateWithCString(kCFAllocatorDefault,
42791+ (const char*)ssl->buffers.domainName.buffer, kCFStringEncodingUTF8);
42792+ }
42793+ if (hostname != NULL) {
42794+ policy = SecPolicyCreateSSL(true, hostname);
42795+ } else {
42796+ policy = SecPolicyCreateSSL(true, NULL);
42797+ }
4278642798 status = SecTrustCreateWithCertificates(certArray, policy, &trust);
4278742799 if (status != errSecSuccess) {
4278842800 WOLFSSL_MSG_EX("Error creating trust object, "
@@ -42813,6 +42825,9 @@ static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
4281342825 if (policy) {
4281442826 CFRelease(policy);
4281542827 }
42828+ if (hostname) {
42829+ CFRelease(hostname);
42830+ }
4281642831
4281742832 WOLFSSL_LEAVE("DoAppleNativeCertValidation", ret);
4281842833
0 commit comments