SSL 对 www.domain.com 无效

我的 SSL 对 www.domain.com 无效,但对 domain.com 有效。

我该如何使其与 www 安全?我拥有自托管 discourse 时获得的免费 SSL。

你不能。\n\nLet’s Encrypt 也是免费的,所以 :man_shrugging:

是的,我知道它是免费的,但有什么方法可以加密 www?

因为我将其指向 domain.com,但访问时会弹出“此网站不安全”的提示。

因为它仅为 apex 创建,或者您在尝试终止它的任何地方都指错了。\n\n\n[quote="good, post:1, topic:346525, username:good_guy"]\n我获得了自托管 discourse 时免费获得的 SSL\n[/quote]\n\nDiscourse 安装时会创建 SSL。并且它是通过 Let’s Encrypt。所以也许您应该问问现在提供给您的公司。\n\n我不完全明白为什么要费心。

因为当您访问 www.mysite.com 时,它会弹出“此网站不安全,您要继续吗”之类的消息,然后重定向到 SSL 版本 (https)。我会向 Let’s Encrypt 咨询解决方案。

您还需要为 www 创建它。

如果手动创建,则必须使用类似 certbot certonly --nginx -d domain.com -d www.domain.com 的命令。基本上每个子域都需要自己的证书。

我不知道现在情况如何,但通配符证书(适用于根域和所有子域)在使用 Let’s Encrypt 创建时效果不太好。

但再说一次。您不必担心这一点,因为 Discourse 会为您处理——除非您的 DNS 设置错误或由于其他原因导致您的论坛无法访问。

抱歉,我不太明白,DNS 似乎没问题,只是一个 URL 重定向。

www → https://domain.com
这部分显示

www.domain.com 不支持安全连接
您看到此警告是因为此网站不支持 HTTPS

但是使用 domain.com 时一切正常。

我应该尝试 certbot certonly --nginx -d domain.com -d www.domain.com 吗?

我不知道你应该尝试什么,我甚至不知道你在尝试做什么,如何以及在哪里。

我只想说:

  • 您需要为 apex 和 www 使用不同的证书,否则您的网站在 Web 服务器上的配置是错误的
  • 您无需执行任何操作,因为 Discourse 在设置论坛时会为您创建 SSL 证书

有一个关于这个的帖子:

4 个赞

谢谢。

after_ssl:
   # tell letsencrypt what additional certs to get
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d site.com -d www.mysite.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d site.com -d www.mysite.com --fullchainpath"

所以这应该会让 www 指向 mysite.com?还是反过来?

不。它为您提供两个证书。一个用于 apex,一个用于 www。

1 个赞

如果您的主机名是 site.com,那么您就做对了。看起来确实是这样。

通常建议您的网站放在 www.site.com,并将根域重定向到 www。我会做的是将您的主机名更改为 www.site.com,然后反过来操作。

我认为它提供了一个对两者都有效的证书。

4 个赞

您好,我正在顶一下这个帖子,因为我以为昨天已经修复了,但现在访问 www.mysite.com 时仍然出现非 SSL 重定向。

根域名有 SSL,但 www 没有。

尽管我在 app.ymlhooks 中应用了以下内容:

after_ssl:
   # 告诉 letsencrypt 需要获取哪些额外的证书
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d mysite.com -d www.mysite.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d mysite.com -d www.mysite.com --fullchainpath"

您是否遵循了 Set up Let’s Encrypt with multiple domains / redirects 中的说明?

如果您在 OP 的模板中插入 www.mysite.com,它会生成此内容:

after_ssl:
   # tell letsencrypt what additional certs to get
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d www.mysite.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d www.mysite.com  --fullchainpath"
        global: true

所以你是错的。

原来那不是手动输入的。

  after_ssl:
   # tell letsencrypt what additional certs to get
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d =domain2= --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d =domain2=  --fullchainpath"
        global: true

那么我需要这样做,并将domain2替换为mysite.com,然后重新构建应用程序吗?

如果您在字段中输入域名,它将自动填充 =domain2=,这样您就可以复制/粘贴该块。

是的。

1 个赞

嘿,刚做了这个,结果还是一样。我用我的域名做了同样的操作。

没有空格,格式正确。

  after_ssl:
   # 告诉 letsencrypt 需要获取哪些附加证书
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d =mysite.com= --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d =mysite.com=  --fullchainpath"
        global: true

由于您尚未解决此问题,因此我取消了“已解决”框的选中状态。

如果您使用另一个诗节进行了大量重建,则可能会受到速率限制。

模板可能已再次更改,并且此方法不再有效,但我对此表示怀疑。

速率限制的解决方案是等待一周或添加第三个子域。

您可以进入容器并运行命令来请求 URL 并查看错误是什么,但我记不清了。如果您查看

 docker logs app

可能会看到错误。

1 个赞

啊,我找到了!

Cannot issue for \"=mysite.com=\": Domain name contains an invalid character"

所以去掉等号,因为它们是用于变量的?

您是否按照我建议的那样使用了另一个页面上的表单,并将您的主机名填入了空白处?

1 个赞