java - 在 OSGi 包中使用 https 保护 Web 服务

标签 java web-services security osgi

我想保护 OSGi bundle 中使用 endpoint.publish() 发布的 Web 服务组件的通信安全。因此我正在努力解决三个问题。

  1. 如何使用信任库中的证书仅使用 IP 来构建 https 发布者?由于此 bundle 在嵌入式计算机上运行,​​而使用该服务的客户端不知道计算机名称。
  2. 如何在我的包中加载 *.jks keystore ?由于还有另一个类路径,我无法使用例如找到 *.jks 文件新文件(./truststore.jks)。是的,我在这里发现了类似的问题,但没有成功。
  3. 我不想实现某种身份验证。现在,我在头文件中发送用户名和密码(这就是我首先要确保通信安全的原因)。有没有办法在每个 Web 服务方法调用中不检查 header 中的用户名/密码?因为我有大约 20 个已发布的方法,并且复制相同的检查代码很奇怪。

运行时是Java 1.6,equinox 3.7.1。客户端是另一个 Web 应用程序(使用 php)。

一般来说,是否有安全发布 Web 服务的最佳实践(尤其是 OSGi bundle )?

提前致谢!

最佳答案

我按顺序回答:

  1. 在证书中使用 IP 地址作为通用名称 (CN) 可能不是一个好的形式。您最好在本地为该 IP 地址分配一个名称(例如在大多数系统上的主机文件中)。或者,您可以通过配置客户端来跳过名称验证 - 但在这种情况下,您接受 CA 颁发的任何证书。如果您对 PKI 有足够的控制权,例如使用自签名证书,这仍然是一个选项。

  2. 可以使用InputStream加载KeyStore(信任库是 keystore ),并且可以为资源创建输入流。请参阅this question on stackoverflow了解更多信息。

  3. 尝试使用 session 上下文将身份验证绑定(bind)到 session 而不是单个页面。显然,如果没有 SSL,这会不太安全,但有了 SSL 就应该没问题。

关于java - 在 OSGi 包中使用 https 保护 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223159/

相关文章:

java - 不可分割的分离器

java - 如何创建一个内部包含多个多边形可绘制对象的按钮(在 LibGDX 中)

java - 如何在命令提示符下运行 Java 程序

java - 将转储文件导入 mysql JDBC

c# - 共享来自多个 Web 引用的数据类型

java - 如何创建一个使用 Web 服务的 Java 客户端?

wcf - 我可以为 WCF 服务设置 IP 过滤器吗?

windows - 从软件中调用防病毒程序来扫描内存中的图像

java - 错误 :415 HttpURLConnection

security - JAVA - 我们可以忽略本地网络的 SSL 验证吗