Ios 当使用客户端证书身份验证时,为什么我总是得到nsurErrorDomain代码=-1206?
下面的代码是我使用以前关于ios客户端证书身份验证的文章中的代码。每个人都说这行得通,但为什么对我行得通 我不断得到以下错误: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篇。他们都说了
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];