【问题标题】:HTTPS setup for the URL of Realm Object Server为 Realm Object Server 的 URL 设置 HTTPS
【发布时间】:2017-08-03 13:59:49
【问题描述】:

在准备提交应用程序时,我发现 Apple 要求所有调用都必须使用 HTTPS。在我的代码中,SyncUser.logIn 中的服务器 URL 只是普通的 HTTP 调用 http://mywebsite:9080

我的配置详情

  • 我有一个注册域名http://example.com。它只是一个域,其下没有托管任何内容。
  • ROS 已安装在 Amazon EC2 实例 (Ubuntu 16.04) 上
  • http://example.com 的域注册商处,我将 URL 指向了我的 EC2 实例上的弹性 IP 地址。
  • 我可以通过以下方式访问领域仪表板:http://example.com:9080

两难境地

SSL / HTTPS 对我来说是一个新领域。 我做了一些阅读,我意识到我的域需要一个 SSL 证书。然而:

  1. 我通过AWS Certificate Manager 为域颁发了证书,但它无法部署到我的实例上。 EC2 isn't supported
  2. 我还尝试了certbot — 它生成了保存在我的 EC2 实例的 /etc 目录下的密钥,但我不知道如何使用它们。

所以当我在 SSL 检查器中输入我的网站时,它正确地说没有找到 SSL 证书。

我需要退出 AWS 吗?

我找到了answer here,但这似乎是一个过时的答案(或者可能太老套了)。 我还发现了这些 slides 可以做到这一点,但它们完全超出了我的想象。

【问题讨论】:

    标签: amazon-ec2 https ssl-certificate realm-mobile-platform realm-object-server


    【解决方案1】:

    Apple 的要求比您最初的问题更细微,并且截止日期已延长,尚未具体说明。

    请参阅pinned forum post from Feb 2017 并引用点:

    • NSAllowsArbitraryLoadsInWebContent 让您拥有严格的 ATS 字典,但仍然在 Web 视图中加载任意内容 (WKWebView, UIWebView, WebView)
    • 自 WWDC 以来的新功能NSAllowsLocalNetworking 让您 选择退出 ATS 进行本地网络 - 要了解更多信息,请参阅 Information Property List Key Reference.NSAppTransportSecurity 部分
    • 自 WWDC 以来的新功能NSAllowsArbitraryLoadsForMedia 让您 选择退出 ATS 以获取媒体资源 — 要了解更多信息,请参阅 NSAppTransportSecurity部分Information Property List Key Reference.
    • NSRequiresCertificateTransparency 让您选择加入 Certificate Transparency检查
    • 现在采用 RC4 的密码套件 默认禁用
    • 现在默认情况下禁用 SSLv3 协议 安全传输层
    • 采用 SHA-1 或 3DES 的密码套件是 仍然受支持,但您应该考虑远离它们
    • 自 WWDC 以来的新功能NSURLConnection 现在支持 ATS 最低 TLS 版本 — 以前 NSURLConnection 会忽略最低 TLS 版本 由 ATS (r.23167645) 规定。此错误已修复。如果你是 为您的网络使用 NSURLConnection,确保运行您的应用程序 在最新发布的操作系统上,以确保它仍然按预期工作。

    Apple announced on Dec 21 2016 此截止日期已延长,我们将在新的截止日期确认后提供另一次更新

    【讨论】:

      【解决方案2】:

      我对 AWS 的 SSL 内容并不十分熟悉,但实现这一点的一种简单方法是在您的 EC2 实例上使用 Nginx 作为 SSL 反向代理。您将使用 Nginx 设置您的 SSL 证书,并让 Nginx 将流量路由到您的领域对象服务器。您还可以在标准端口 443 上侦听(如果您愿意),并且可以保持 9080 端口对外部流量关闭。

      这里是使用 Nginx 设置反向代理的说明:https://www.techandme.se/set-up-nginx-reverse-proxy/

      以下是有关设置 WebSockets 代理(ROS 使用)的信息:https://www.nginx.com/blog/websocket-nginx/

      此外,这里是关于如何使用 Let's Encrypt(一个免费的、受信任的证书颁发机构)获取免费证书并保持更新的指南:https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04

      这是我使用上述所有内容的实际工作 Nginx 配置:

      # Realm Object Server http to https redirection
      #
      server {
          listen 80;
          listen [::]:80;
          server_name yourdomain.com;
          return 301 https://yourdomain.com$request_uri;
      }
      
      # Realm Object Server reverse proxy
      #
      server {
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
          ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
          ssl_session_cache shared:SSL:200m;
          ssl_session_timeout 180m;
          ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
          ssl_prefer_server_ciphers on;
          ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
          ssl_dhparam /etc/ssl/certs/dhparam.pem;
          ssl_stapling on;
          ssl_stapling_verify on;
          ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;
          resolver 8.8.8.8 8.8.4.4;
      
          add_header Strict-Transport-Security "max-age=31536000" always;
      
          server_name yourdomain.com;
      
          set $upstream 127.0.0.1:9080;
      
          location / {
              proxy_pass http://$upstream;
              proxy_http_version 1.1;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
              proxy_pass_request_headers      on;
              proxy_buffering off;
              client_max_body_size 0;
              proxy_read_timeout 36000s;
              proxy_redirect off;
              proxy_ssl_session_reuse off;
          }
      }
      

      【讨论】:

      • 非常感谢您的回答本。我认为我没有足够的知识来使用 Nginx。我现在将根据我目前的发现来编辑我的问题。
      • 没问题,也许这会对遇到这个问题的其他人有所帮助。
      • 另外,由于我昨天自己设置了这个,我将编辑我的答案以显示我实际工作的 Nginx 配置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多