无法向本地服务器发出 HTTPS 请求

Posted

技术标签:

【中文标题】无法向本地服务器发出 HTTPS 请求【英文标题】:Can't make HTTPS requests to local server 【发布时间】:2020-05-30 17:38:46 【问题描述】:

我有一个在 Laravel Homestead 上运行的本地服务器:

https://laravel.com/docs/5.3/homestead

Homestead 预装了 SSL 证书,我通过 HTTPS 提出所有请求。但是,当尝试从我的 ios 应用发出请求时,我收到以下错误:

ATS failed system trust
Connection 3: system TLS Trust evaluation failed(-9802)
Connection 3: TLS Trust encountered error 3:-9802
Connection 3: encountered error(3:-9802)
Task <892C4896-1D02-4465-AF06-D7534BE39828>.<1> HTTP load failed, 0/0 bytes (error code: -1200 [3:-9802])
Task <892C4896-1D02-4465-AF06-D7534BE39828>.<1> finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo=NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=(
    "<cert(0x7fc76e82d800) s: mydomain.test i: Homestead homestead Root CA>"
)

我已将以下内容添加到我的 Info.plist:

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

在阅读了一些关于通过 Alamofire 和 Moya 进行 SSL pinning 的文章和 Github 问题后,我还做了以下工作:

let evaluators: [String: ServerTrustEvaluating] = [
    "mydomain.test": DisabledEvaluator()
]

let manager = ServerTrustManager(evaluators: evaluators)
let session = Session(serverTrustManager: manager)

let provider = MoyaProvider<T>(session: session, plugins: [NetworkLoggerPlugin(verbose: true)])

我还在我的 Mac 上安装了证书并将其设置为“始终信任”,但我在运行 iOS 应用程序时仍然收到错误消息。

我做错了什么?我错过了什么?

【问题讨论】:

【参考方案1】:

这是我的解决方案,可能无法完成您的问题。 我不使用 url 作为“myweb.local”。我在开发中使用直接 IP 并更改应用程序的端口。当您使用端口时,您将不需要 SSL。 示例:

127.0.0.1:8000

【讨论】:

以上是关于无法向本地服务器发出 HTTPS 请求的主要内容,如果未能解决你的问题,请参考以下文章

向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误

不允许向本地主机发出请求 - swift

向 wcf 服务发出 https 请求:根据验证程序,远程证书无效

json-server 无法通过本地 IP 访问

如何从后端向用户本地主机上的另一台服务器发出请求

Chrome 65 - 无法从本地文件向 Flask 发出 POST 请求