在Firebase存储上使用SSL自定义域名

时间:2017-10-24 04:42:54

标签: firebase firebase-storage

我可以通过简单地命名与我的域名相同的名称然后将CNAME记录指向c.storage.googleapis.com来获取映射到我的Firebase存储桶的自定义域名。但是,https不起作用,因为证书上的公用名是不同的。我是否可以上传证书,或者更好的是,让GCP或Firebase管理证书?

4 个答案:

答案 0 :(得分:2)

我来晚了一点,这个问题可能已经在其他地方回答了。但是,由于这是我在谷歌搜索该功能时发现的第一个结果,因此什么也没做:

对于初学者来说,假设您有一个assets.somedomain.com指向c.storage.googleapis.com的CNAME,并且创建了一个名为assets.somedomain.com的存储桶。

enter image description here

然后,您上传一个文件,该文件的公共网址如下:

https://firebasestorage.googleapis.com/v0/b/assets.somedomain.com/o/arduino.png?alt=media&token=asdf

可以看作是:

firebasestorage.googleapis.com/v0/b/  
+
assets.somedomain.com
+
/o/
+
arduino.png?alt=media&token=asdf

应该能够使用以下命令查看该文件:

https://assets.somedomain.com/arduino.png?alt=media&token=asdf

哪个

assets.somedomain.com/
+
arduino.png?alt=media&token=asdf

(基本上,您会删除原始基本URL和/o/前缀)

但是,您当然会收到一条警告,告诉您证书无效,因为它是*.storage.googleapis.com的意思。

就我而言,我能够使用cloudflare的通用SSL来规避此问题,它的作用就像是一个不问任何问题的代理。

enter image description here

您再试一次,但是在中间的某个地方,请求变为匿名,并且您得到一个XML,指出您缺少storage.objects.get权限。

<Error>
    <Code>AccessDenied</Code>
    <Message>Access denied.</Message>
    <Details>
        Anonymous users does not have storage.objects.get access to object.
    </Details>
</Error>

这意味着即使查询字符串中包含令牌,代理请求也没有权限。然后,下一步是使存储桶在Google Cloud Console -> Storage中公开可读。

enter image description here

(这可以使用gcloud cli来完成,但是我发现这种方法更容易解释)

请注意使用旧版对象读取器权限,这会阻止访问者实际列出存储桶内容。

在那之后,您应该能够使用:

https://assets.somedomain.com/arduino.png

请注意,您甚至不需要包括“ alt = media”,因为cloudflare将提供文件而不是其元数据。

答案 1 :(得分:1)

我完全同意之前的回答,对此非常感谢。但是我正在以更好的方式编写指令

  1. 使用您在Google Cloud Platform->存储中的自定义域名创建存储桶。

  2. 创建旧版对象查看器的权限并将其添加到所有用户。注意:您必须从过滤器文本中搜索旧版对象查看器

  3. 在具有CNAME资产的域名服务提供商帐户中添加DNS记录,该记录将指向c.storage.googleapis.com。

  4. 如果没有,请创建一个cloudflare帐户

  5. 在cloudflre中添加网站,您需要在其中放置域名而不是子域 将名称服务器详细信息从cloudflare复制到您的DNS服务提供商名称服务器详细信息

  6. 将所有dns记录移至cloudflare中将花费一些时间。

  7. 在cloudflare中转到页面规则并添加asset.yourdomain.com并打开始终使用https

您完成了

答案 2 :(得分:1)

2021 年 4 月更新

Firebase 8.4.0 introduces storage().useEmulator(host, port)

您仍然需要一个反向代理,您可以使用 Google Cloud Load Balancer 或其他工具来实现。

答案 3 :(得分:0)

目前,我们不支持Cloud Storage for Firebase中的自定义域。

您有两种选择:

  1. 使用Firebase托管(开发人员生成的内容)
  2. 通过GCS静态托管(docs
  3. 进行设置

    在任何一种情况下,您都将失去使用Firebase SDK进行云存储的功能,以及它的身份验证和授权功能。

    很高兴了解有关用例的更多信息,看看我们是否应该支持这些用例。

相关问题