Меню

Аутентификация в SAP Business Objects по цифровым сертификатам

Компания BusinessObjects вошла в состав SAP AG в 2007 году, это поглощение сразу же вывело компанию SAP в лидеры рынка инструментов для бизнес-аналитики. Однако реализация подсистемы безопасности вызывает у российских заказчиков определенные вопросы. Дело в том, что внутрироссийским стандартом криптографии является ГОСТ 28147-89, поддержка которого в стандартной поставке продуктов SAP BusinessObjects отсутствует, что ограничивает возможности применения продуктов SAP в органах государственной власти, а также российских компаниях со значительной долей государственного участия. В статье рассматривается возможность реализации поддержки ГОСТ-алгоритма при авторизации и аутентификации пользователей.

Введение

Приобретенная SAP AG компания BusinessObjects значительно расширила набор доступных клиентам решений, особенно в области бизнес-аналитики. Консультанты SAP в процессе проработки стратегии активно продвигают для использования продукты именно линейки BusinessObjects, но в российских условиях заказчики (особенно имеющие отношение к государственному капиталу) зачастую предъявляют набор дополнительных требований к обеспечению информационной безопасности конечной системы. В последнее время набирает популярность применение специализированных персональных аппаратных ключей, поддерживающих российский стандарт криптографии ГОСТ 28147-89. Такой подход обеспечивает максимальный уровень защиты, исключает возможность кражи паролей иначе как вместе с аппаратным ключом и значительно снижает опасность доступа сотрудников к ресурсам предприятия из недоверенных сегментов сети (например, посредством Интернет), так как ключи шифрования и ЭЦП не могут быть перехвачены или скопированы. Идеальным вариантом является использование таких аппаратных ключей в полном цикле – от организации защищенного подключения к корпоративной сети до электронной подписи документов и авторизации конечных пользователей в бизнес-приложениях.

Большинство продуктов SAP поддерживает использование для авторизации сертификатов стандарта Х.509, однако даже при наличии поддержки стандартных сертификатов возникают множественные сложности с применением именно ГОСТ-реализации цифровых сертификатов. Проектной команде компании «ЭнергоДата» была поставлена задача по реализации решения, обеспечивающего авторизацию в продуктах BusinessObjects с применением аппаратных ключей ГОСТ-стандарта. Далее будет детально показан наш ход разрешения проблемы.

Общий подход к решению

После проработки требований ГОСТа был выбран следующий путь – проверять наличие в заголовках HTTP-запроса к системе SAP Business Objects Business Intelligence platform 4.0(далее по тексту – SAP BObj) сертификата X.509 и, в случае наличия такового, передать  в систему SAP NetWeaver Business Intelligense 7.0 (далее по тексту – SAP BI) для выполнения дальнейшей аутентификации пользователя по сертификату. По результатам аутентификации в системе SAP BI в системе SAP BObj  создается пользовательская сессия на основе данных о ролях и полномочиях пользователя, полученных из SAP BI. В случае отсутствия сертификата производится стандартная аутентификация пользователя в системе SAP BI с использованием пары «логин-пароль». Следует также заметить, что при разработке архитектуры решения одной из предпосылок была абсолютная безопасность соединения непосредственно между инсталляциями серверной части SAP BusinessObjects и SAP BI, так как они фактически расположены в едином защищенном изолированном центре обработки данных.

Расширение функционала SAP BusinessObjects

Модернизируемый продукт SAP BObj в качестве платформы для веб-представления использует распространённый веб-контейнер Apache Tomcat 6.0, а также набор библиотек для авторизации и аутентификации, написанных на языке Java. Соответственно, все изменения на стороне SAP BObj, выполнялись с использованием инструментария Java.

Первым шагом по решению задачи была разработка расширения модуля  аутентификации системы SAP BObj. Для изменения поведения стандартного (входящего в поставку) модуля аутентификации произведено расширение класса LogonUtils пакета PlatformServices.jar плагина webpath.PlatformServices. В классе LogonUtils был расширен метод  logon() и добавлены два новых метода getX509CertFromRequest() и getBase64String().

public static IEnterpriseSession logon(HttpServletRequest request, String   username, String password, String cms, String authType)

   throws SDKException

{

   ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();

   IEnterpriseLogonInformation logonInfo = ApplicationUtils.createEnterpriseLogonInformation(request, sessionMgr);

   String authenticationObject = null;

   X509Certificate cert = getX509CertFromRequest(request);

   if(cert == null) {

      authenticationObject = password;

   } else {

      String certificateLink = JCOHelper.getX509LinkId(getBase64String(cert));

     if(certificateLink == null) { authenticationObject = password; }

     else { authenticationObject = certificateLink; }

   }

   return ApplicationUtils.logon(request, username, authenticationObject,    cms, CLUSTERS_RESOURCEBUNDLE_NAME, CLUSTERS_PARAMETER_KEY, authType, logonInfo);

}

private static X509Certificate getX509CertFromRequest(HttpServletRequest request)

{

   X509Certificate certs[] = (X509Certificate[])(X509Certificate[])

      request.getAttribute("javax.servlet.request.X509Certificate");

   if(certs != null) return certs[0];

   return null;

}

private static String getBase64String(X509Certificate cert)

{

   String certLikeBase64String = null;

   try {

      certLikeBase64String = Base64Encoder.encode(cert.getEncoded());

   } catch (CertificateEncodingException e) {

      e.printStackTrace();

   }

   return certLikeBase64String;

}

Модифицированный класс был помещен в пакет и установлен в систему.

Как видно из приведенного выше кода, для передачи содержимого сертификата, закодированного в формате Base64, используется дополнительный класс JCOHelper.  Основной задачей класса является установка  JCo-соединения с системой SAP BW и передача в систему строки сертификата. Код класса приведен ниже. 

package com.businessobjects.clientaction.shared.logon;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.Properties;

import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoDestinationManager;

import com.sap.conn.jco.JCoException;

import com.sap.conn.jco.JCoFunction;

public class JCOHelper {

   private static final String DESTINATION_NAME = "JCo_2_BW";

   public static String getX509LinkId(String cert)

   {

      if(processPropertiesFile()) {

         try {

            JCoDestination destination =   JCoDestinationManager.getDestination(DESTINATION_NAME);

            JCoFunction function = destination.getRepository().getFunction("ZJCO_X509_CERT_STORE");

            if(function != null) {

               function.getImportParameterList().setValue("I_CERT", cert);

               function.execute(destination);

               return (String) function.getExportParameterList().getValue("E_SHA1");

            }

         } catch (JCoException ex) {

            System.out

.println("Unable to create JCoFunction. Reason: \n" + ex);

         }

      }

      return null;

   }

   private static boolean processPropertiesFile() {

      Properties connectProperties = new Properties();

     

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти