首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了使用HTTPS,我必须购买一个域才能运行在AWS服务器上使用EC2实例的应用程序吗?

为了使用HTTPS,我必须购买一个域才能运行在AWS服务器上使用EC2实例的应用程序吗?
EN

Stack Overflow用户
提问于 2019-07-25 17:03:34
回答 1查看 72关注 0票数 0

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

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

代码语言:javascript
复制
let url = URL(string: "http://xx.xx.xx.xx/API/SignIn.php?username=\(username)");

现在,这是很好的工作,但我想要开始移动所有的HTTPS。

因此,我希望这样做,使用公共DNS:

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

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

“出现SSL错误,无法与服务器建立安全连接”

到目前为止,我所做的是openSSL过程,我创建了一个证书和密钥,并将它放在apache文件中:

代码语言:javascript
复制
<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忽略安全性的部分,因为我不希望苹果拒绝我的应用程序:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2019-07-25 18:41:05

使用

URLSessionDelegate

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

代码语言:javascript
复制
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来执行请求,请使用Version4.7,因为版本5还不能验证无效的证书。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57206992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档