Разработка Java-апплета и подписывание архивного JAR-файла электронной цифровой подписью
Разработка Java-апплета, имеющего возможность обращения к локальной файловой системе при предоставлении соответствующих прав доступа. Упаковка апплета в архивный JAR-файл для его подписания электронной цифровой подписью, создание ключей и сертификата.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 08.06.2011 |
Размер файла | 540,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
1
Размещено на http://www.allbest.ru/
1
Государственное образовательное учреждение высшего профессионального образования
ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ
Кафедра «Информационные и вычислительные системы»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту
по дисциплине «Методы программирования»
на тему: «Разработка Java-апплета и подписывание архивного JAR-файла электронной цифровой подписью»
Выполнил:
студент группы КИБ-708
Таранин В.В.
Руководитель:
к.т.н., доц. Кожомбердиева Г.И.
Санкт-Петербург 2009
Задание
по курсовому проекту
по дисциплине «Методы программирования»
на тему: «Разработка Java-апплета и подписывание архивного JAR-файла электронной цифровой подписью»
В качестве исходных данных к курсовому проекту используется апплет, являющийся результатом выполнения лабораторной работы №4 «Разработка апплета с эффектом анимации на основе многопоточности Java».
Вариант задания №20
Необходимо расширить функциональность апплета с эффектом анимации, реализовав обращение к локальной файловой системе.
Создать архивный JAR-файл, содержащий апплет.
Подписать JAR-файл электронной цифровой подписью (ЭЦП) и задать политику безопасности для подписанного апплета, включив в файл политики соответствующую запись, разрешающую доступ к локальной файловой системе и выполнение операций чтения-записи.
При выполнении курсового проекта использовать утилиты jar, keytool и jarsigner, а также комплект JDK 1.4.x с модулем plug-in для браузера MS IE 5,(6),(7).
Аннотация
В данном курсовом проекте был разработан Java-апплет, использующий механизм многопоточности Java: использование двух потоков команд, реализующих движение геометрических фигур в области рисования апплета. Также апплет имеет возможность обращаться к локальной файловой системе, при предоставлении соответствующих прав доступа. Возможность обращения к локальной файловой системе реализована с использованием специализированных классов Java API.
Архивный JAR-файл, содержащий апплет, подписывается электронной цифровой подписью. Для апплета задается политика безопасности, путём создания пользовательского файла политики безопасности, который позволяет апплету получить доступ к локальной файловой системе и обеспечивающий возможность работы апплета за пределами модели безопасности Sandbox - «Песочница».
Подписанный электронной цифровой подписью апплет выполняется в среде MS IE с модулем plug-in из JDK 1.4.x.
После запуска апплета пользователю предоставляется возможность оказать доверие подписанному апплету и разрешить выполнение операций ввода-вывода в файл.
Содержание
Введение
1. Апплет с эффектом анимации на основе многопоточности Java и обращением к локальной файловой системе
2. Создание подписанного апплета
2.1 Создание архивного JAR-файла
2.2 Создание пары ключей и сертификата в хранилище ключей
2.3 Подписывание JAR-файла цифровой подписью
2.4 Задание политики безопасности для подписанного апплета
3. Выполнение подписанного апплета
Список использованных источников
Введение
Платформа Java 2 располагает мощной встроенной системой безопасности, включающая API-интерфейсы и механизмы, которые используются для обеспечения безопасности апплетов и приложений Java. Среди особенностей языка программирования Java, которые обеспечивают надежность и безопасность можно выделить: архитектурную независимость, интерпретируемость, переносимость, отсутствие указателей, строгую типизацию, эффективный механизм обработки исключений. Важными неотъемлимыми компонентами системы безопасности Java 2 являются Java Cryptography Architecture (JCA) - архитектура шифрования Java, а также Java Cryptography Extension (JCE) - криптографическое расширение Java.
Целью данного курсового проекта является - подписание архивного JAR-файла, содержащего апплет, электронной цифровой подписью, а также задание политики безопасности для подписанного апплета; ознакомление студентов с криптографическими методоми защиты информации и возможностями, которые предоставляет Java разработчиками программного обеспечения. Для этого необходимо: создать архивный JAR-файл, пары ключей и сертификата в хранилище ключей, далее подписать JAR-файл цифровой подписью и задать политику безопасности для подписанного апплета.
Результатом данной курсовой работы является подписанный электронной цифровой подписью апплет, имеющий возможность обращаться к локальной файловой системе.
1. Апплет с эффектом анимации на основе многопоточности Java и
обращением к локальной файловой системе
апплет архивный электронный цифровой подпись
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Calendar;
// Класс апплета, реализующий интерфейсы блоков прослушивания событий
public class Lab4 extends Applet implements ActionListener,ItemListener,Runnable
{
Panel p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,cards,pfield,pb,pread;
Label lb1,lb2,lb3;
CheckboxGroup cbg;
Checkbox cb1,cb2,cb3,cb4;
List list;
Canvas cv;
Button b1,b2,b3,b4,start,stop,read;
CardLayout cardLO;
Scrollbar sb1,sb2,sb3,sb4;
Color col;
int posX,strWidth;
FontMetrics fm;
int rectX=0,rectY=0,posFlag=0,movFlag=0,ovalX=0,ovalY=0;
int animFlag=0;
int rColor,gColor,bColor;
// Флаг остановки анимации
boolean stopFlag;
// Поток выполняющий анимацию
Thread t = null;
//Текстовая область для вывода содержимого файла журнала
TextArea fileText;
// Имя файла-журнала для записи информации о работе апплета
String fileName = "";
// Разделитель строк (признак конца строки)
String ls;
// Буферизированный символьный поток записи в файл
BufferedWriter out;
public void init()
{
setLayout(new GridLayout(2,2));
setForeground(Color.black);
col = Color.black;
// ЛЕВАЯ ВЕРХНЯЯ ПАНЕЛЬ
p1 = new Panel(new BorderLayout());
p1.setBackground(Color.lightGray);
p2= new Panel();
lb1 = new Label("Активная панель: ",lb1.CENTER);
p2.add(lb1);
p1.add(p2,BorderLayout.NORTH);
// Панель радиокнопок внутри ЛЕВОЙ ВЕРХНЕЙ панели
p3 = new Panel(new GridLayout(2,2));
cbg = new CheckboxGroup();
cb1= new Checkbox("Все панели",cbg,true);
cb2= new Checkbox("1-я панель",cbg,false);
cb3= new Checkbox("2-я панель",cbg,false);
cb4= new Checkbox("3-я панель",cbg,false);
cb1.addItemListener(this);
cb2.addItemListener(this);
cb3.addItemListener(this);
cb4.addItemListener(this);
p3.add(cb1);
p3.add(cb2);
p3.add(cb3);
p3.add(cb4);
p1.add(p3,BorderLayout.CENTER);
add(p1);
// ВЕРХНЯЯ ПРАВАЯ ПАНЕЛЬ
p4 = new Panel(new GridLayout(1,1));
list = new List(9,false);
list.add("Чёрный");
list.add("Синий");
list.add("Красный");
list.add("Зелёный");
list.add("Жёлтый");
list.add("Оранжевый");
list.add("Розовый");
list.add("Фиолетовый");
list.add("Тёмно-серый");
list.addItemListener(this);
p4.add(list);
add(p4);
// ЛЕВАЯ НИЖНЯЯ ПАНЕЛЬ
// Панель с кнопками
p5 = new Panel(new GridLayout(2,2));
b1 = new Button("Квадрат");
b2 = new Button("Круг");
b3 = new Button("Треугольник");
b4 = new Button("Строка");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
p5.add(b1);
p7.add(b2);
p5.add(b3);
p5.add(b4);
pb = new Panel(new GridLayout(1,2,5,0));
lb2 = new Label("Управление потоками",lb1.CENTER);
start = new Button("Запуск"); start.addActionListener(this);
stop = new Button("Остановка");stop.addActionListener(this);
pb.add(start);
pb.add(stop);
// !!! ПАНЕЛЬ ДЛЯ ЧТЕНИЯ ФАЙЛА-ЖУРНАЛА !!!
pfield = new Panel(new BorderLayout());
pread = new Panel(new GridLayout(3,1));
read = new Button("Чтение файла-журнала");
read.addActionListener(this);
// Текстовая область для вывода информации из файла журнала
fileText = new TextArea();
// Название файла-журнала задаётся параметром в HTML-файле
// или если такого нет - создаётся по умолчанию
fileName = getParameter("FileName");
if (fileName == null)
fileName = "log.txt";
ls = System.getProperty("line.separator"); // разделитель строк
fileText.setBackground(Color.white);
pread.add(lb2);
pread.add(pb);
pread.add(read);
pfield.add(p5,BorderLayout.NORTH);
pfield.add(pread,BorderLayout.CENTER);
pfield.add(fileText,BorderLayout.SOUTH);
add(pfield);
// ПРАВАЯ НИЖНЯЯ ПАНЕЛЬ
// ПАНЕЛЬ С КАРТАМИ (ГЛАВНАЯ)
cardLO = new CardLayout();
cards = new Panel();
cards.setLayout(cardLO);
cards.setBackground(Color.white);
posX = 65;
// ПЕРВАЯ ПАНЕЛЬ В КАРТАХ
p6 = new Panel(new BorderLayout())
{
public void paint(Graphics g)
{
if(animFlag==0)
{
g.setColor(col);
g.drawRect(rectX,rectY,50,50); }
}
};
// ВТОРАЯ ПАНЕЛЬ В КАРТАХ
p7 = new Panel(new BorderLayout())
{
public void paint(Graphics g)
{
if(animFlag==1)
{
g.setColor(col);
g.fillOval(ovalX,ovalY,50,50); }
}
};
// ТРЕТЬЯ ПАНЕЛЬ В КАРТАХ
p8 = new Panel(new BorderLayout())
{
public void paint(Graphics g)
{
g.setColor(col);
int x[] = {posX,posX+40,posX+80};
int y[] = {80,20,80};
g.drawPolygon(x,y,3);
}
};
sb3= new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,100);
sb3.addAdjustmentListener(new AdjustmentListener()
{
public void adjustmentValueChanged(AdjustmentEvent ae)
{
posX = (ae.getValue())*(cards.getSize().width -80) /sb3.getMaximum();
p8.repaint();
}
});
p8.add(sb3,BorderLayout.SOUTH);
// ЧЕТВЁРТАЯ ПАНЕЛЬ В КАРТАХ
P9 = new Panel(new BorderLayout())
{
public void paint(Graphics g)
{
fm = g.getFontMetrics();
strWidth = fm.stringWidth("J A V A");
g.setFont(new Font("Dialog",Font.ITALIC,20));
g.setColor(col);
g.drawString("J A V A",posX,65);
}
};
sb4= new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,5);
sb4.addAdjustmentListener(new AdjustmentListener()
{
public void adjustmentValueChanged(AdjustmentEvent ae)
{
posX = (ae.getValue())*(cards.getSize().width - strWidth)/sb4.getMaximum();
p9.repaint();
}
});
p9.add(sb4,BorderLayout.SOUTH);
// ДОБАВЛЕНИЕ КАРТ В ПАНЕЛЬ С КАРТАМИ (cards)
cards.add(p6,"sqaure");
cards.add(p7,"oval");
cards.add(p8,"rect");
cards.add(p9,"text");
add(cards);
// СОЗДАНИЕ БУФЕРИЗИРОВАННОГО СИМВОЛЬНОГО ПОТОКА ЗАПИСИ В ФАЙЛ
try
{
// В качестве параметра в данном конструкторе класса Buffered используется
// ссылка на объект основного потока (приёмника данных)
out = new BufferedWriter(new FileWriter(fileName));
}
catch(IOException ex)
{
fileText.setText("Ошибка при создании потока записи: " + ls);
fileText.append(ex.toString() + ls);
}
catch(SecurityException ex)
{
fileText.setText("Нет разрешения доступа к файлу: " + ls);
fileText.append(ex.toString() + ls);
read.setEnabled(false);
}
if (out != null)
{
// Если создание Buffered-потока прошло успешно то в качестве данных, которые
// будут заполнять буфер будет являться сообщение от текущей дате и времени
Calendar c = Calendar.getInstance();
String dateMessage ="Дата и время: " + c.get(Calendar.DAY_OF_MONTH) + "/" +
(c.get(Calendar.MONTH)+1) + " - " + c.get(Calendar.YEAR) +
" " + c.get(Calendar.HOUR_OF_DAY) + ":" +
c.get(Calendar.MINUTE);
// После записи в String-переменную dateMessage информации о дате -
// вызывается метод writeLogMessage
writeLogMessage(dateMessage);
writeLogMessage("Инициализация апплета завершена");
}
/*--------------INIT--------------*/
}
// Вывод сообщения в буферизированный поток для записи в файл
private void writeLogMessage(String message)
{
// Запись в файл осуществляется вызовом метода write объек-та out типа BufferedWriter
try
{
out.write(message);
out.newLine();
}
catch(IOException ex)
{
fileText.setText("Ошибка записи в файл:" + ls);
fileText.append(ex.toString() + ls);
}
}
// Запуск потоков
public void run()
{
// Пока флаг остановки анимации равен false - происходит анимация
while (!stopFlag)
{
try
{
if(animFlag==0)
{
if(posFlag==0) // Начальное движение вправо по верхней грани
{
p6.repaint(); // Перерисовка
// Временное (на 40 мс) остановка потока для создания эффекта анимации
// Далее идут аналогичные изменения координат/
Thread.currentThread().sleep(40);
rectX+=5;
if(rectX>p6.getSize().width-50)
{
rectX-=7;
posFlag =1;
if(posFlag==1)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p6.repaint();
}
}
}
if(posFlag==1) // Движение вниз по правой грани
{
p6.repaint();
Thread.currentThread().sleep(40); // приостановить поток
rectY+=5;
if(rectY>p6.getSize().height - 50)
{
rectY=p6.getSize().height-53;
posFlag=2;
if(posFlag==2)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p6.repaint();
}
}
}
if(posFlag==2) // Движение влево по нижней грани
{
if(rectX>0)
{
p6.repaint();
Thread.currentThread().sleep(40);
rectX-=5;
}
else
{
rectX=0;
posFlag=3;
if(posFlag==3)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p6.repaint();
}
}
}
if(posFlag==3) // Движение вверх по левой грани
{
if(rectY>0)
{
p6.repaint();
Thread.currentThread().sleep(40);
rectY-=5;
if(rectY<0)
{
rectX=0;
rectY=0;
p6.repaint();
{
if(rectX==0 && rectY==0)
{
posFlag=0;
if(posFlag==0)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p6.repaint();
}
}
}
}
}
}
}
if(animFlag==1)
{
if(movFlag==0) // Движение по диагонали сверху в нижний угол
{
p7.repaint();
Thread.currentThread().sleep(50);
ovalX+=5;
ovalY+=5;
if(ovalX>p7.getSize().width-50)
{
ovalX = p7.getSize().width -50;
ovalY = p7.getSize().height-52;
movFlag =1;
if(movFlag==1)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p7.repaint();
}
}
}
if(movFlag==1) // Движение по нижней грани
{
p7.repaint();
Thread.currentThread().sleep(50);
ovalX-=5;
if(ovalX<0)
{
ovalX=0;
movFlag=2;
if(movFlag==2)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p7.repaint();
}
}
}
if(movFlag==2) // Движение по диагонали снизу вверх
{
p7.repaint();
Thread.currentThread().sleep(50);
ovalX+=5;
ovalY-=5;
if(ovalX>p7.getSize().width-50)
{
ovalX = p10.getSize().width - 52;
ovalY = 0;
movFlag=3;
if(movFlag==3)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p7.repaint();
}
}
}
if(movFlag==3) // Движение по верхней грани в обратном направлении
{
p7.repaint();
Thread.currentThread().sleep(50);
ovalX-=5;
if(ovalX<0)
{
ovalX = 0;
movFlag=0;
if(movFlag==0)
{
rColor = (int)(255*Math.random());
gColor = (int)(255*Math.random());
bColor = (int)(255*Math.random());
col = new Color(rColor,gColor,bColor);
p7.repaint();
}
}
}
}
}
catch (InterruptedException e)
{
return; // Завершить поток
}
}
}
//Реализация блоков прослушивания от кнопок
public void actionPerformed(ActionEvente)
{
String ac = e.getActionCommand();
if(ac.equals("Квадрат"))
{
animFlag=0;
cardLO.show(cards,"sqaure");
writeLogMessage("Рисуется Квадрат");
}
if(ac.equals("Круг"))
{
animFlag=1;
cardLO.show(cards,"oval");
writeLogMessage("Рисуется Круг");
}
if(ac.equals("Треугольник"))
{
cardLO.show(cards,"rect");
}
if(ac.equals("Строка"))
{
cardLO.show(cards,"text");
}
else if("Запуск".equals(ac))
{
t = new Thread(this);
stopFlag = false;
t.start();
start.setEnabled(false);
writeLogMessage("Поток запущен");
}
else if("Остановка".equals(ac))
{
stopFlag=true;
t = null;
start.setEnabled(true);
writeLogMessage("Поток остановлен");
}
if("Чтение файла-журнала".equals(ac))
{
try
{
// Сброс данных из буфера потока (запись в файл)
out.flush();
// Далее происходит чтение из файла и заполнение текстовой области
// данными, содержащимися в текстовом файле Lab4Log.txt
// Создание буферизированного символьного потока чтения из файла*/
BufferedReader in = new BufferedReader(new FileReader(fileName));
String s = "", line;
while ((line = in.readLine()) != null)
s += line + "\n";
fileText.setText(s);
in.close();
}
catch(IOException ex)
{
fileText.setText("Ошибка чтения файла: " + ls);
fileText.append(ex.toString());
}
}
}
// Реализация блока прослушивания от списка List и переключателей(CheckBox)
public void itemStateChanged(ItemEvent ie)
{
if(ie.getSource() == list)
{
String s = list.getSelectedItem();
if(s.equals("Чёрный"))
{
col = Color.black;
}
if(s.equals("Синий"))
{
col = Color.blue;
}
if(s.equals("Красный"))
{
col = Color.red;
}
if(s.equals("Зелёный"))
{
col = Color.green;
}
if(s.equals("Жёлтый"))
{
col = Color.yellow;
}
if(s.equals("Оранжевый"))
{
col = Color.orange;
}
if(s.equals("Розовый"))
{
col = Color.pink;
}
if(s.equals("Фиолетовый"))
{
col = Color.magenta;
}
if(s.equals("Тёмно-серый"))
{
col = Color.darkGray;
}
p6.repaint();
p7.repaint();
p8.repaint();
p9.repaint();
}
}
// Обработка события от CheckBox (Определение доступности панелей и их компонентов)
if(ie.getSource() == cb1)
{
p1.setEnabled(true);p4.setEnabled(true);
p7.setEnabled(true);
cards.setEnabled(true);
}
if(ie.getSource() == cb2)
{
p1.setEnabled(true);p4.setEnabled(true);
p7.setEnabled(false);
cards.setEnabled(false);
}
if(ie.getSource() == cb3)
{
p1.setEnabled(true);p4.setEnabled(false);
p7.setEnabled(true);
cards.setEnabled(false);
}
if(ie.getSource() == cb4)
{
p1.setEnabled(true);p4.setEnabled(false);
p7.setEnabled(false);
cards.setEnabled(true);
}
}
}
2. Создание подписанного апплета
2.1 Создание архивного JAR-файла
Для подписания апплета электронной цифровой подписью его упаковывают в архивный JAR-файл. В данной курсовой работе для этой цели используется утилита jar, либо можно использовать интегрированную среду разработки приложений.
Для создания архива применилась команда следующего вида:
jar cfv Lab4.jar Lab4*.class,
где: jar - название утилиты, которая упаковывает файлы и создаёт архив
cfv - это набор из трёх параметров:
· с - указывает на то,что создаётся новый архив
· f - первый элемент в списке файлов - имя архива, который должен быть создан
· v - вывод на консоль сообщений о всех действиях утилиты jar
Lab4.jar - название нового архива
Lab4*.class - параметр указывает, что все файлы классов расположенные в текущем каталоге, размещаются в архиве Lab4.jar
При этом утилита jar создаёт каталог META-INF с файлом описания архива MANIFEST.MF
Также в HTML файле, используемом для запуска апплета были внесены изменения, а именно добавлен атрибут ARCHIVE элемента Applet. Значение атрибута ARCHIVE = Lab4.JAR.
2.2 Создание пары ключей и сертификата в хранилище ключей
Далее с помощью утилиты keytool создаётся пара ключей («открытый/закрытый») и сертификат по стандарту X.509 для псевдонима «Taraninkey» в хранилище ключей Taraninstore в текущем каталоге.
Для создания самоподписанного сертификата применилась команда:
keytool -genkey -alias «Taraninkey» -keystore Taraninstore,
где:
-genkey - параметр указывающий, что утилита keytool должна сгенерировать ключи
-alias «Taraninkey» - псевдоним, под которым в хранилище ключей размещается сертификат
-keystore Taraninstore - название хранилища ключей
Также по требованиям утилиты, был введён пароль защиты хранилища ключей, информация о владельце сертификата и пароль защиты закрытого ключа.
В данном курсовом проекте пароль закрытого ключа «Taraninkey» - 123369, а пароль хранилища ключей «Taraninstore» - 123.
При создании ключей и подписании сертификата были использованы алгоритмы:
· Алгоритм ключа RSA
· Алгоритм подписи MD-5
2.3 Подписывание JAR-файла цифровой подписью
Архивный JAR-файл подписывается с помощью утилиты jarsigner. используя следующую команду:
jarsigner -keystore Taraninstore Lab4.jar «Taraninkey»
Утилита требует ввести пароль хранилища ключей и пароль закрытого ключа после чего модифицирует файл описания архива MANIFEST.MF в каталоге META-INF архива.
В него добавляются записи для каждого файла класса, входящего в архив. Запись файла класса включает имя и дайджест файла.
Также в каталог META-INF архива добавляется файл подписи TARNINK.SF.
Содержимое файла подписи TARNINK.SF.
Файл подписи идентифицирует каждый из файлов в архиве, алгоритм дайджеста содержит для каждого файла значение дайджеста, вычисленного из записи файла в файле описания MANIFEST.MF.
На заключительном этапе подписания в каталог META-INF файла архива добавляется двоичный файл подписи TARANINK.RSA. Расширение файла подписи указывает, что утилита keytool использует алгоритм цифровой подписи RSA. Этот файл содержит подпись файла подписи TARNINK.SF и сертификат, заверяющий подлинность открытого ключа, соответствующего закрытому ключу, использованному при создании подписи.
2.4 Задание политики безопасности для подписанного апплета
В данной курсовом проекте для получения доступа к локальной файловой системе, для подписанного электронной цифровой подписью апплета, был создан пользовательский файл политики безопасности Lab4.policy.
Содержимое данного файла - набор разрешающих записей, в которых указываются права доступа, предоставляемые источнику кода апплета. Данная запись права доступа предоставляет право чтения/записи всех файлов файловой системы.
3. Выполнение подписанного апплета
При запуске апплета в среде браузера MS IE 5(6) с модулем Java plgu-in из JDK 1.4.x система безопасности задаёт вопрос о доверии поставщику, чьим сертификатом заеверен апплет.
При выборе пользователем ответа Grant this session апплет получает полные права доступа ко всем ресурсам. Для обращения к локальной файловой системе пользователь может осущесвить чтение файла-журнала, хранящегося на локальном диске, нажав кнопку «View Certificate».
При выборе пользователем Deny апплет получает разрешене работать только с теми ресурсами, права доступа к которым прописаны в файлах политики безопасности. При выборе Grant always апплет получает полные права доступа ко всем ресурсам, при следующем запуске апплета не будет задаваться запрос о доверии поставщику, права доступа будут автоматически ко всем ресурсам.
При запуске подписанного апплета под браузером appletviewer апплет автоматически получает права доступа к ресурсам, указанные в пользовательском файле политики безопасности, размещённом в текущем каталоге.
Список использованных источников
Корниенко А.А., Кожомбердиева Г.И., Ерофеев П.В. Электронная цифровая подпись и безопасность Java-апплетов. Метод. указания. - СПб.: ПГУПС, 2005. - 28 с.
Корниенко А.А., Кожомбердиева Г.И., Киселев И.С. Методы криптографической защиты информации и их реализация на платформе Java: Метод. указания. - СПб.: ПГУПС, 2006. - 35 с
Ноутон П., Шилдт Г. Java 2: Пер. с англ. - СПб.: БХВ-Петербург, 2006
Java 2 SDK, Standard Edition Documentation, version 1.2.2.
Яворски Дж., Перроун П. Система безопасности Java, 2001.
Размещено на Allbest.ru
Подобные документы
Описание пакета прикладной программы Net Beans 8.1. Разработка пользовательского интерфейса апплета. Создание рамочных окон на базе фреймов библиотеки java.swing. Изменение цвета текстовых данных. Проектирование и создание инфологической модели апплета.
контрольная работа [1,8 M], добавлен 11.07.2016Кратка историческая справка развития языка Java. Анализ предметной области. Java platform, enterprise and standart edition. Апплеты, сервлеты, gui-приложения. Розработка программного кода, консольное приложение. Результаты работы апплета, сервлета.
курсовая работа [549,2 K], добавлен 23.12.2015Описание языков программирования Java и JavaFX. Среда разработки NetBeans и класс численных методов. Архитектура и принцип работы апплета с понятным пользовательским интерфейсом. Разработка алгоритма программы на примере модели межвидовой конкуренции.
курсовая работа [1023,2 K], добавлен 19.09.2012Схема формирования электронной цифровой подписи, её виды, методы построения и функции. Атаки на электронную цифровую подпись и правовое регулирование в России. Средства работы с электронной цифровой подписью, наиболее известные пакеты и их преимущества.
реферат [27,8 K], добавлен 13.09.2011Анализ объектно-ориентированной технологии программирования на примере языка Java. Методы, инструменты разработки web-приложений. Применение их при создании Интернет-магазина для ООО "Компас". Разработка апплета для его страницы в виде стрелочных часов.
курсовая работа [2,7 M], добавлен 31.01.2014Назначение электронной цифровой подписи как реквизита электронного документа, предназначенного для его защиты с помощью криптографического ключа. Асимметричные алгоритмы шифрования и атаки на электронную подпись. Средства работы с цифровой подписью.
реферат [20,6 K], добавлен 09.10.2014Понятие и средства создания Java-апплета. Использование ActiveX объектов на web-страницах. Редакторы типа WYSIWYG. Возможности технологий COM, CORBA, XML Path. Описание содержания XML документа с помощью схем DTD. Создание меток и сущностей в DTD.
контрольная работа [1,1 M], добавлен 06.12.2012Основные алгоритмы реализации электронной цифровой подписи. Понятие секретного и открытого ключа. Программные модули, сроки действия и порядок функционирования электронной подписи. Технология работы с информационной системой "ЭЦП", перспективы развития.
курсовая работа [1,1 M], добавлен 07.12.2010Назначение электронной цифровой подписи. Использование хеш-функций. Симметричная и асимметричная схема. Виды асимметричных алгоритмов электронной подписи. Создание закрытого ключа и получение сертификата. Особенности электронного документооборота.
реферат [43,2 K], добавлен 20.12.2011Архитектура уровня команд платформы Java, формат файла класса Java. Компилятор ассемблероподобного языка, позволяющий создавать файлы классов, корректно обрабатываемые реальной JVM, поддерживающий все команды байт-кода Java и важнейшие возможности JVM.
курсовая работа [292,6 K], добавлен 17.09.2008