如何实现通过SSL进行Web服务通信的Web服务?

问题描述:

2016年7月8日更新。如何实现通过SSL进行Web服务通信的Web服务?

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

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

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

需要指出的一点是,我们利用Spring Security框架来确保我们的java应用程序的安全性。由于我们不向任何第三方应用程序公开我们的Web服务,因此所有呼叫(包括对Web服务的调用)都将使用此服务进行身份验证和授权。

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

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

我对SSL的概念完全陌生。

在此先感谢。

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

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

您必须将根证书包含在客户端应用程序的信任库中以实现成功的SSL连接。要做到这一点创建JKS密钥存储包含根证书和定义信任存储如下

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

您可以在jre/lib/security/cacerts

还可以修改默认的信任。如果你需要一些步骤的详细内容,请评论

EDITED

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

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

它允许多个服务器共享使用同一证书的域。证书将包含在安装程序中,并且公共部分将放入客户机的密钥库中。新的复制服务器不需要客户端上的其他配置。我认为它不适用,因为您可能不控制复制服务器的DNS。

2)无根CA

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

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

3)自签名证书根CA

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

出于安全原因,您不应该在安装程序中包含CA证书的私钥。那么,现在证书的创建将变得更加复杂。以前的一种选择是为新主机名创建证书并将其与安装程序一起发送。另一个选择是创建一个PKI基础结构,并带有一个负责签署证书的服务器

+0

我能动态地做到这一点吗?因为我们计划通过UI为应用程序的超级管理员用户指定复制服务器。 – Leejoy

+0

如果您将根CA包含在frontendserver的信任库中,则新复制不会影响此部分。对于复制后端,您需要绑定到IP或复制过程中必须包含的服务器主机名的证书。您每次都要新建一个新证书,从可用的预建列表中选择一个,或者为所有服务器使用通配符 – pedrofb

+0

我已更新我的问题。 – Leejoy