- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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/
我们正在创建一个 n 层 Silverlight LOB 应用程序,并且正在考虑使用 .NET RIA 服务。我们不清楚这与我们当前的 WCF 服务 API 的关系在哪里。我们当前的架构是: 银光
上下文:我在celery + rabbitmq堆栈上有一个主工作系统。 系统已docker化(此处未提供worker服务) version: '2' services: rabbit:
我是 Windows Azure 新手,我正在尝试将我的 Web 应用程序部署到 Windows Azure。在我的应用程序中,我使用了一些 Web 服务,现在我想知道如何在 Windows Azur
因此,根据我对服务的了解,自定义对象似乎是写入服务以返回数据的方式。如果我正在编写将用于 1) 填充数据库或 2) 为网站提供信息的服务,是否有返回数据集/数据表而不是包含所有这些的自定义对象列表的用
我在 google 和 stackoverflow 上都找过答案,但似乎找不到。我正在尝试将 azure 实验的输出获取到应用程序。我使用 ibuildapp 和谷歌表单制作了该应用程序。如何使用 g
我不小心删除了 kubernetes svc: service "kubernetes" deleted 使用: kubectl delete svc --all 我该怎么办?我只是想删除服务,以便
我正在努力确定解决网络服务问题的最有效方法。 我的情况:我正在开发一个 Android 应用程序,它通过 Web 服务从 mysql 数据库(在我自己的服务器 PC 上)存储和检索数据。用户按下提交按
我一直在翻阅 Android 文档,我很好奇。什么时候绑定(bind)服务而不是不绑定(bind)服务?它提供了哪些优点/限制? 最佳答案 When would you bind a service
我试图从架构的角度理解 hive,我指的是 Tom White 关于 Hadoop 的书。 我遇到了以下关于配置单元的术语:Hive Services、hiveserver2、metastore 等。
我的问题:安装服务后我无法导航到基地址,因为服务不会继续运行(立即停止)。我需要在服务器或我的机器上做些什么才能使 baseAddress 有效吗? 背景:我正在尝试学习如何使用 Windows 服务
我正在努力就 Web 服务的正确组织做出决定。我应该有多个 ASMX 来代表 Web 服务中的不同功能,还是应该有一个 ASMX? 如果我有多个 ASMX,这不构成多个 Web 服务吗? 如果我只有一
我正在从事一个在 azure 平台上提供休息服务的项目。该服务由 iPhone 客户端使用,这是选择其余方法的重要原因之一。 我们希望通过 AccessControlService(ACS) 并使用
我是 Ionic 新手,正在使用 Ionic 3.9.2 我有几个终端命令来为我的 ionic 应用程序提供服务,但是,我没有发现这两个命令之间有任何区别。 ionic serve 和 ionic s
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
作为项目的一部分,我期待着问这个问题。我过去有开发和使用 Web 服务的经验,并且非常熟悉这些服务。但是,有人告诉我,作为下一个项目的一部分,我将需要使用“安全”的 Web 服务。您能否提供一些见解,
我浏览了很多关于这个问题的信息,但找不到解决方案。这里的问题是,我想使用 Apache Cordova 和 Visual Studio 连接到 wcf。因此,如果有人找到合适的工作解决方案,请发布链接
我在 Windows 服务中托管了一个 WCF(从 MS 网站示例中选取),我可以使用 SOAP UI 访问和调用方法。但是,当我尝试使用 jquery 从 Web 应用程序调用相同的方法时,我不断收
我们构建了一个 Android 应用程序,它从 Android 向我的 PHP 服务器发送 HTTP 请求。作为响应,Web 服务将 JSON 对象发送到 Android 应用程序以显示结果。 就像其
我想在 android 应用程序中调用 soap web 服务,它需要一个枚举值作为参数,它是一个标志枚举。如何从 Android 应用程序将一些值作为标志枚举传递给此 Web 服务方法? 我使用 K
我尝试在模拟器上安装 Google Play。我已按照 Google Dev Site 中的说明进行操作. 使用 ADV 管理器似乎没问题,设备的目标是 Google API 版本 22,但是当我运行
我是一名优秀的程序员,十分优秀!