当前位置: 首页 > 知识库问答 >
问题:

Swift:如何使用服务器SSL证书发出Https请求

商茂勋
2023-03-14

嗨,我想用Swift发出Https请求。当前im通过ip地址访问本地服务器。通过访问证书,本地服务器有一个SSL证书。要向服务器发出请求,当前我正在这样做。

  Alamofire.request(.GET, https://ipaddress//, parameters: [param], headers: headers)
        .responseJSON { response in
            print(response.request)  // original URL request
            print(response.response) // URL response
            print(response.data)     // server data
            print(response.result)   // result of response serialization

            if let JSON = response.result.value {
                print("JSON: \(JSON)")


            }
    }

我已经在plist中使用了上述代码来发出请求

 <key>NSAppTransportSecurity</key>
 <dict>
  <key>NSExceptionDomains</key>
  <dict>
        <key>192.168.2.223:1021(my local ip)</key>
        <dict>
        Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
           <!--Include to allow insecure HTTP requests-->
           <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <!--Include to specify minimum TLS version-->
           <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
        </dict>
    </dict>
</dict>

在plist中,我已经给出了这样的结果,但我仍然得到了这样的错误

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

共有1个答案

薛经纶
2023-03-14

重要提示:不要在生产中使用这个。基本上,使用Alamofire,您可以绕过应用程序开发和测试目的的身份验证。请确保您在应用程序在应用程序商店或生产之前删除它:-

func bypassURLAuthentication() {
        let manager = Alamofire.Manager.sharedInstance
        manager.delegate.sessionDidReceiveChallenge = { session, challenge in
            var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
            var credential: NSURLCredential?
            if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
                disposition = NSURLSessionAuthChallengeDisposition.UseCredential
                credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)
            } else {
                if challenge.previousFailureCount > 0 {
                    disposition = .CancelAuthenticationChallenge
                } else {
                    credential = manager.session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace)
                    if credential != nil {
                        disposition = .UseCredential
                    }
                }
            }
            return (disposition, credential)
        }
    }

谢谢你!让我知道这是否有帮助。:)

 类似资料:
  • 问题内容: 我有一台具有通过https运行的rest API的服务器。我想在我的应用程序中调用此rest api,该应用程序在不同的端口中运行,但是由于这是通过https进行的,因此 我有2个文件pulic_key.pem和private_key可用于验证证书。使用golang发送休假请求时如何验证证书?我正在发送休息请求。这就是我现在忽略证书的操作。 问题答案: 您需要将证书的CA添加到传输中,

  • 我们的应用程序可以使用Active Directory用户和组。我们在端口389上使用LDAP进行Active Directory操作。现在,我们的一个客户机希望我们添加一个使用LDAP+SSL进行Active Directory通信的选项。 他们告诉我们,他们在域上安装了一个本地CA,并对LDAP使用自签名证书。他们还告诉我们,他们会提供证书,不需要相互信任,我们应该使用Windows证书存储。

  • 问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我

  • 我有一个react本机项目,我必须使用为https请求创建本机模块。p12认证,但我从未使用Objective-C(有点复杂)或Swift。我找到了一个用于https请求的类,但我没有使用这个类,因为我没有证书。h文件和我的项目文件夹; 我的桥。H 我的桥。M 它作为基本的get请求工作,但当我尝试https服务时,我需要为每个请求固定一个证书。我如何发送此案例的请求?

  • 问题内容: 在以前的Express版本中,我可以这样做: 但是,在较新版本的express中,此功能不再起作用: 我应该打电话来设置证书吗?如果可以,怎么办? 问题答案: 请参阅Express文档以及https.createServer的Node文档(express建议使用的文档): createServer的其他选项位于:http : //nodejs.org/api/tls.html#tls_

  • 我正在努力设置ssl来保护我的endpoint。我从我的组织中获得了一份考试证书 我收到一个. pfx文件 我把它转换成. pem----- 我们有基本的基础设施来解决这个问题。jks文件位于一个名为ssl的文件夹中,只需使用confg文件即可获取。 接下来我让杰米来测试这个。遵循步骤 设置一个测试记录器-- 2.将协议更改为https--- 我曾尝试在互联网上搜索和StackFlow有关测试SS