我正在开发通过以下调用注册WS的软件:
initiatingBundle.getBundleContext()
.registerService(
interfaces,
serviceObject,
this.convertMapToDictionary(
initiatingBundle.getBundleContext(),
serviceAttributes
)
);
这是对 OSGi API 的帮助:
org.osgi.framework.BundleContext
ServiceRegistration<?> registerService(java.lang.String[] clazzes,
java.lang.Object service,
java.util.Dictionary<java.lang.String,?> properties)
有没有办法(带有属性属性的示例(使用自定义 TrustManager 创建 Web 服务,如下所示?
TrustManager trustManager = new X509TrustManager() {
@Override public void checkClientTrusted( X509Certificate[] x509Certificates, String s ) throws CertificateException {
System.out.println( "=== interception point at checkClientTrusted ===" );
System.out.println( x509Certificates[0].getSubjectDN().getName() );
System.out.println( "================================================" );
throw new CertificateException( "interception point at checkClientTrusted" );
}
@Override public void checkServerTrusted( X509Certificate[] x509Certificates, String s ) throws CertificateException {
System.out.println( "checkServerTrusted" );
}
@Override public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
Karaf使用Pax Web来实现HttpService,以及更多。通常,如果使用基于 SSL 的连接,则需要 X509 证书。因此,您只需要根据OSGi规范和特殊的Pax Web属性配置HttpService即可。
若要启用 SSL 支持,必须设置以下属性:
org.osgi.service.http.secure.enabled to true
org.ops4j.pax.web.ssl.keystore 到要使用的密钥库的路径。如果未设置,则使用默认路径 ${user.home}/.keystore。
org.ops4j.pax.web.ssl.password 到用于密钥库完整性检查的密码。该值可以是纯文本或模糊处理(以 OBF 开头:(,如码头文档
的步骤 4 中所述org.ops4j.pax.web.ssl.keypassword 到用于密钥库的密码。该值可以是纯文本或模糊处理(以 OBF 开头:(,如码头文档
的步骤 4 中所述您还可以设置以下内容:
org.osgi.service.http.port.secure 以更改端口。默认值为 8443。
此外,对于证书,您需要设置以下内容:org.ops4j.pax.web.ssl.clientauthwanted=want
此属性指定是否"需要">服务器上基于证书的客户端身份验证。
org.ops4j.pax.web.ssl.clientauthneed=required
此属性指定服务器上基于证书的客户端身份验证是否为"必需"。
更多细节可以在Pax Web项目中找到。此外,在项目GitHub Project中还提供了示例。