我有一个相对简单的场景,其中 WebDAV 服务器在本地网络中通过 HTTPS 运行。为了进行测试运行(也可能是最终解决方案),我将其作为服务器运行sftpgo在 Windows 10 主机上。请注意,一切看起来都运行良好,但是...设置对我来说似乎比它应该的更复杂(而不是因为选择的服务器)。
我必须创建一个虚拟 CA 和证书,并将其导入到客户端设备 - 仍然是 Windows 主机,在此测试用例中是 127.0.0.1 上的同一台机器。然后我必须摆弄hosts
文件以确保证书(在 xanadu.local 等虚构域名上)有效。
当我必须在生产环境中复制它时,一切都会变得非常复杂!请注意,此服务器将始终在本地网络上访问,例如 192.168.0.100;SSL 传输层只会避免任何人窥视传输的数据和授权访问。
从配置的角度来看,有什么更好/更简单的解决方案?
[编辑] 我还假设互联网可以无法到达来自本地网络,因此无法查询外部受信任的 CA。不过,WebDAV 传输应该可以完美运行。
答案1
我可以提炼出两个问题:
从配置的角度来看,有什么更简单的解决方案吗?
不要使用 SSL。
我会在评论中为此受到批评,但根据你的风险分析,这可能完全没问题。除了你(或你的管理层)之外,没有人可以做出这种评估。(请注意,优点/缺点和评估本身非常具体,并且主要基于观点,因此超出了超级用户的范围)
另一个简单的解决方案是使用 SSL,但禁用任何客户端验证。这样您就可以避免证书/CA 分发问题。没有人可以随意窥探传输中的数据,但他们可以执行中间人攻击并以此方式获取数据。再次强调,风险分析。
从配置的角度来看,有什么更好的解决方案吗?
我想到两个解决方案:
从外部证书颁发机构获取证书。您仍然可以在 DNS 的“全局地址空间”中使用域名。我将其用于
*.int.mtak.nl
我所有的家庭事务,并且我可以完美地创建证书,即使域名不会永久存在于互联网上。它们必须在某个时候通过 Let's Encrypt 进行验证,但可以通过使用具有不同验证过程的其他 CA 来避免这种情况。请注意,验证时 DNS 中的信息不必正确;它只需要域名存在。
关于连接:证书验证是一个离线过程。您需要互联网访问的唯一原因是检查 OCSP/CRL 是否被撤销。同样,这是一个您需要评估的风险。创建您自己的证书颁发机构并将其导入到所有客户端。这样,您就可以拥有一个完全离线的 CA,您可以控制其验证、证书颁发和 CRL 分发。可以使用自动化工具(Ansible、Puppet、shell 脚本等)将 CA 分发给客户端。如果您在 Active Directory 域中,该域可能已经提供了一个存在于所有域客户端上的 CA(这省去了很多麻烦)。不过要小心。设置 CA 相当简单。正确执行并获得比外部 CA 更安全的系统是非常难的。