如何通过OSGi(karaf)API使用自定义trustManager注册webservice

时间:2014-12-03 16:54:58

标签: java ssl osgi

我正在开发通过以下调用注册WS的软件:

initiatingBundle.getBundleContext()
    .registerService(
          interfaces,
          serviceObject,
          this.convertMapToDictionary(
                initiatingBundle.getBundleContext(),
                serviceAttributes
          )
    );

这是help for the OSGi API

org.osgi.framework.BundleContext
ServiceRegistration<?> registerService(java.lang.String[] clazzes,
                                   java.lang.Object service,
                                   java.util.Dictionary<java.lang.String,?> properties)

有没有办法(使用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];
                            }
                    };

1 个答案:

答案 0 :(得分:0)

Karaf使用Pax Web进行HttpService实现,还有更多。 通常,如果使用基于SSL的连接,则需要X509证书。因此,您只需要根据OSGi规范和特殊的Pax Web属性配置HttpService。

要启用SSL支持,您必须设置以下属性:
org.osgi.service.http.secure.enabled 指向 true
org.ops4j.pax.web.ssl.keystore 到要使用的密钥库的路径。如果未设置,则使用默认路径$ {user.home} / .keystore org.ops4j.pax.web.ssl.password 到用于密钥库完整性检查的密码。该值可以是纯文本或模糊处理(从OBF开始:),如jetty docummentation步骤4中所述 org.ops4j.pax.web.ssl.keypassword 到用于密钥库的密码。该值可以是纯文本或模糊处理(从OBF开始:),如jetty docummentation步骤4中所述 您还可以设置以下内容:
org.osgi.service.http.port.secure 更改端口。默认值为 8443

此外,对于证书,您需要设置以下内容: 的 org.ops4j.pax.web.ssl.clientauthwanted =通缉
如果服务器上基于证书的客户端身份验证是&#34;想要&#34; ,则此属性指定。

<强> org.ops4j.pax.web.ssl.clientauthneeded =所需
如果服务器上基于证书的客户端身份验证&#34;必需&#34; ,则此属性指定。

可以在Pax Web项目中找到更多详细信息。项目GitHub项目也提供样本。