Аутентификация в 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
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти