为自定义域启用SSL时,Google App Engine中未列出子域

时间:2018-07-27 14:42:58

标签: google-app-engine ssl https google-cloud-platform

我一直在尝试在GAE中为我的应用在子域上使用自己的SSL证书。我已经成功创建了证书,并且能够为一个子域之外的所有域启用该证书。

比方说我的域名是domain.com。我能够为domain.com,www.domain.com,subdomain.domain.com启用SSL证书,但是由于某些原因,www.subdomain.domain.com并未显示在我的证书的潜在自定义域列表中。在这种情况下,我无法通过https://www.subdomain.domain.com访问我的网站,但可以通过https://subdomain.domain.com

此外,我可以为此子域激活一个由Google管理的证书,从而使https://www.subdomain.domain.com可以访问,但是,这当然不是我想要的。关于如何使www.subdomain.domain.com在我的证书的域列表中可见的任何线索,然后才能将其打开?

此帖子报道的问题与this one类似。可悲的是,没有人提供答案,我对此也没有足够的评价。。。

2 个答案:

答案 0 :(得分:1)

根据Google Cloud文档,通过确保您在GCP控制台中拥有正确的权限并在所有父域中验证所有权,您可以使用自定义证书访问子域。

示例:

  • 如果证书用于 SignedXmlWithId signedXml = new SignedXmlWithId(doc); signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2000/09/xmldsig#rsa-sha1"; RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)cert.PrivateKey; signedXml.SigningKey = rsaKey; signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl; Reference CertRefSign = new Reference { Uri = "#" + SecurityTokenReference }; CertRefSign.DigestMethod = "http://www.w3.org/2000/09/xmldsig#sha1"; CertRefSign.AddTransform(new XmlDsigExcC14NTransform()); signedXml.AddReference(CertRefSign); Reference BodySign = new Reference { Uri = "#" + EnvelopeBodyId }; BodySign.DigestMethod = "http://www.w3.org/2000/09/xmldsig#sha1"; BodySign.AddTransform(new XmlDsigExcC14NTransform()); signedXml.AddReference(BodySign); signedXml.ComputeSignature(); XmlElement signedElement = signedXml.GetXml(); ErcotHeaderSecurityXml.AppendChild(signedElement); ,则可以验证www.example.comwww.example.com的所有权。
  • 如果证书用于example.comwww.example.com,则可以验证sub.example.comwww.example.comsub.example.com的所有权。
  • 如果证书用于example.com,则必须验证*.example.com的所有权。

您可以检查this link,主要是提到的部分

  

使用您自己的SSL证书

答案 1 :(得分:1)

多级域可能很棘手。从获得的证书类型开始。来自RFC 2818(重点是我):

  

名称可能包含通配符*,这被认为是   匹配任何单个域名组件或组件片段。 例如   *.a.com匹配foo.a.com,但不匹配bar.foo.a.com f * .com   匹配foo.com但不匹配bar.com。

我怀疑这是造成您麻烦的原因。 Google在App Engine support for SSL certificates中也提到:

  

通配符证书仅支持一级子域。

尝试使用Google管理的证书时,证书很可能是针对相应域(而不是通配符域)准确生成的,因此不会出现上述引用中提到的问题。

我想想到的唯一方法是为每个域级别获取单独的通配符证书。但是,如果您将用户引导到不同域级别的站点,则可能会出现问题,因为证书会更改。

就我个人而言,我只是将我的域名安排在一个域级别中,并避免所有这些问题。也许使用www-subdomain.domain.com之类的东西代替www.subdomain.domain.com