Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当使用客户端证书身份验证时,为什么我总是得到nsurErrorDomain代码=-1206?_Ios_Ssl Certificate_X509certificate_Authentication - Fatal编程技术网

Ios 当使用客户端证书身份验证时,为什么我总是得到nsurErrorDomain代码=-1206?

Ios 当使用客户端证书身份验证时,为什么我总是得到nsurErrorDomain代码=-1206?,ios,ssl-certificate,x509certificate,authentication,Ios,Ssl Certificate,X509certificate,Authentication,下面的代码是我使用以前关于ios客户端证书身份验证的文章中的代码。每个人都说这行得通,但为什么对我行得通 我不断得到以下错误: connection didFailWithError: Error Domain=NSURLErrorDomain Code=-1206 "The server “www.mywebsite.com” requires a client certificate. 我在stackoverflow上关注了至少4篇关于同一主题的帖子,在其他类似网站上关注了2篇。他们都说了

下面的代码是我使用以前关于ios客户端证书身份验证的文章中的代码。每个人都说这行得通,但为什么对我行得通

我不断得到以下错误:

connection didFailWithError: Error Domain=NSURLErrorDomain Code=-1206 "The server “www.mywebsite.com” requires a client certificate.
我在stackoverflow上关注了至少4篇关于同一主题的帖子,在其他类似网站上关注了2篇。他们都说了同样的话,只是不起作用

我知道我的PKCS12文件是有效的,因为我通过电子邮件将其发送到我的ipad,并将其安装在ipad密钥链上,我可以使用Safari访问和授权证书身份。就在我试图在第三方应用程序中使用
NSURLConnection
时,它拒绝让我这样做

欢迎任何建议,我觉得我已经用尽了我的选择



这条线上有个错误。第二个参数需要设置为“nil”

改为:

    NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:nil persistence:NSURLCredentialPersistenceNone];

您的.p12可能包含中间证书,而您的服务器需要这些中间证书

您可以通过wireshark验证,您的代码将在客户端证书响应中发送重复的身份证书,但没有中间证书

如果出现这种情况,您还需要从第12页提取证书,并传递以创建NSURLCredentials:

int count = SecTrustGetCertificateCount(myTrust);
NSMutableArray* myCertificates = nil;
if (count > 1) {
    myCertificates = [NSMutableArray arrayWithCapacity:SecTrustGetCertificateCount(myTrust)];
    for (int i = 1; i < count; ++i) {  // remove the leaf cert
         [certs addObject:(id)SecTrustGetCertificateAtIndex(myTrust, i)];
    }
}
NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:myCertificates persistence:NSURLCredentialPersistenceNone];
int count=SecTrustGetCertificateCount(myTrust);
NSMutableArray*myCertificates=nil;
如果(计数>1){
myCertificates=[NSMutableArray阵列,容量:SecTrustGetCertificateCount(myTrust)];
对于(inti=1;i
此外,将nil传递给NSURLCredential不应破坏任何代码。参见苹果的示例:
. 但是将空数组@[]传递给NSURLCredential将崩溃。

将证书设置为零实际上破坏了我的代码。别这样!你能告诉我为什么第二个参数变为零吗。当我改变的时候,它开始工作了。这似乎与苹果的文档不符。我想知道为什么会这样。
    NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:nil persistence:NSURLCredentialPersistenceNone];
int count = SecTrustGetCertificateCount(myTrust);
NSMutableArray* myCertificates = nil;
if (count > 1) {
    myCertificates = [NSMutableArray arrayWithCapacity:SecTrustGetCertificateCount(myTrust)];
    for (int i = 1; i < count; ++i) {  // remove the leaf cert
         [certs addObject:(id)SecTrustGetCertificateAtIndex(myTrust, i)];
    }
}
NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:myCertificates persistence:NSURLCredentialPersistenceNone];