假设我想发布一个商业产品,它有两个用Java编写的组件,使用RESTful API在本地网络上相互通信.它可能是一个音乐管理器,一个联系人数据库,一本食谱---重要的是这是一个合理且非常可能的场景.
请注意,我说的是两个组件通过本地网络相互通信 - 而不是与我的服务器进行通信.
那么如何确保通信安全?
我知道如果我为这个世界建立一个HTTP服务器,我可以(甚至便宜地)购买SSL证书.我做到了 但我不能告诉用户去购买证书---他们不知道我在说什么,也永远无法弄清楚如何安装它.
那我该怎么办?向每个人发送我自己的自签名证书并做一些非常糟糕的事情,如在Java中禁用证书验证?可怕,我知道.但至少信息不会以纯文本形式出现.
谁有更好的解决方案?
我有一个在weblogic服务器上运行的Java应用程序.该应用程序有两个不同的模块,使用SSL连接到外部Web服务 - 比如模块A和模块B.
模块A - 基于Axis构建 - 使用信任库A Moudle B - 基于Spring-ws构建 - 使用信任库B.
模块A存在.正在介绍模块B.
我需要能够根据调用的模块在JVM中动态设置信任库.
由于某些限制,我没有选项 - 创建自定义密钥管理器. - 使用一个信任库
我尝试使用System.setProperty im Module B codebase来设置truststore.但是,仅当模块B首先被调用时才有效.例如 - 假设我重新启动JVM然后调用模块A - 它在JVM中设置它自己的信任库然后我调用模块B - 它失败 - 它没有在JVM中设置它自己的信任库,即使我已经使用过System.setProperty方法.
我错过了什么,或者只是System.setProperty不会覆盖现有的设置值.如果是这样,我的选择是什么.
经过几个小时的斗争后,我开始感到非常沮丧。
我有一个 JKS 服务器文件,我想从 jar 中加载它。只要文件在 Jar 之外,使用 FileInputStream 就可以了,但是一旦我尝试将其更改为 getResourceAsStream,它就不会接受它,并说(没有这样的文件或目录)。
这就是项目的分发方式
ProjectFolder
-src
--package.name
---JKS File
---Class calling the resource retrieval and loading into the keystore
Run Code Online (Sandbox Code Playgroud)
我想我已经尝试了几乎所有我能想到的 this.getClass().getClassLoader().getResourceAsStream("jksFile.jks") 组合。
我提前为没有更具体地说明代码而道歉,但我实际上已经忘记了我尝试过什么和没有尝试过什么。
帮助!
提前致谢