我想保护 OSGi bundle 中使用 endpoint.publish() 发布的 Web 服务组件的通信安全。因此我正在努力解决三个问题。
- 如何使用信任库中的证书仅使用 IP 来构建 https 发布者?由于此 bundle 在嵌入式计算机上运行,而使用该服务的客户端不知道计算机名称。
- 如何在我的包中加载 *.jks keystore ?由于还有另一个类路径,我无法使用例如找到 *.jks 文件新文件(./truststore.jks)。是的,我在这里发现了类似的问题,但没有成功。
- 我不想实现某种身份验证。现在,我在头文件中发送用户名和密码(这就是我首先要确保通信安全的原因)。有没有办法在每个 Web 服务方法调用中不检查 header 中的用户名/密码?因为我有大约 20 个已发布的方法,并且复制相同的检查代码很奇怪。
运行时是Java 1.6,equinox 3.7.1。客户端是另一个 Web 应用程序(使用 php)。
一般来说,是否有安全发布 Web 服务的最佳实践(尤其是 OSGi bundle )?
提前致谢!
最佳答案
我按顺序回答:
在证书中使用 IP 地址作为通用名称 (CN) 可能不是一个好的形式。您最好在本地为该 IP 地址分配一个名称(例如在大多数系统上的主机文件中)。或者,您可以通过配置客户端来跳过名称验证 - 但在这种情况下,您接受 CA 颁发的任何证书。如果您对 PKI 有足够的控制权,例如使用自签名证书,这仍然是一个选项。
可以使用
InputStream
加载KeyStore(信任库是 keystore ),并且可以为资源创建输入流。请参阅this question on stackoverflow了解更多信息。尝试使用 session 上下文将身份验证绑定(bind)到 session 而不是单个页面。显然,如果没有 SSL,这会不太安全,但有了 SSL 就应该没问题。
关于java - 在 OSGi 包中使用 https 保护 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223159/