aSSL (Ajax Secure Service Layer)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:30, 17 января 2019.
Версия от 16:30, 17 января 2019; andrey kodyk (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

aSSL (Ajax Secure Service Layer)
Assllogo.gif
Разработчики: Francesco Sullo
Написана на: JavaScript
Тип: Библиотека
Состояние разработки: Неактивное
Первый выпуск: 2006
Последняя версия: 1.2.1 (30 декабря 2009)
Лицензия MIT
Веб-сайт: assl.sullof.com

aSSL (англ. Ajax Secure Service Layer)– библиотека, реализующая технологию, аналогичную SSL без использования HTTPS. aSSL распространяется под лицензией MIT. Библиотека состоит из двух частей: клиентской компоненты и серверной компоненты. Первая всегда представляет собой набор файлов JavaScript, вторая компонента зависит от конкретных языков используемых на стороне сервера (JavaScript, PHP, Java, Ruby и т.д.) [Источник 1].

aSSL позволяет клиенту произвести обмен секретным случайным 128-битным ключом с сервером с использованием алгоритма RSA. Как только соединение будет установлено, данные будут отправлены и получены с использованием алгоритма AES.

Принцип работы

  1. Браузер посылает запрос серверу.
  2. Сервер возвращает RSA модуль и открытый ключ.
  3. Браузер генерирует случайный 128-битный ключ, шифрует его с помощью открытого ключа сервера и передает зашифрованный ключ серверу.
  4. Сервер получает зашифрованный 128-битный ключ, расшифровывает его с помощью своего секретного ключа RSA и возвращает время продолжительности сеанса.
  5. Браузер получает время длительность сеанса и устанавливает защищённое соединение.
  6. При последующем обмене данных с сервером используется шифрование алгоритмом AES с ключом, полученным на предыдущих этапах

Установка на стороне клиента

Распакуйте zip-файл aSSL.zip и поместите файлы в подкаталог. Затем добавьте файл assl.js в свой HTML. Этот файл добавляет все скрипты aSSL на страницу. Пример:

1 <script type="text/javascript" 
2 src="assl/assl.js"></script>

Установка на стороне сервера

Достаточно разархивировать файл aSSLforASP.zip в подкаталог. Существует два типа процессов, управляемых aSSL: процесс обмена секретными ключами и последующие процессы обмена зашифрованными данными. Разработчик рекомендует использовать одно приложение для первого процесса и другое для остальных, поскольку только для согласования ключей требуется полный набор библиотечных файлов. Например, можно создать следующий файл asslconn.asp:

1 <%@language="Javascript"%>
2 <!--#include file="assl1.2forAsp/assl.asp" -->
3 <!--#include file="myKey.asp" --><%
4 aSSL.response(myKey)
5 %>

MyKey.asp - это файл, содержащий RSA ключ сервера. Пример 512-битного ключа:

 1 <*
 2 var myKey = [
 3    '91305d87dd6de2944fd6a62ceaa5aae1'+
 4    '608798c73037747e55ac553b357c4b17'+
 5    '47848d671df1772fc755c7fdcbb81be1'+
 6    '3d854794622c29832d189aa1382d8617',
 7    '10001',
 8    '223e3701115f965e068a88bcf546c78b'+
 9    'ca7990b6021042407db25c93cf64964c'+
10    'f752072a08c70489ef4a1b8e95d7a948'+
11    'de312e46638cd0fcaa03d654b586ef71',
12    'c4e3ec8bc8753e7ffb78ce2bda372ae2'+
13    '266e3cf309d0940f5f1118c1d2a2bfdf',
14    'bcc6e96e460c6c1461737e9a742ca369'+
15    '320d60cb15a0310b8be7bc4b6ab720c9',
16    '2c315488d387ad6da08e2f089cc44135'+
17    'dd9664cbd06a26b1848f1bd57567de55',
18    '668c23683cf3288f15b518b42ca1c70f'+
19    '311a65574ce31d616959b446bfacc549',
20    '9b6eb5314afaffd51cda024facc091f3'+
21    '8c2f4554076d638844faa9b0f6e5a8c4'
22 ]
23 *>

Для генерации RSA ключа может быть использован генератор ключей Simple RSA для aSSL, представленный на сайте разработчика.

Последующие процессы обмена зашифрованными данными не потребуют всех файлов aSSL; они используют только assl_.asp (ядро aSSL) и aes.asp (алгоритм шифрования AES). Они могут быть включены следующим образом:

1 <%@language="Javascript"%>
2 <!--#include file="assl1.2forAsp/assl2.asp" -->

В примере, опубликованном на сайте разработчика, можно найти следующие файлы:

  • default.asp - клиентское приложение;
  • conn.asp - программа, которая устанавливает соединение;
  • mykey.asp - контейнер ключей RSA;
  • loginCheck.asp - программа, которая выполняет авторизацию входа в систему.

Описание свойств и методов библиотеки

aSSL.connect(uri,callBackFunction[,connectionName])

Клиентский метод. Используется для соединения с серверам.

  • uri – это uri серверной стороны приложения
  • callBackFunction – функция, которая будет автоматически вызвана при установке соединения
  • connectionName – имя соединения. Необязательный параметр. Значение по-умолчанию – '0'.

aSSL.encrypt(clearText)

Клиентский и серверный метод. Шифрует строку clearText, используя полученный ранее секретный 128-битный ключ.

aSSL.decrypt(cipherText)

Клиентский и серверный метод. Дешифрует строку cipherText, используя полученный ранее секретный 128-битный ключ.

aSSL.response(myKey)

Серверный метод. Устанавливает соединение, используя параметр myKey (файл, содержащий RSA-ключ сервера).

aSSL.connections[connectionName].sessionTimeout

Клиентское свойство. Продолжительность соединения с именем connectionName. При использовании соединения по умолчанию необходимо указать равным '0'.

aSSL.connections[connectionName].elapsedTime

Клиентское свойство. Время потраченное на установку соединения connectionName

aSSL.keySize

Клиентское свойство. По умолчанию Assl генерирует 128-битный ключ (например, ключ из 16 символов). Свойство означает количество символов в ключе. Если по какой-то нужно создать ключ другой длины можно установить это свойство. Например:
aSSL.keySize = 12

aSSL.onlyMantainSession

Клиентское свойство. По умолчанию, после того, как соединение было установлено, и секретный ключ был передан серверу, aSSL просто поддерживает сеанс. Если требуется, чтобы aSSL постоянно повторно согласовывал новый ключ вместо того, чтобы просто держать сессию открытой, следует установить это свойство равным false.

Безопасность aSSL

Сравним SSL и aSSL. SSL защищен, потому что это технология реализована на уровне браузера, так что, когда соединение HTTPS установлено, браузер проверяет SSL-сертификат перед продолжением сеанса.

Предположим, что хакер атакует с помощью атаки «человек посередине» (MiTM). При использовании SSL-соединения атака будет успешной, только если пользователь нажмет «ОК», когда браузер предупредит его, что сертификат не соответствует подключенному серверу (предупреждение также может появляться, если какой-то файл передается через HTTP вместо HTTPS, потому что в этот файл хакер может внедрить вредоносный код).

При использовании aSSL вероятность успешного завершения атаки выше, поскольку не происходит проверки сертификата. Однако разработчик отмечает, что атаки MiTM требуют мастерства и качественной организации. По этой причине такие атаки достаточно редки.

aSSL предназначен для некритических сайтов в виде чатов, блогов и т. д., где потенциальный выгода для хакеров будет низкой, и поэтому они не будут нацелены на такие атаки.

Сниффинг пароля - другая, гораздо более распространенная атака, поскольку требует меньшей квалификации злоумышленника. Более того, существует множество специальных программных средств - анализаторов трафика, которые могут помочь распознать идентификаторы пользователей и пароли.

aSSL защищает от таких снифферов. Когда сервер обменивается информацией об учетной записи с помощью HTTP протокола, снифер может просто перехватить все данные, но если сервер обменивается данными через aSSL, то, по заявлению разработчика, декодировать передаваемые данные представляется невозможным и, следовательно, уровень безопасности сайта повышается.

Пример использования

Фронтенд

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Chapter 7 : Security - Using SSL with Ajax</title>
<link rel="stylesheet" href="http://ajaxref.com/ch7/global.css" type="text/css" media="screen" />
<script src="http://ajaxref.com/ch7/ajaxtcr.js" type="text/javascript">
</script>
<script type="text/javascript">
 
 
function prepareRequests(form)
{
    var url;
    if (form.ssl.checked)
        url = "https://ajaxref.com/ch7/hello.php";
    else
        url = "http://ajaxref.com/ch7/hello.php";
        
    var options = { method: "GET",
                    outputTarget: "responseOutput"};
    
    AjaxTCR.comm.sendRequest(url, options);
}
 
window.onload = function () 
{ 
 document.requestForm.requestButton.onclick = function () { prepareRequests(this.form); };
};
</script>
 
</head>
<body>
<div class="content">
<h1>Ajax Request via SSL</h1>
<form action="#" name="requestForm">
<fieldset>
 <table width="100%">
 <tr class="row">
 <td width="125">Send through SSL:</td>
 <td>
  <input type="checkbox" name="ssl" checked="checked" />
 </td>
 </tr>
</table>
</fieldset>
  
<br />
<input type="button" name="requestButton" id="requestButton" value="Send Request" />
</form>
<br />
</div>
 
<div id="response" class="results">
    <div id="responseOutput"></div>
</div>
 
<br /><br />
<div id="scenarios">
    <h3>Scenarios</h3>
    <p>To avoid interception you should use SSL for transmission.  However, because of same-origin you need to make sure you are at the correct version
    of the site as you play with the example.  The SSL version would be <a href="https://ajaxref.com/ch7/ssl.html">https://ajaxref.com/ch7/ssl.html</a>
    while the standard non-encrypted version is at <a href="http://ajaxref.com/ch7/ssl.html">http://ajaxref.com/ch7/ssl.html</a>.  Your browser
    <strong>should</strong> have a problem if you are not at the appropriate address corresponding to the checked SSL state.</p>
</div>
 
</body>
</html>

Бекенд

<?php
 
    
$ip = $_SERVER['REMOTE_ADDR'];
$hellomsg =  "Hello World to "  .  $ip . " at ". date("h:i:s A");
echo $hellomsg;
?>

Источники

  1. aSSL - Ajax Secure Service Layer Homepage // Ajax Secure Service Layer. [2006-2016]. Дата обновления: 23.10.2016. URL: http://web-arhive.ru/view?url=http%3A%2F%2Fassl.sullof.com%3A80%2Fassl%2F&time=20161023195628&f=1 (дата обращения: 22.11.2018)