Обзор технологий
Ruby — интерпретируемый язык программирования высокого уровня. Обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, «сборщиком мусора» и многими другими возможностями, поддерживающими много разных парадигм программирования, прежде всего классово-объектную. Ruby был задуман в 1993 году (24 февраля) японцем Юкихиро Мацумото, стремившимся создать язык, совмещающий все качества других языков, способствующие облегчению труда программиста.
К возможностям Ruby можно отнести следующее:
Имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ada, Eiffel и Python.
Позволяет обрабатывать исключения в стиле Java и Python.
Позволяет переопределять операторы, которые на самом деле являются методами[1].
Создатель Ruby Yukihiro «matz» Matsumoto, как утверждают эксперты, смешал в Ruby лучшие элементы его любимых языков — Perl, Smalltalk, Eiffel, Ada и Lisp, — чтобы получить новый, который совмещал бы в себе функциональное программирование и императивное программирование. Вот так создатель говорит о своем творении: "Я пытался сделать Ruby естественным, но не простым, чтобы он отражал саму жизнь. Да, Ruby внешне прост, но внутри он очень комплексный. Как человеческое тело".
Можно выделить следующие важнейшие особенности описываемого языка программирования:
Все является объектом. Любые данные в Ruby могут иметь собственные свойства и действия. То есть, таким образом, мы можем присвоить какие-то методы даже обычному числу или любому другому примитиву.
Расширяемость базовых возможностей. Ruby изо всех сил старается не ограничивать разработчика вообще ни в чем.
Обработка исключений. Наравне с другими популярными языками вроде JavaScript или Python творение Yukihiro Matsumoto также имеет встроенную поддержку обработку исключений для удобства работы с ошибками.
Независимость от платформы. Ruby не только запускается на любой системе, включая древний MS-DOS, но и дает возможность использовать мультипоточности вне зависимости от того, поддерживает система эту опцию или нет.
Ruby — очень амбициозный и достаточно мощный инструмент, который применяется очень многими разработчиками, причем и desktop-приложений тоже. К примеру, его часто используют в качестве внутреннего скриптового языка для комплексных приложений.
Итак, как говорят эксперты, Ruby on Rails — это веб-среда, написанная на языке программирования Ruby и использующая его же в качестве фундамента. Мы не так часто сталкиваемся с термином "веб-среда"; гораздо чаще слышим и читаем "веб-платформа", "веб-технология", "библиотека" и «framework». Значит, Ruby on Rails не является ничем из перечисленного. Что же такое веб-среда? Ответ разработчиков прост: это нечто подобное "системе поддержки" программы, но реализованное на более низком уровне, чем обычная библиотека с вспомогательным кодом. В качестве примера можно привести SQL-запрос. Ruby on Rails включает в себя мощную библиотеку взаимодействия с базами данных под названием ActiveRecord, которая берет на себя всю рутину, уменьшая тем самым объем кода финального приложения.
Вообще же, Ruby on Rails включает в себя заготовленный функционал для решения практически всех обыденных задач, с которыми сталкиваются современные веб-специалисты. Это значит, что и скорость разработки заметно возрастает. На официальном сайте утверждается, что использование Ruby on Rails способно ускорить работу чуть ли не в десять раз по сравнению с работой с чистого листа.
Однако еще более важно в рамках разговора о веб-приложениях второго поколения — это реализация всех новейших функций, которые являются их неотъемлемой частью. Ruby on Rails включают в себя обширную и мощную библиотеку и для этих целей, которые могут использоваться без какого-либо знания JavaScript. Мы используем функции среды из Ruby-скриптов и Ruby-шаблонов, которые очень похожи на PHP-страницы, и эти функции автоматически вызывают JavaScript.
Ruby on Rails по умолчанию заточен под безопасность проекта. При использовании инструментов фреймворка исключены SQL-инъекции и XSS атаки. Все входные параметры экранируются по умолчанию. Выводимые переменные в шаблонах также экранируются.
Rails отлично работает со многими веб-серверами и СУБД. В качестве веб-сервера рекомендуется использовать Apache или nginx с модулем Phusion Passenger. Rails также можно разворачивать используя Unicorn, Thin, Mongrel или FastCGI. В качестве СУБД можно использовать MySQL, PostgreSQL, SQLite, Oracle, SQL Server, DB2 или Firebird. Использовать Rails можно на практически любой операционной системе, однако для развертывания мы рекомендуем системы семейства *nix[2].
Microsoft SQL Server – это комплексная высокопроизводительная платформа баз данных, обеспечивающая управление данными в масштабе предприятия и оснащенная встроенными средствами бизнес-аналитики (Business Intelligence, BI). SQL Server позволяет организациям строить интегрированные решения для учета и анализа данных масштаба предприятия, предоставляя сервисы, обеспечивающие надежность, безопасность доступа и масштабируемость. Благодаря исчерпывающему набору функций, взаимодействию с существующими системами и автоматизации типовых задач, SQL Server представляет собой полное решение в области хранения, управления и анализа данных для широчайшего диапазона масштабов.
Каждая очередная версия SQL Server обогащается новыми возможностями, реализованными в соответствии с общим планом развития продукта и пожеланиями пользователей. С выпуском версии SQL Server 2008 и, в особенности, SQL Server 2008 R2 продукт Microsoft SQL Server стал не просто сервером баз данных, а целостной платформой построения систем управления корпоративной информацией[3].
Использовать Rails можно на практически любой операционной системе, однако для развертывания разработчики рекомендуют системы семейства *nix. На работе выделили под разработку портала CentOS.
Centos является дистрибутивом GNU/Linux, основанном на свободных исходных текстах коммерческого дистрибутива Red Hat Enterprise Linux компании Red Hat, и совместимый с ним. Срок поддержки каждой версии CentOS составляет 10 лет (с помощью выпуска обновлений безопасности). Новая версия CentOS выходит раз в 2 года и каждая версия регулярно обновляется (каждые 6 месяцев) для поддержки новых аппаратных средств. В результате это приводит к безопасной, легко обслуживаемой, надежной, предсказуемой и масштабируемой Linux среде[4, 5].
В качестве веб-сервера для RoR рекомендуется использовать Apache или nginx с модулем Phusion Passenger. Выбор был сделан в пользу Apache в связи с тем, что для существует модуль mod_auth_kerb, позволяющий реализовать прозрачную аутентификацию на веб-сервер, используя учетную запись Windows.
Apache HTTP-сервер — это так называемый свободный веб-сервер, представляющий собой кросплатформенное программное обеспечение. Apache поддерживает следующие операционные системы: BSD, Microsoft Windows, Linux, Mac OS, BeOS, Novell NetWare.
Надежность и гибкость конфигурации – главные достоинства Apache. Благодаря этому ПО можно осуществлять подключение внешних модулей, использующихся для предоставления данных, модифицировать сообщения об ошибках, применять СУБД для аутентификации пользователей. Apache поддерживает IPv6.
Начиная с апреля 1996 года и до настоящего времени Apache является самым распространенным и популярным HTTP-сервером в сети Интернет. Согласно статистическим данным в августе 2007 HTTP-сервером работал на 51% всех веб-серверов, в мае 2009 года этот показатель снизился до 46%, а в январе 2011 года – вырос до 59%. На сегодняшний день более 59% от общего количества веб-сайтов обслуживаются веб-сервером Apache. Разработкой и поддержкой Apache занимаются специалисты открытого сообщества разработчиков под эгидой Apache Software Foundation. Apache включен в большинство программных продуктов, среди которых IBM WebSphere и СУБД Oracle.
Apache оснащен встроенным механизмом виртуальных хостов. Благодаря этому на одном IP-адресе можно обслуживать большое количество веб-проектов (доменных имен), при этом отображая для каждого из них свое содержимое.
Для каждого виртуального хоста имеется возможность указать сои настройки модулей и ядра, а также установить ограничения к доступу ко всему сайту либо некоторым файлам. С помощью Apache-ITK для каждого виртуального хоста можно запускать процесс httpd с идентификаторами gid и uid.
Также есть модули, которые позволяют ограничивать и учитывать ресурсы сервера (трафик, RAM, CPU) отдельно для каждого виртуально хоста[6].
В свою очередь для реализации прозрачной аутентификации была выбрана технология Kerberos. Протокол Kerberos выгодно отличается от NTLM большей гибкостью и эффективностью использования. Обеспечивает повышенный уровень безопасности. Ряд преимуществ:
Более эффективная аутентификация на серверах.
Взаимная аутентификация.
Делегированная аутентификация.
Упрощенное управление доверительными отношениями.
Совместимость.
Kerberos — сетевой протокол аутентификации, позволяющий передавать данные через незащищённые сети для безопасной идентификации. Ориентирован, в первую очередь, на клиент-серверную модель и обеспечивает взаимную аутентификацию — оба пользователя через сервер подтверждают личности друг друга[7].
Протокол Kerberos был специально разработан для того, чтобы обеспечить надежную аутентификацию пользователей.
Предусматривается, что начальный обмен информацией между клиентом и сервером происходит в незащищённой среде, а передаваемые пакеты могут быть перехвачены и модифицированы,
Протокол Kerberos может использовать централизованное хранение аутентификационных данных и является основой для построения механизмов Single Sign-On (возможность использования единой учетной записи пользователя для доступа к любым ресурсам области).
Протокол основан на понятии Ticket (билет).
Ticket (билет) является зашифрованным пакетом данных, который выдается доверенным центром аутентификации, в терминах протокола Kerberos — Key Distribution Center (KDC, центр распределения ключей).
Когда пользователь выполняет первичную аутентификацию, после успешного подтверждения его подлинности KDC выдает первичное удостоверение пользователя для доступа к сетевым ресурсам — Ticket Granting Ticket (TGT). В дальнейшем, при обращении к отдельным ресурсам сети, пользователь, предъявляя TGT, получает от KDC удостоверение для доступа к конкретному сетевому ресурсу — Service Ticket (TGS).
Одним из преимуществ протокола Kerberos, обеспечивающим высокий уровень безопасности, является то, что при любых взаимодействиях не передаются ни пароли, ни значения хеша паролей в открытом виде.
Работая с протоколом Kerberos, необходимо, чтобы системные часы всех участвующих во взаимодействии узлов были синхронизированы.
В качестве примера реализации протокола Kerberos имеет смысл отметить доменную аутентификацию пользователей в операционных системах Microsoft, начиная с Windows 2000.
Рассмотрим, как осуществляется аутентификация посредством протокола Kerberos.
В процессе аутентификации задействованы следующие основные компоненты:
Клиент, запрашивающий доступ к службе или пытающийся осуществить аутентификацию.
Сервер, на котором работают службы, доступ к которому требуется клиенту.
Компьютер, которому доверяет клиент (В данном случае речь идет о контроллере домена, на котором выполняется служба KDC).
KDC представляет собой службу, работающую на физически защищенном сервере.
Она ведет базу ученых данных с информацией обо всех участниках безопасности (security principal) своей области. Если речь идет о сетях Windows 2000/2003/2008, понятию «область Kerberos» соответствует понятие «домен».
Вместе с информацией о каждом security principal в базе данных KDC сохраняется криптографический ключ, известный только этому объекту и службе KDC. Указанный ключ, который называют долговременным, используется для связи пользователя системы безопасности с центром распределения ключей.
Процесс аутентификации пользователя:
Получив приглашение на ввод имени пользователя, пароля и домена, пользователь указывает эти данные.
Затем компьютер пользователя обращается к службе KDC и передает ей имя пользователя, имя домена, а также текущее время на рабочей станции пользователя, при этом имя пользователя передается в открытом виде, текущее время на рабочей станции пользователя передается в зашифрованном виде и является аутентификатором. Ключ шифрования формируется из пароля пользователя в результате хеширования.
Служба KDC ищет пользователя в AD, выявляет мастер ключ пользователя, который основан на пароле пользователя и расшифровывает аутентификатор, т. е. получает время отправки запроса. Разница во времени отправки запроса и текущего времени на контроллере домена не должно превышать определенного значения, установленного политикой протокола Kerberos
Затем KDC создает два объекта:
a. ключ сессии, посредством которого будет обеспечиваться зашифрование данных при обмене между клиентом и службой KDC,
b. билет на получение билета Ticket-Granting Ticket (TGT). TGT включает: вторую копию ключа сессии, имя пользователя, время окончания жизни билета. Билет на получение билета шифруется с использованием собственного мастер ключа службы KDC, который известен только KDC, т. е. TGT может быть расшифрован только самой службой KDC.
Служба KDC зашифровывает аутентификатор пользователя (time stamp) и ключ сессии с помощью ключа клиента. После этого эти данные отправляются клиенту.
Компьютер клиента получает информацию от службы KDC, проверяет аутентификатор, расшифровывает ключ сессии.
Теперь клиент обладает ключом сессии и TGT, что предоставляет возможность безопасного взаимодействия со службой KDC. Клиент аутентифицирован в домене и получает возможность осуществлять доступ к ресурсам домена, используя протокол Kerberos.
Итак, клиенту, прошедшему аутентификацию посредством Kerberos, требуется получить доступ к ресурсам на других серверах в том же домене.
Клиент обращается к службе KDC. Клиент представляет KDC свой TGT и маркер времени, которые зашифрованы с помощью ключа сессии, известного службе KDC.
KDC расшифровывает TGT, используя свой собственный ключ. Маркер времени расшифровывается с помощью сессионного ключа. Теперь KDC может подтвердить, что запрос пришел от «правильного» пользователя, т. к. этот пользователь может использовать этот сессионный ключ.
Затем KDC создает пару билетов, один для клиента, один для сервера, к ресурсам которого клиент должен будет получать доступ. Каждый билет содержит имя пользователя, запрашивающего доступ, получателя запроса, маркер времени, показывающий, когда был создан билет, а также срок жизни билета. Оба билета будут также содержать новый ключ, K_cs который, таким образом известен и клиенту и серверу. Этот ключ будет обеспечивать возможность безопасного взаимодействия между ними. KDC шифрует билет сервера, используя мастер – ключ сервера, затем вкладывает билет сервера внутрь билета клиента, который также содержит ключ K_cs
Вся эта структура зашифровывается с помощью сессионного ключа, который стал доступен пользователю при аутентификации. После чего эта информация отправляется клиенту.
Получив билет, клиент расшифровывает его с помощью сессионного ключа, т. е. K_cs становится доступным клиенту, K_cs доступен также и серверу. Клиент не может прочитать билет сервера, т. к. он зашифрован на ключе сервера.
Клиент зашифровывает маркер времени с помощью ключа, K_cs затем отправляет маркер времени и билет сервера самому серверу, к ресурсам которого пытается получить доступ клиент.
Получив эту информацию, на первом этапе сервер расшифровывает свой билет, используя свой долговременный ключ. Это предоставляет возможность получить доступ к K_cs , с помощью которого будет на втором этапе расшифрован маркер времени, полученный от клиента.
Теперь и клиент, и сервер обладают ключом K_cs. Следовательно, сервер может быть уверен в том, что клиент правильно идентифицирован, т. к. для шифрования маркера времени был использован K_cs . В случае необходимости ответа сервера клиенту, сервер воспользуется ключом K_cs . Клиент будет знать, что сервер правильно идентифицирован, поскольку сервер должен использовать, чтобы получить K_cs[8].
HTTPS - расширение протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTP, «упаковываются» в криптографический протокол SSL или TLS, тем самым обеспечивается защита этих данных.
SSL - криптографический протокол, обеспечивающий безопасную передачу данных в сети Интернет. Протокол SSL обеспечивает безопасность, аутентификацию на базе SSL-сертификатов и согласование безопасности по установленному сетевому соединению, поэтому множество компаний и продуктов приняли SSL в качестве коммуникационного протокола.
Протокол SSL обеспечивает выполнение следующих задач:
обеспечение защищенности информации: данные, находящиеся в процессе передачи между сервером и клиентом, защищены от перехвата и должны иметь возможность быть прочитанными только адресатом. Это требование обязательно как для данных, относящихся к самому протоколу (диалог безопасности во время установления связи), так и для данных приложения, посылаемых в течение самой сессии;
аутентификация клиента и сервера друг для друга: протокол SSL поддерживает использование стандартных технологий криптографии с публичным и приватным ключами с целью аутентификации взаимодействующих сторон друг для друга. Хотя более распространен случай аутентификации сервера для клиента, SSL может использовать те же методы для аутентификации клиента;
обеспечение целостности информации: во время сессии данные не должны быть подвержены внешнему и внутреннему влиянию.
Протокол SSL разработан компанией Netscape (известной по одноименному браузеру) в 1994 году. Разработчикам была поставлена задача: разработать зашифрованный путь обмена данными между клиентом и сервером, независимо от операционной системы.
Через несколько месяцев после релиза SSL 1.0 Netscape выпустила усовершенствованную версию, обозначив SSL 2.0. Стоит отметить, что первые релизы не были доступны IT-аудитории. И лишь в конце 1995 года Netscape выпустила SSL 3.0, публичный релиз, и именно эта версия по сей день является стандартом безопасной передачи данных в Интернет. Именно, версию SSL 3.0 поддерживает большинство веб-браузеров в наше время.
Протокол SSL состоит из двух уровней. На нижнем уровне транспортного протокола (TCP/IP) он является протоколом записи и используется для инкапсуляции (то есть формирования пакета) разнообразных протоколов (HTTP, FTP, POP3 и SMTP). Для каждого из выше перечисленных протоколов SSL обеспечивает условия, при которых сервер и клиент подтверждают друг другу свою подлинность, выполняют алгоритмы шифрования и производят обмен криптографическими ключами, прежде чем протокол прикладной программы начнёт обмен данные.
На самом деле SSL объединяет в себе два протокола: согласования и передачи данных. Протокол передачи данных управляет потоком данных между двумя конечными системами соединения SSL.
Протокол согласования служит для идентификации одной или обеих конечных систем соединения SSL и создания уникального симметричного ключа, с помощью которого генерируются ключи для шифрования и расшифровки данных, передаваемых по этому соединению. Для идентификации конечных систем в протоколе SSL применяется асимметричное шифрование, цифровые SSL-сертификаты и процедуры согласования SSL. Обычно SSL идентифицирует сервер, но может использоваться и для идентификации клиента. Цифровой SSL-сертификат, выданный SSL-сертификатной организацией(Certificate Authority), может быть связан с каждой из конечной систем или с приложениями, применяющими протокол SSL в конечных системах.
Цифровой SSL-сертификат состоит из публичного ключа и идентификационной информации с цифровой подписью уполномоченной SSL-сертификатной организации. С каждым публичным ключом связан приватный ключ. Приватный ключ не входит в состав SSL-сертификата и хранится отдельно от него. При идентификации клиента или сервера конечная система должна предоставить доказательство наличия приватного ключа, соответствующего публичному ключу цифрового SSL-сертификата.
Существуют 2 вида SSL-сертификатов по степени доверия веб-браузерами:
Trusted (доверительные);
Self-Signed (самоподписанные).
Доверительный SSL-сертификат — это SSL-сертификат, выписанный уполномоченным органом, сертификатной организацией. SSL-сертификат выписывается на определенное доменное имя, указывается срок действия SSL-сертификата (до 5 лет), содержит цифровые печати и подписи. Популярные Web-браузеры заранее настроены доверять SSL-сертификатам, выданным сертификатными организациями, так что не нужно никакой дополнительной конфигурации для подключения клиента через SSL к серверу, для которого был выдан SSL-сертификат.
При заходе на веб-сайт, оснащенный SSL-сертификатом, в адресной или статусной строке браузера появляется иконка «замка». Кликнув на нее, вы можете узнать об обладателе SSL-сертификата следующее:
имя человека или организации выпускающего SSL-сертификат;
для кого был выпущен данный SSL-сертификат (субъект SSL-сертификата);
имя владельца домена;
географическое расположение сервера, на котором расположен сайт;
открытый ключ субъекта;
временные параметры (срок действия SSL-сертификата и т.д.)[9].
|