如何认证本地服务器? SSL/TLS HTTPS
How to certify a local server? SSL/TLS HTTPS
前传: 我创建了一个应该与我们公司网站交互的网络应用程序。我与负责网站的其他开发人员(不同的公司分支机构)远程工作。我是网络开发的新手,没有 'going live'.
方面的经验
我的应用程序在使用 tomcat 8.5 的本地公司服务器上运行。公司网站中包含一个 html 页面,可从我的服务器加载不同的 JavaScript 文件 (& css)。与我的应用程序的交互发生在那里。我曾经通过 HTTP 执行此操作,一切正常。例如:
<script src="http://172.17.123.123/MyProject/js/script.js"></script>
问题:现在开发人员告诉我,我应该获得证书并使用 HTTPS 来使我的服务器和公司 Web 服务器之间的通信更加安全。这就是他所做的,因为他管理的网站可以在 Internet 上访问,并且他可以轻松地从受信任的 CA 生成证书。他不知道如何为本地服务器执行此操作。
我成功启用了 HTTPS 并使用了自签名证书。现在我用
<script src="https://172.17.123.123:8443/MyProject/js/script.js"></script>
但是我得到这个错误:
Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID
我想为我的服务器使用来自 CA 的证书,但了解到不可能为本地主机获得证书。但是我没有找到关于本地服务器的任何信息。我想同样的原则也适用。
问题:在网络服务器和本地公司服务器之间使用 HTTPS 进行通信是否有益?如果是这样,我如何生成受信任的证书?自签名证书是否足够?
你说你的服务器和网络服务器之间没有通信,但是没有; Web 服务器正在为 浏览器 提供一个页面,其中包含对您服务器上资源的引用,因此 浏览器 正在与您的服务器通信,并且它是不信任您的自签名证书的浏览器。
如果浏览器和服务器之间的网络实际上不安全(例如包含 DMZ 或其他不受信任的区域或不安全 link) 或必须被视为不安全(例如,根据 PCI DSS 处理支付卡数据)。从您提供的信息中无法评估这一点,而且您的公司几乎肯定不会允许您发布使之成为可能的信息——而且它对其他任何人都没有用,这违反了 StackExchange哲学。您应该咨询负责公司网络安全的人员,了解是否需要 HTTPS,以及可能的选项以及他们可能支持或协助的内容。
您确实无法获得本地主机的 public 受信任的证书,但这并不重要,因为您没有使用本地主机。您正在使用私有 (rfc1918) 又名 'intranet' 地址,这是完全不同的,但您也无法获得 publicly-trusted 证书。
明显的技术选择是:
使用自签名证书(用于地址)并配置将使用此应用程序的每个浏览器信任该证书。这可能会有所不同,具体取决于您的用户喜欢什么以及他们有多少。如果他们都加入域 Windows 并使用 IE/Edge 或 Chrome 而不是 Firefox,中央管理员可能只创建一个 'pushes' 证书的 GPO,你是完毕。如果在世界各地的十几个平台上有数千个,您可能需要花费数月的时间来培训和协助所有人导入证书,可能包括让人们翻译成外语。
如果您还不知道,如果您的任何用户使用 Chrome,该证书必须在主题备用名称 (SAN) [=26= 中具有权限名称,这里是地址]以及主题通用名。其他浏览器目前不需要这个,但将来可能会因为它已经成为 CABforum 政策已有一段时间了。许多常用于创建自签名证书的工具,如 OpenSSL 命令行和 Java keytool,不会自动执行此操作。 (Public CAs 做。)这方面已经有很多问题,如果适用,您可以搜索它们。
同样对于这种方法,除非您已经知道,否则您应该验证分配的地址将保持稳定。一些公司网络不时需要重新安排他们的地址分配,例如办公室的开设或扩建或关闭,重大项目搬迁等。如果成千上万的人每年都要重复几次陌生而神秘的证书导入,你会变得很不受欢迎。
在公司域下为您的系统获取一个(子)域名,该域名仅在公司内部网络上解析为您机器的地址 -- 该解析不需要也不应该 public。然后为该子域名获取 publicly-trusted 证书。使用 DNS-01 的 LetsEncrypt 可以为您颁发域名证书,即使无法从 public Internet 访问使用该域名的系统,只要您控制它的 DNS。 OTOH 如果您的公司已经拥有网络存在和证书,那么它应该已经建立了获取它们的流程;我上面提到的网络安全人员应该知道这一点。
前传: 我创建了一个应该与我们公司网站交互的网络应用程序。我与负责网站的其他开发人员(不同的公司分支机构)远程工作。我是网络开发的新手,没有 'going live'.
方面的经验我的应用程序在使用 tomcat 8.5 的本地公司服务器上运行。公司网站中包含一个 html 页面,可从我的服务器加载不同的 JavaScript 文件 (& css)。与我的应用程序的交互发生在那里。我曾经通过 HTTP 执行此操作,一切正常。例如:
<script src="http://172.17.123.123/MyProject/js/script.js"></script>
问题:现在开发人员告诉我,我应该获得证书并使用 HTTPS 来使我的服务器和公司 Web 服务器之间的通信更加安全。这就是他所做的,因为他管理的网站可以在 Internet 上访问,并且他可以轻松地从受信任的 CA 生成证书。他不知道如何为本地服务器执行此操作。
我成功启用了 HTTPS 并使用了自签名证书。现在我用
<script src="https://172.17.123.123:8443/MyProject/js/script.js"></script>
但是我得到这个错误:
Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID
我想为我的服务器使用来自 CA 的证书,但了解到不可能为本地主机获得证书。但是我没有找到关于本地服务器的任何信息。我想同样的原则也适用。
问题:在网络服务器和本地公司服务器之间使用 HTTPS 进行通信是否有益?如果是这样,我如何生成受信任的证书?自签名证书是否足够?
你说你的服务器和网络服务器之间没有通信,但是没有; Web 服务器正在为 浏览器 提供一个页面,其中包含对您服务器上资源的引用,因此 浏览器 正在与您的服务器通信,并且它是不信任您的自签名证书的浏览器。
如果浏览器和服务器之间的网络实际上不安全(例如包含 DMZ 或其他不受信任的区域或不安全 link) 或必须被视为不安全(例如,根据 PCI DSS 处理支付卡数据)。从您提供的信息中无法评估这一点,而且您的公司几乎肯定不会允许您发布使之成为可能的信息——而且它对其他任何人都没有用,这违反了 StackExchange哲学。您应该咨询负责公司网络安全的人员,了解是否需要 HTTPS,以及可能的选项以及他们可能支持或协助的内容。
您确实无法获得本地主机的 public 受信任的证书,但这并不重要,因为您没有使用本地主机。您正在使用私有 (rfc1918) 又名 'intranet' 地址,这是完全不同的,但您也无法获得 publicly-trusted 证书。
明显的技术选择是:
使用自签名证书(用于地址)并配置将使用此应用程序的每个浏览器信任该证书。这可能会有所不同,具体取决于您的用户喜欢什么以及他们有多少。如果他们都加入域 Windows 并使用 IE/Edge 或 Chrome 而不是 Firefox,中央管理员可能只创建一个 'pushes' 证书的 GPO,你是完毕。如果在世界各地的十几个平台上有数千个,您可能需要花费数月的时间来培训和协助所有人导入证书,可能包括让人们翻译成外语。
如果您还不知道,如果您的任何用户使用 Chrome,该证书必须在主题备用名称 (SAN) [=26= 中具有权限名称,这里是地址]以及主题通用名。其他浏览器目前不需要这个,但将来可能会因为它已经成为 CABforum 政策已有一段时间了。许多常用于创建自签名证书的工具,如 OpenSSL 命令行和 Java keytool,不会自动执行此操作。 (Public CAs 做。)这方面已经有很多问题,如果适用,您可以搜索它们。
同样对于这种方法,除非您已经知道,否则您应该验证分配的地址将保持稳定。一些公司网络不时需要重新安排他们的地址分配,例如办公室的开设或扩建或关闭,重大项目搬迁等。如果成千上万的人每年都要重复几次陌生而神秘的证书导入,你会变得很不受欢迎。
在公司域下为您的系统获取一个(子)域名,该域名仅在公司内部网络上解析为您机器的地址 -- 该解析不需要也不应该 public。然后为该子域名获取 publicly-trusted 证书。使用 DNS-01 的 LetsEncrypt 可以为您颁发域名证书,即使无法从 public Internet 访问使用该域名的系统,只要您控制它的 DNS。 OTOH 如果您的公司已经拥有网络存在和证书,那么它应该已经建立了获取它们的流程;我上面提到的网络安全人员应该知道这一点。