gpt4 book ai didi

ios - 我是否必须购买域才能运行我的应用程序,该应用程序在 AWS 服务器上使用 EC2 实例以使用 HTTPS?

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:54 24 4
gpt4 key购买 nike

我在 TestFlight 上有一个 iOS 应用程序,它使用在 AWS 上的 EC2 实例上运行的 LAMP 服务器。它具有弹性 IP,因此具有公共(public) DNS:ec2-xx-xx-xx-xx.us-east-2.compute.amazonaws.com

所以目前我从应用程序本身直接通过弹性 IP 运行命令,如下所示:

let url = URL(string: "http://xx.xx.xx.xx/API/SignIn.php?username=\(username)");

现在效果很好,但是我想开始将所有内容移动到 HTTPS。

所以我希望像这样使用公共(public) DNS:

let url = URL(string: "https://ec2-xx-xx-xx-xx.us-east-2.compute.amazonaws.com/API/SignIn.php?username=\(username)");

但是这个方法一直对我大喊大叫:

"An SSL error has occurred and a secure connection to the server cannot be made"

到目前为止,我所做的是 openSSL 过程,我创建了证书和 key ,并将其放入 apache 配置文件中:

<VirtualHost _default_:443>
ServerName ec2-xx-xx-xx-xx.us-east-2.compute.amazonaws.com
ServerAlias www.ec2-xx-xx-xx-xx.us-east-2.compute.amazonaws.com
DocumentRoot /var/www/htdocs

SSLEngine on
SSLCertificateFile /home/ubuntu/cert.pem
SSLCertificateKeyFile /home/ubuntu/key.pem
</VirtualHost>

当然,我将安全组设置为 HTTPS 端口 443。

HTTPS 实际上可以从 Safari 访问,但显然它仍然不是一个可信网站。

我尝试通过 CertBot 免费路径 - 但它们不允许 AWS 创建的域使用 SSL 证书(可以理解,它们不太可靠并且经常更改)。

我还尝试通过 AWS 本身,在证书管理器中创建了一个证书(它已被批准并颁发给我),但是当我尝试在负载均衡器中使用它时 - 但证书没有显示那里(也许我做错了,我尝试了很多方法但它似乎不起作用)

我真的很想在不购买域名的情况下解决这个问题,但现在我看不到任何其他方式。有人知道另一种方法吗?

编辑

此外,我宁愿避免让 iOS 忽略安全性的部分,因为我不希望 Apple 拒绝我的应用:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>

最佳答案

使用

URLSessionDelegate

如果您使用 URLSession 执行请求并实现以下功能,则信任证书

func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
print("delegate call")
if challenge.protectionSpace.host == "ec2-xx-xx-xx-xx.us-east-2.compute.amazonaws.com" {
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
} else {
completionHandler(.performDefaultHandling, nil)
}
}

自 SSl 发生以来信任证书,因为证书的签名不匹配。如果您正在使用 Alamofire 执行请求 10,请使用版本 4.7,因为版本 5 尚无法证明无效证书。

关于ios - 我是否必须购买域才能运行我的应用程序,该应用程序在 AWS 服务器上使用 EC2 实例以使用 HTTPS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57206992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com