2014-12-03 1 views
0

Я работаю на программное обеспечение, которое регистрирует WS через ниже вызова:Как зарегистрировать веб-сервиса через OSGi (karaf) API с пользовательскими TrustManager

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) 

ли есть ли способ (пример с атрибутом свойств) создать веб-сервис с настраиваемым 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]; 
          } 
        }; 

ответ

0

Karaf использует Pax Web для реализации HttpService, а также многое другое. В общем случае сертификат X509 необходим, если используется соединение на основе SSL. Поэтому вам просто нужно настроить HttpService соответственно спецификации OSGi и специальными свойствами Pax Web.

Чтобы включить SSL поддержку, необходимо установить следующие свойства:
org.osgi.service.http.secure.enabled к истинной
org.ops4j.pax.web.ssl.keystore в путь к хранилищу ключей, который будет использоваться. Если не задан путь по умолчанию $ {user.home} /. Используется keystore.
org.ops4j.pax.web.ssl.password пароль, используемый для проверки целостности хранилища ключей. Значение может быть в виде обычного текста или обфускации (начиная с OBF:), как описано в шаге 4 документальной документации
org.ops4j.pax.web.ssl.keypasswordword к паролю, используемому для хранилища ключей. Значение может быть в виде простого текста или затемненный (начиная с OBF:), как описано на стадии 4 причала docummentation
Вы можете также установить следующее:
org.osgi.service.http.port.secure, чтобы изменить порт. Значение по умолчанию: .

Кроме Сертификатов вам необходимо установить следующее: org.ops4j.pax.web.ssl.clientauthwanted = хотел
Это свойство определяет, если на основе сертификата проверки подлинности клиента на сервере " хотел ".

org.ops4j.pax.web.ssl.clientauthneeded = требуемая
Это свойство определяет, если на основе сертификата проверки подлинности клиента на сервере «требуется».

Более подробную информацию можно найти по адресу Pax Web. Также есть образцы, доступные в проектах GitHub.

+0

Спасибо, это было очень полезно, но вопрос был о пользовательском trustmanager. Я хочу обрабатывать шаг проверки сертификата клиента во время самообслуживания TLS ... например: не только на эмитенте, но и на основе других атрибутов. Возможно ли это с OSGi API? –

+0

В этом случае вам нужно будет изменить файл jetty.xml, чтобы использовать свой пользовательский менеджер. Обязательно включите ssl через конфигурацию и jetty.xml. Из-за этого вы можете изменить конфигурацию по умолчанию. Подробности также можно найти в документации веб-сайта или образцах и тестах интеграции. –

+0

Как я вижу, я могу установить атрибуты в файле jetty.xml, которые связаны с организацией.пакет eclipse.jetty. Unfortunatelly org.eclipse.jetty.ssl.SSLContext и SSLContextFactory не имеют атрибута для trustManager (только статический член, который перезаписывается, если дано какое-либо доверительное хранилище, и оно настроено в OSGi). По этой ссылке [http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html#registerService%28java.lang.String [],% 20java.lang.Object,% 20java. util.Dictionary% 29] Мне интересно узнать ключи, значения. Может быть, есть конфиг для настраиваемого TrustManager ... –

Смежные вопросы