java - 如何使用自定义 trustManager 通过 OSGi (karaf) API 注册 Web 服务

标签 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 的网络服务,如下所示?

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.enabledtrue
org.ops4j.pax.web.ssl.keystore 到要使用的 keystore 的路径。如果未设置,则使用默认路径 ${user.home}/.keystore。
org.ops4j.pax.web.ssl.password 到用于 keystore 完整性检查的密码。该值可以是纯文本或混淆的(以 OBF: 开头),如 jetty 文档的第 4 步所述
org.ops4j.pax.web.ssl.keypassword 到用于 keystore 的密码。该值可以是纯文本或混淆的(以 OBF: 开头),如 jetty 文档的第 4 步所述
您还可以设置以下内容:
org.osgi.service.http.port.secure 更改端口。默认为 8443

此外,对于证书,您还需要设置以下内容: org.ops4j.pax.web.ssl.clientauthwanted=通缉
此属性指定服务器上基于证书的客户端身份验证是否“需要”

org.ops4j.pax.web.ssl.clientauthneeded=必需
此属性指定服务器上基于证书的客户端身份验证是否“必需”

更多详细信息可以在 Pax Web 找到项目。项目中也有可用的 sample GitHub项目。

关于java - 如何使用自定义 trustManager 通过 OSGi (karaf) API 注册 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27277328/

相关文章:

java - Spring boot中无法显示index.html页面

java - 在重写期间使用泛型 Map 参数将具体对象返回到泛型方法

java - SSL 握手失败 Websphere 1 of 2 servers

Java - SSL 服务器创建

django - Apache mod_wsgi 错误 : Forbidden

java - 来自 OSGi 包的相对路径

OSGi-ified Apache Commons 日志记录?

java - Hopcroft 算法 - DFA 最小化

java - 如何将多个WAR文件打包到一个Maven项目中?

java - 使用 Java 9 将 module-info.java 放在哪里?