代码之家  ›  专栏  ›  技术社区  ›  Kariem

由FireBase宿主生成的SSL证书不包括已连接的域

  •  3
  • Kariem  · 技术社区  · 6 年前

    上周我们两次遇到这个问题。对于具有两个连接域的FireBase宿主项目,证书中不包括一个域。

    尝试连接浏览器似乎返回503状态代码,chrome显示 net::ERR_CERT_COMMON_NAME_INVALID 在控制台中。 curl 退货

    (51)SSL:没有与目标主机名“主机”匹配的备用证书使用者名称。

    (何处) {host} 是主机名/连接的域)

    直接检查证书,即 SAN s,我使用以下命令:

    gnutls-cli --print-cert ${host} < /dev/null \
        | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
        | openssl x509 -noout -text \
        | grep DNS | tr , '\n' | tr -s " "
    

    这将返回100个证书的列表,包括工作域的主机名,但仅返回失败域的默认firebaseapp.com/*.firebaseapp.com条目。

    注意:我正在使用 gnutls-cli 这里,因为看起来 openssl s_client -connect ${host}:443 不在请求中包含主机名,始终为firebaseapp.com/*.firebaseapp.com加载证书

    我已经联系到FireBase支持部门,但他们最后的答复(大约16小时前)是“同一项目有两个不同的域,但我需要确认这是否得到支持”。我非常肯定这是支持的,因为在我分析问题的过程中,我发现在我们负责的域旁边的同两个主机名有400多个SAN。

    关于如何解决这个问题有什么建议吗?我已经尝试删除并重新添加自定义域,但这并没有改变任何内容。

    从技术上讲,切换主机不会太困难,但我们的主要问题是,DNS由我们客户的服务提供商控制,他们很难更改已经在生产中的任何内容。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Kariem    6 年前

    在FireBase支持下来回运行一段时间后,他们发现根域包含 CAA record 不包括 Letsencrypt.org网站 .

    在我们的具体案例中,修复方法是只为子域加密。例如,使用以下设置

    • 域: awesomesite.com
    • 连接的域: firebaseapp.awesomesite.com

    我们可以使用dig查询记录:

    $ dig CAA awesomesite.com +noall +answer && dig CAA firebaseapp.awesomesite.com +noall +answer             
    
    ; <<>> (...) <<>> CAA awesomesite.com +noall +answer
    ;; global options: +cmd
    awesomesite.com.        299 IN  CAA 0 iodef "mailto:cert@awesomesite.com"
    awesomesite.com.        299 IN  CAA 0 issue "digicert.com"
    
    ; <<>> (...) <<>> CAA firebaseapp.awesomesite.com +noall +answer
    ;; global options: +cmd
    firebaseapp.awesomesite.com.    3599    IN  CAA 0 issue "letsencrypt.org"
    

    如你所见,域名 firebaseapp.awsomesite.com网站 有CAA记录 Letsencrypt.org网站 ,而 awsomesite.com网站 没有被碰过。

    现在一切正常,只需更新记录后很短时间。我们不必在FireBase主机上重新启动部署,也不必删除/添加已连接的域(我以前曾尝试解决此问题)。

    纠正问题的备选方案:

    • 删除CAA记录 :从根域(或中间域)中删除CAA记录。
    • 扩展CAA记录 :包括 Letsencrypt.org网站 在根域的CAA记录中的域列表中