我有一个在公共域中运行的 Web 应用程序,使用由https://gethttpsforfree.com/
它非常有效。
问题是,有时我需要直接在内部网(不在我的域中)的客户端服务器上安装此 web 应用程序,并且它需要客户端内部网中特定主机名的另一个证书。
因为,我不想分享我的真实域私钥,也不想为每个连接的客户端浏览器添加安全例外,如何解决这个问题?
在步骤 2 中https://gethttpsforfree.com/我可以添加其他需要保护的域名,我认为这可以解决问题,但不确定创建新证书是否会使我之前的证书无效。
有人可以给我一些关于如何解决这个问题的建议吗?
更新:实际上,我找到了一种方法:
1)在我的互联网域名中创建一个子域名;
2)为该子域名生成一个 let's encrypt 证书(internet.domain.pem 和 internet.domain.key);
3) 使用此 internet.domain.pem 和 internet.domain.key 设置 webapp(apache);
4)将internet.domain的内网dns设置为内网webapp服务器;
证书在我的 docker 容器测试中有效,工作正常。但是,我不确定使用 intranet.domain.com 生成有效证书以在内部网中使用(仅更改内部网的 dns)是否没有问题。
有人能帮我看看我是否正在产生一些严重的安全问题(以及是什么)吗?
答案1
Let's Encrypt(gethttpsforfree.com 基于此)需要验证您是否“拥有”要为其生成证书的域名,方法是为该域名设置公共 DNS 条目,或创建可通过该域名的 HTTP 访问的特定文件(请参阅https://letsencrypt.org/how-it-works/)。
但是,由于这是关于内联网域的,因此本质上它不是公开可访问的。这意味着 Let's Encrypt 无法使用这两种方法来验证域,因此您无法通过这种方式生成证书。即使在第 2 步中添加额外的域,也需要以相同的方式进行验证。
我知道的唯一选择是创建自己的证书颁发机构,让客户端浏览器信任该 CA,然后为相关域生成自己的证书,但我认为您在问题中表示您想避免这种情况。
答案2
我找到了一个方法:
1)在我的互联网域名中创建一个子域名;
2)为该子域名生成一个 let's encrypt 证书(intranet.domain.com.pem
和intranet.domain.com.key
);
intranet.domain.com.pem
3)用这个和设置webapp(apache)intranet.domain.com.key
;
intranet.domain.com
4)设置内网webapp服务器的内网dns ;
然后,现在我在我的内部网中运行了一个有效的签名且受信任的证书。