使用OSGi包中的https保护Web服务

时间:2014-01-19 21:51:46

标签: java web-services security osgi

我希望保护与OSGi包中的endpoint.publish()一起发布的webservice组件的通信。因此,我正在努力解决三个问题。

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

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

    提前致谢!

1 个答案:

答案 0 :(得分:1)

我会按顺序回答:

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

  2. 可以使用InputStream加载KeyStores(以及信任库是密钥库),并且可以为资源创建输入流。有关详细信息,请参阅this question on stackoverflow

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