【问题标题】:Securing a webservice with https in an OSGi bundle在 OSGi 包中使用 https 保护 Web 服务
【发布时间】:2014-01-19 21:51:46
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

  • 那个客户端是另一个应用程序还是浏览器?
  • 客户端是另一个Web应用程序(使用php)。
  • 我已经回答了这些问题,但请保持一个问题 - 嗯 - 下次问题。

标签: java web-services security osgi


【解决方案1】:

我会按顺序回答:

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

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

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

【讨论】:

  • 感谢您的回答。但是对于 2. 问题是,我无法加载任何文件,因为我没有“找到”它们。使用 OSGi,类路径与作为“普通”应用程序运行不同。
  • 但是在 OSGi 中可以使用资源不是吗?参见例如this Q/A。我很确定我的 Eclipse 插件有一些资源......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2010-09-12
  • 2012-09-10
  • 1970-01-01
相关资源
最近更新 更多