gpt4 book ai didi

ios - 如何在 iOS 安全传输 API 中使用我自己的根证书?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:44 25 4
gpt4 key购买 nike

我正在尝试使用 Apple's Secure Transport API在已建立的传输层之上,使用我自己的根证书。我的根证书是 SecCertificateRef,但我不知道如何让它可信。

我检查了以下函数,每个函数似乎都非常接近我的需要:

  • SSLAddDistinguishedName() 未实现;
  • SSLSetTrustedRoots() 已弃用;
  • SSLSetCertificateAuthorities() 仅用于客户端身份验证。

如果我可以覆盖 SecContextRef 中的 SecTrustRef,那么 SecTrustSetAnchorCertificates() 就可以完成这项工作。不幸的是,这条途径只把我带到了 SSLGetPeerSecTrust(),它似乎是一个苹果私有(private)的 API。

最佳答案

我想你想要的是以下内容:

OSStatus status = SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true);

然后在握手期间

 OSStatus status = SSLHandshake(sslContext);
if (status == errSSLPeerAuthCompleted)
{
SecTrustRef trust = NULL;
status = SSLCopyPeerTrust(sslContext, &trust);

// Perform your custom trust rules here. e.g.
BOOL bTrusted = NO;
NSArray* anchor = [NSArray arrayWithObject:(id)pCACert];
OSStatus result = SecTrustSetAnchorCertificates(trust, (CFArrayRef)anchor);
/* Uncomment this to enable both system certs and the one we are supplying */
//result = SecTrustSetAnchorCertificatesOnly(trust, NO);
SecTrustResultType trustResult;
result = SecTrustEvaluate(trust, &trustResult);
if (result == errSecSuccess)
{
switch (trustResult)
{
case kSecTrustResultProceed:
case kSecTrustResultUnspecified:
bTrusted = YES;
break;

case kSecTrustResultInvalid:
case kSecTrustResultDeny:
case kSecTrustResultRecoverableTrustFailure:
case kSecTrustResultFatalTrustFailure:
case kSecTrustResultOtherError:
default:
break;
}
}

// If trusted, continue the handshake
if (bTrusted)
status = SSLHandshake(sslContext);
else
{
/* Your trust failure handling here ~ disconnect */
}
}

其中 pCAcert 是您希望信任的根证书 (SecCertificateRef)

关于ios - 如何在 iOS 安全传输 API 中使用我自己的根证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com