Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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:自签名证书存在问题。SSL握手错误(-9824)_Ios_Ssl_Certificate_Self Signed - Fatal编程技术网

iOS:自签名证书存在问题。SSL握手错误(-9824)

iOS:自签名证书存在问题。SSL握手错误(-9824),ios,ssl,certificate,self-signed,Ios,Ssl,Certificate,Self Signed,我有一个应用程序,我需要执行两步身份验证,长话短说,我将从服务器获取每个用户的base64编码pem格式证书,并在每个请求中使用它们 首先我生成一个密钥对,生成一个CSR,给他们CSR,他们给我证书,这就是我必须使用它的地方,然后失败。对于每个请求,控制台中都会出现以下错误: cf网络SSLHandshake失败(-4) cf网络SSLHandshake失败(-9824) cf网络SSLHandshake失败(-9824) NSURLConnection/CFURLConnection HTTP

我有一个应用程序,我需要执行两步身份验证,长话短说,我将从服务器获取每个用户的base64编码pem格式证书,并在每个请求中使用它们

首先我生成一个密钥对,生成一个CSR,给他们CSR,他们给我证书,这就是我必须使用它的地方,然后失败。对于每个请求,控制台中都会出现以下错误:

cf网络SSLHandshake失败(-4)

cf网络SSLHandshake失败(-9824)

cf网络SSLHandshake失败(-9824)

NSURLConnection/CFURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9824)

我的做法如下:

-从他们发送给我的PEM格式的签名证书中获取DER编码数据

-制作一个安全证书,我将其添加到钥匙链中

-按标签查询密钥链中的SecIdentityRef

-然后我做一些基本上不必要的事情,比如从身份中获取SecCertificateRef和私钥,主要是为了确定发生了什么

-我还插入了一个来自服务器的CA证书,并从密钥链中获取对该证书的引用(不确定是否需要将其用于凭据,但我尝试使用或不使用它-结果是相同的)

-然后,我使用标识和证书初始化凭据,并在获得NSURLAuthenticationMethodClientCertificate身份验证方法时使用它(我不进行检查,但这是除了服务器信任之外的所有结果)

因此,到目前为止,没有任何内容是空的,所有内容都得到初始化,看起来不错,但请求没有成功。当我尝试在所有请求上使用服务器信任凭据时,我通过并没有得到错误,但我的服务器正在给我一个应该的安全错误。一旦我对任何挑战使用自定义凭据,我就会收到上述错误

注意:我知道代码很混乱,我不应该在每个请求上插入证书,但这仍然是很早的工作,这不是问题,因为refs得到了正确的实例化


这是服务器面临的身份验证挑战。您可以通过以下代码绕过(使用NSURLCOnnection)

注意:如果您在app store上上传应用程序,请不要使用上述内容

对于上面的iOS 9将不起作用,请按如下方式编辑plist

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads

这是服务器面临的身份验证挑战。您可以通过以下代码绕过(使用NSURLCOnnection)

注意:如果您在app store上上传应用程序,请不要使用上述内容

对于上面的iOS 9将不起作用,请按如下方式编辑plist

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads

我已经启用了AllowsArbitraryLoads。我也尝试过这个分类,但没有成功。它会被调用,但不会阻止握手错误的发生。它也与iOS9的TLS1.2策略无关。我已经启用了AllowsArbitraryLoads。我也尝试过这个分类,但没有成功。它会被调用,但不会阻止握手错误的发生。它也与iOS 9针对TLS 1.2的策略无关。
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>