gpt4 book ai didi

java - 如何通过 SSL 实现 Web 服务到 Web 服务的通信?

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:16 24 4
gpt4 key购买 nike

2016 年 7 月 8 日更新。

我必须通过 SSL 实现 Web 服务到 Web 服务的通信。要求就像我们有一个在 Eclipse Virgo 服务器上运行的应用程序。该应用程序包含几个 OSGI 包。目前,当用户输入一些数据来存储应用程序时,应用程序会接受它并将数据保存到基于实体的异构数据源(数据库、使用 JNI 的 C 进程),这工作正常。

现在我需要实现的是,同一个应用程序将部署在多个服务器上,并且在 UI 中会有一个选项来指定复制服务器(即运行相同应用程序并且需要复制数据的服务器) .

为此,我们计划创建一个单独的包来拥有 Restful 网络服务,并移动所有持久性逻辑以将数据保存到异构数据源。此 Rest API 将检查可用的复制服务器,并且必须通过这些服务器中的 Rest 服务传递相同的数据。

需要注意的一点是,我们利用Spring Security框架来保证我们java应用程序的安全。由于我们不向任何第三方应用程序公开我们的网络服务,因此包括对网络服务的调用在内的所有调用都将使用它进行身份验证和授权。

我们这样做不是为了负载平衡。每台服务器都是独立的,我们使用安装程序安装应用程序以及所需的软件。这个想法是使用安装程序来创建和安装自签名证书。在安装应用程序时,我们可能不知道是否需要将其复制到另一台服务器。因为并非此应用程序的每个客户端都需要复制服务器。需要使用复制服务器的客户端必须能够在后期通过 Java web 应用程序管理屏幕启用和禁用一个或多个复制服务器。从那里开始,一个服务器中发生的任何数据操作都需要以双向方式复制到其他服务器。

所以我的问题是我们如何动态获取公钥并加密请求以双向方式连接到那些复制服务器,因为它在 SSL 中运行?

我对 SSL 的概念完全陌生。

提前致谢。

最佳答案

如果您使用由受信任的 CA 颁发的证书,则不需要额外的配置。但我猜你会使用自签名证书,因为你有多个服务器并且它们的使用不是公开的

每个服务器都需要将自己的 SSL 证书绑定(bind)到服务器的 IP 或主机名。我建议为根颁发的每个服务器证书创建一个根证书和一个 SSL 证书。也可以使用通配符类型 * .domain.com。

您必须在客户端应用程序的信任库中包含根证书才能成功建立 SSL 连接。为此,创建一个包含根证书的 JKS keystore 并定义信任库如下

System.setProperty ("javax.net.ssl.trustStore","path/to/your/truststore");
System.setProperty ("javax.net.ssl.trustStorePassword", "password");

您也可以在 jre/lib/security/cacerts 修改默认信任库

如果你需要一些步骤的细节,请评论

已编辑

要创建和分发您的证书,您可以评估几个选项

1) 通配符证书 *.domain.com

它允许多个服务器使用同一个证书共享域。证书将包含在安装程序中,公共(public)部分将包含在客户端的 keystore 中。新的复制服务器不需要在客户端上进行额外配置。我认为它不适用,因为您可能无法控制复制服务器的 DNS。

2) 没有根 CA 的自签名证书

每个服务器生成自己的自签名证书。然后客户端必须通过将证书包含在 trustore 中来信任该证书。通常我不会推荐自动下载过程,因为它涉及到连接到一个不安全的源(目前),从 ssl 连接获取证书 X509,打开信任库并添加一个新证书,但由于有一个运算符(operator)明确执行操作,我觉得可行

在这里查看答案 https://stackoverflow.com/a/37861267/6371459显示如何创建自定义 TrustManager 以依赖主机。在此之后打开服务器中的信任库文件,添加证书并保存(参见 Programmatically Import CA trust cert into existing keystore file without using keytool )

3) 具有根 CA 的自签名证书

证书在客户端创建,但由您的 PKI 签名(使用公钥基础设施)。优点是您的客户端只需要将根 CA 包含到信任库中。只要您使用此根 CA 颁发的证书,就会信任新的复制服务器。

出于安全原因,您不应在安装程序中包含 CA 证书的私钥。那么,现在证书的创建就比较复杂了。一种选择是预先为新主机名创建证书并将其与安装程序一起发送。另一种选择是使用负责签署证书的服务器创建 PKI 基础设施

关于java - 如何通过 SSL 实现 Web 服务到 Web 服务的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38246344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com