Skip to content

Commit fbc483e

Browse files
authored
Merge pull request #8833 from rlm2002/AppleNativeCert
domain name policy for WOLFSSL_APPLE_NATIVE_CERT_VALIDATION
2 parents 5047134 + 89be92f commit fbc483e

1 file changed

Lines changed: 23 additions & 6 deletions

File tree

src/internal.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

@@ -16809,8 +16809,9 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx,
1680916809
/* If we can't validate the peer cert chain against the CAs loaded
1681016810
* into wolfSSL, try to validate against the system certificates
1681116811
* using Apple's native trust APIs */
16812-
if ((ret != 0) && (ssl->ctx->doAppleNativeCertValidationFlag)) {
16813-
if (DoAppleNativeCertValidation(args->certs,
16812+
if ((ret == WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)) &&
16813+
(ssl->ctx->doAppleNativeCertValidationFlag)) {
16814+
if (DoAppleNativeCertValidation(ssl, args->certs,
1681416815
args->totalCerts)) {
1681516816
WOLFSSL_MSG("Apple native cert chain validation SUCCESS");
1681616817
ret = 0;
@@ -42744,7 +42745,8 @@ static SecCertificateRef ConvertToSecCertificateRef(const byte* derCert,
4274442745
* wolfSSL's built-in certificate validation mechanisms anymore. We instead
4274542746
* must call into the Security Framework APIs to authenticate peer certificates
4274642747
*/
42747-
static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
42748+
static int DoAppleNativeCertValidation(WOLFSSL* ssl,
42749+
const WOLFSSL_BUFFER_INFO* certs,
4274842750
int totalCerts)
4274942751
{
4275042752
int i;
@@ -42753,7 +42755,8 @@ static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
4275342755
CFMutableArrayRef certArray = NULL;
4275442756
SecCertificateRef secCert = NULL;
4275542757
SecTrustRef trust = NULL;
42756-
SecPolicyRef policy = NULL ;
42758+
SecPolicyRef policy = NULL;
42759+
CFStringRef hostname = NULL;
4275742760

4275842761
WOLFSSL_ENTER("DoAppleNativeCertValidation");
4275942762

@@ -42782,7 +42785,18 @@ static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
4278242785
}
4278342786

4278442787
/* Create trust object for SecCertifiate Ref */
42785-
policy = SecPolicyCreateSSL(true, NULL);
42788+
if (ssl->buffers.domainName.buffer &&
42789+
ssl->buffers.domainName.length > 0) {
42790+
/* Create policy with specified value to require host name match */
42791+
hostname = CFStringCreateWithCString(kCFAllocatorDefault,
42792+
(const char*)ssl->buffers.domainName.buffer,
42793+
kCFStringEncodingUTF8);
42794+
}
42795+
if (hostname != NULL) {
42796+
policy = SecPolicyCreateSSL(true, hostname);
42797+
} else {
42798+
policy = SecPolicyCreateSSL(true, NULL);
42799+
}
4278642800
status = SecTrustCreateWithCertificates(certArray, policy, &trust);
4278742801
if (status != errSecSuccess) {
4278842802
WOLFSSL_MSG_EX("Error creating trust object, "
@@ -42813,6 +42827,9 @@ static int DoAppleNativeCertValidation(const WOLFSSL_BUFFER_INFO* certs,
4281342827
if (policy) {
4281442828
CFRelease(policy);
4281542829
}
42830+
if (hostname) {
42831+
CFRelease(hostname);
42832+
}
4281642833

4281742834
WOLFSSL_LEAVE("DoAppleNativeCertValidation", ret);
4281842835

0 commit comments

Comments
 (0)