在我们的SAAS应用程序

时间:2017-01-21 15:36:05

标签: node.js ssl dns

我在node express上有一个SAAS应用程序。该应用程序为每个注册创建租户子域,如mybiz.ourgreatapp.com。

我们希望允许用户在该帐户/网址上指定自定义域名,即他们已购买的域名。

somedomainibought.com ----> mybiz.ourgreatapp.com

我们还需要该域名为HTTPS。

Uur域,通配符子域是SSL。

所以:https://mybiz.ourgreatapp.com:有效。

我们尝试使用适用于我们的子域路由的https://www.cloudflare.com解决问题,但我们无法将其设置为使用客户域并将其指向这些路由。

我们如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

要为不同的域创建证书

您需要解决2个问题:

  1. 您的客户应将其域指向您的IP /域才能使用您的服务。解决方案:您可以创建一个专用域,例如cname.ourgreatapp.com。如果客户要使用自己的自定义域,则应将其域(在99%的情况下,将是客户的子域)指向您的CNAME。在1%的情况下,客户希望附加域-更好地为此类客户提供公共IP。由于并非所有的DNS提供商都支持将CNAME用于一级域
  2. 您需要为客户颁发证书。颁发证书时,必须证明您对该域的权利(不同的证书颁发机构提供了多个选项来执行此操作)。幸运的是,当已有客户指出您的CNAME时,您可以使用“ HTTP验证类型”(当您应在某个URL上提供特定文本,并且CA通过执行GET请求来验证该秘密值时。例如,免费的LetsEncrypt证书提供者将在URL customerdomain.com/.well-known/acme-challenge/)上验证特定值 我想这第二步太重了,无法由您的node-express应用程序处理。最好将SSL签名逻辑提取到单独的层,甚至提取到单独的微服务。

为了自动执行此过程,您可以创建一个服务,该服务将为您所有客户的域请求SSL(例如,通过实施ACME协议,从LetsEncrypt请求证书)。并设置代理服务器,它将代理来自所有客户域的请求,获取数据并使用适当的证书对响应进行签名。

您还可以从框中检查已经执行此操作的第三方解决方案。例如,Kilo SSL,Cloudflare等。我还没有尝试过使用Cloudflare,但是只是检查了使用KiloSSL是否很容易

答案 1 :(得分:0)

您可以设置反向代理(例如使用nginx)。配置服务器名称为somedomainibought.com的虚拟主机,该代理传递给https://mybiz.ourgreatapp.com/。配置此虚拟主机以使用ssl并侦听端口443。

然后,必须使用指向反向代理的IP地址的A记录配置域somedomainibought.com的区域文件。