如何认证本地服务器?SSL/TLS HTTPS

Mer*_*rha 0 ssl https web-deployment

前传:我创建了一个应与我们公司网站交互的 Web 应用程序。我与负责网站的其他开发人员(不同的公司分支机构)远程工作。我对网络开发完全陌生,没有“上线”经验。

我的应用程序使用 tomcat 8.5 在本地公司服务器上运行。公司网站中包含一个 html 页面,它从我的服务器加载不同的 JavaScript 文件(和 css)。与我的应用程序的交互发生在那里。我曾经通过 HTTP 执行此操作,一切正常。例如:

<script src="http://172.17.123.123/MyProject/js/script.js"></script>
Run Code Online (Sandbox Code Playgroud)

问题:现在开发人员告诉我,我应该获取证书并使用 HTTPS 来使我的服务器和公司 Web 服务器之间的通信更加安全。这就是他所做的,因为他管理的网站可以通过 Internet 访问,并且他可以轻松地从受信任的 CA 生成证书。他不知道如何为本地服务器执行此操作。

我设法启用 HTTPS 并使用自签名证书。现在我用

<script src="https://172.17.123.123:8443/MyProject/js/script.js"></script>
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

无法加载资源:net::ERR_CERT_AUTHORITY_INVALID

我想为我的服务器使用来自 CA 的证书,但了解到不可能为本地主机获取证书。但我没有找到任何有关本地服务器的信息。我想同样的原则也适用。

问题:使用 HTTPS 进行网络服务器和本地公司服务器之间的通信是否有益?如果是这样,我如何生成可信证书?自签名证书就足够了吗?

dav*_*085 5

你谈论你的服务器和网络服务器之间的通信,但没有任何通信;Web 服务器正在向浏览器提供一个页面,其中包含对服务器上资源的引用,因此浏览器正在与您的服务器进行通信,并且浏览器不信任您的自签名证书。

如果浏览器和服务器之间的网络实际上不安全(例如,包括 DMZ 或其他不受信任的区域或不安全的链接)或必须被视为不安全(例如,处理支付卡),则浏览器和服务器之间的通信上的 HTTPS是有益的PCI DSS 下的数据)。从您提供的信息中不可能评估这一点,而且您的公司几乎肯定不应该允许您发布使之成为可能的信息 - 而且它对其他人也没有用,这违反了 StackExchange哲学。您应该咨询公司网络安全负责人,了解是否需要 HTTPS、可能的选项以及他们可能支持或协助的内容。

确实,您无法获得本地主机的公共信任证书,但这并不重要,因为您没有使用本地主机。您使用的是私有(rfc1918)又名“内联网”地址,这是完全不同的,但您也无法获得这些地址的公开信任的证书。

明显的技术选择是:

  • 使用自签名证书(用于地址)并配置将使用此应用程序的每个浏览器以信任该证书。这可能会有所不同,具体取决于您的用户的类型和数量。如果它们都在加入域的 Windows 上并使用 IE/Edge 或 Chrome 但不使用 Firefox,则中央管理员可能只创建一个“推送”证书的 GPO,然后您就完成了。如果有数千个平台分布在世界各地,您可能需要花费数月的时间来培训和协助所有人导入证书,可能包括让人们翻译成外语。

    如果您还不知道,如果您的任何用户使用 Chrome,则证书必须在主题备用名称 (SAN) 以及主题CommonName 中具有颁发机构名称(此处为地址)。其他浏览器目前不需要这样做,但将来可能会这样做,因为它已经成为 CABforum 政策很长一段时间了。许多常用于创建自签名证书的工具(例如 OpenSSL 命令行和 Java keytool)不会自动执行此操作。(公共 CA 是这样做的。)已经有很多关于此的问题,您可以搜索它们(如果适用)。

    同样对于这种方法,除非您已经知道,否则您应该验证分配的地址将保持稳定。一些公司网络需要不时地重新安排地址分配,原因包括办公室的开设、扩大或关闭、重大项目的转移等。如果每年有成千上万的人不得不重复几次不熟悉和神秘的证书导入,你会变得很不受欢迎。

  • 在公司域下为您的系统获取一个(子)域名,该域名仅在公司内部网络上解析为您的计算机地址 - 该解析不需要也不应该公开。然后获取该子域名的公共信任证书。使用 DNS-01 的 LetsEncrypt 可以向您颁发域名证书,即使无法从公共 Internet 访问使用该域名的系统,只要您控制该域名的 DNS。OTOH 如果您的公司已经拥有网络存在和证书,那么它应该已经建立了获取它们的流程;我上面提到的网络安全人员应该知道这一点。