������� ������������ ��� ��������. �������� ����������� ������� ��� ���������� �������� ������� � �������������� ������������ ��������� �����
�����
������ ������ �� ����� �� ������������ � �������� ����������� (trusted) ������� ����������� ������ ������� � ��������� �������� �������. ��������� ������ �������� ������������ ����� � � ��� ��������������� ���� �� ������������� ����� ��������� ���������� ��������� ���������� MD5 with RSA/SHA1 with DSA ("RSA/DSA ���n key crypto system") �� ������� ������� � ������������ ��������� ������� �� ������� �������, ������� ����������� �� ����� ���� ����������� java �������� ��� ������� � ������ �� ������ �������. �������� �� �������� � ������� �� ������ ����������� ��� � ��������� ����� (���������� ��������� ������ "����������� ������" ������� �������� �������������� ��) �������� ������ ��������� ��������� �������� ���������� ��������� ��� �������� ������������� ��� ���������� �����, �������� ������, ��� ����� ������ ���������� ������������.
���� ���������, ��� ������ ����� ������� �������� �������� ��� �������� ������� �������� ���������� ������ jdk1.3 ������� ����� ������� � http://java.sun.com ��� ����������� ��� ������ � ������ ������������ � ���������� IE4 � ���� ��� NN4.75 � ����� ������� ������. ��� �������� �� ������� ����������� ������ � jdk1.3 ������� ������������ ����� ��������� ������������� �� ���� JDK1.1 � �������������� javakey. � ������ ������ �� ������� ��������� ���������� �������, �������� �������������� ������� � �������� ��� �������� ��������� ��� ������� �������, �� ���������� ���������� ��������, � �� ������ ������� ����������� -- ��������������, ��� �� �������� ��������� ������������ ��� ������ ������.
� ���� ������� ������ ������ � ��������������� ��������� �����?
-- c ������ �������� ������������: ���� �� ���� ���� ���������� ��������� ������� � ������ ��� �� ����� ������ ������������� �� � ������ ���� ��������� ������, ������� � ���������� ������������ ���������� ����������� �������, � �� ����������� �������� ������ ��� �������� �������, ������� ����� ����� ���������������� ��������� � ������ ������� ��� ��������� ������.� ����������������� ������� � �������� ������ ������ ����� ��� ��������� ������� ���������� �����: ����������� �������� ���� � ��������� ����. ������ �� ��� ��������� ���, ��������� � ������� �������. ������ ��������� ����� �� ��������� ��� ��������� ��������������� ��������� ����. �������� ���� ����� ������������� � ������ ���������������� ����� ���������������� ����. ����� �������� ������������ ����������� ��� ������������� ������������ ����������� ������ �����, ����������� ��� ����������� ����������������� ������.
��� ������ ����� ������������ �������� ���� ����������, ����� ����������� ��������� ���, � ���������� ���������� ��� ����������� ��������������� ��������� ���� ��� ����������� ���������. �����, ����� ����������, �� ����� ������������ ���, ������ ��� ����� ������ �� ����� ������� � ���������� �����. ���� ���, ��� �������� ���������, �� ����� ����� ����������� ������������ ���.
����� ����, �������������� ����� ������������ ����������� ���������. ����������� ��������� ���� ����������� ����� ���� ����������� ��� �������� ���������, ����� ������� "����������" ���. ��� ��������� ����������� ������� ���������, ������� ���������� (��� ���-���� ���) ����� ���������, ��������� �������� ���� ����������� ��� �����������. ��� ����������, ��� ������������ ��� ������������� ��������� ��������� � ��� ��������� ������������ �� ���������� ���-����, ��� ��� ����������� -- ������������, ��� �������� ��������� ������, � ������� �������� ���� ������� �������. �������� ������������ ��������� ����������, � ����������� �� ����� ������������ �������� ���� �������.
��� ��� �������� ����� ���� ���������� ��� ����������� � �����������, � ������������ �����������: ������� ������������� ��������� ����� ����������� ��������� ������, � ����� ��������� ��� ����������� ��������� �������� ������ ����������. ���������� ������ ��������: �������������� ��������� � ������� ������������ ���������� �����, � ����� ��������� ������� � ������� ������ ��������� �����. ��� ���� ����������� ������������� � ������� ������������ ����������� ����������.
�������� ����� �������� � ���� "������������ ������", ������� �������� � ���� ������������� ������������ ��������� ����� (������ ��� ��� ������������) , ��������� �����, ������� ��������� ����� ��������� ���� ������, � ���������� �����. ����������� �������� ������ �������� �������� �����, � ����������� ��������� ������ -- ���������. ������ ��������� ���� ����� ��������� � ��������� �������. ���� ������, ��� ������� ������ keystore � ����� ������ �������� ���� ��� ��������� ����� ������������. � ��������� �������� ������ �������� ����������� �������� ������, � � ��������� ��������� -- ����������� ��������� ������.
�������� ������
�������� ��� �������� ������������ ��������� �� ������ �������� ������������ ��������� �����. �� ����� ���� -- ����� ���������� �������� ��� ��� �������� �������������, ���� �� ��������� trusted ������ -- ��� ����� �� ������� ���� ������ � ����� ��������� keystore � �������� �������� ��� ������ -- �������������� ������� ������� (���� �������� ��������� ���������) ���������� ������������ ��� �������������� ���� ������ ���������� � ����� keystore. � ���� ����� ����� � ����� ���������� ������������ -- ���� ���������� �������������� ������������ '�� �������' ��� ������� ����� �� astu.secna.ru/ -- ������ ��� ��������� ��� ������, ������ ����� ���������� ����������� �������� �������� ��������� � �������������� �������� ������ -- �������� �� ������� -- ��� ������� ���������, ������� ���������, ����� ��� ����������� ��������� ������� �����������, � ���� ������� ��������� ��� ������� ���� ���� �� ��� ����� ���� � ����������� ��������� ��� ������������� ��������� � ���������� ������ ����������� ��������. ����� ������, ����� �� ������ ���� ������ ����������� ��� ������, � ����� ���� ������ ����������� ������ � ���, ��������� �� ��������� ��������� ��������� ����������� -- ���� ��� ���� ������� ����������� ��� ����������� ��� �������� �� ������� �� � ���, �����, �������, ����������� ������������ ��� ��������.��� �� �������� ��������� ������������ ������� �������� �������� VeriSign ��� Thawte, ����� �������� � �������� ����� �������� � ������� �������, �� ��� �� ����� �����������, � ���� ��� �����, ������, ��� ��� ��������� ��������� ����, � �� �������� �� �������� ����������� ��� ������� �������� � ������ ����� ������, ��� ����� ��� ���� ���� ������ �������.
���� �� �� ������ ���������� pkcs12, *.cer ��� ����������� � ������� �������� ����� ���������, ��������� �� �� � ������������ �������, ����������� ��������� �� ��� ����� ������ ����, ��������� ���������� ����������� ����� �� ���������� ����������� � ����������� ��������� � ���������� ���������������� �����������. ����� �������, �������� �������� ������ ������� ����� ���� - ��� ����������� ����������� �������� �������� ������������ ���������, ������ ������ ���������� ��� ����� ���������� ������ ������� ����������� ������.
�� �������� ��� ����� �� ��������� ��������� �������: ���������� ���� ����� ���������� ������ ��������� ��������� �������� ��� ����� ��������� �������� (����� ���� � �����, ��� ������ ��� ������ ��������� ��������� �����) ������� � ��������� ������, � ������� �� ���� ����� �� ����������. ����� ����������� � ������� �����, ���� �� ������������� �������� ���������� ����� ���������� ������ ������� � ���������, �� ������ ����� �� ������ ����������� �������� ��� ��������� �, ��������, ���������. � ����� �� ��� ������ ������ ���������� �������� ��� ����� ������������, ������ �� ��� ������ �����������. ���� ����� ������������ ������������ �������� � ����������, �������� ����� ���� �� ������� ��� ��������� ��������:
- ����, ���������� ��� ����� ������ ����� ������� � �������
- �� ������ ����� alias(���) ������� ����� ���� ������� ������ �������� (�� ����� ���� ��������� �� �������, �� ������ ����� ����� �������� ������ ��������)
- ����, ���������� �������� �������� ������� ��� ������ (�����) � keystor'e ���������� �� �������, � ����������� ��� ��������� ������� ���������.
��� ���������� ����� ���������� ������ � ���� �������, ��� ��� ����������� ���������� ��������� ���������������� ��������, ����������� ��������. �� �������� ����� ����������� ������, ����� ���� ���� ����������� keystore ����� � ��������� ������� � ���� ������� �����, � ���� ��� ��� ������ �� ������� ������������, ��� ����������������, ������ ���� � � ���� �������� �������� ������ ������ ����� �����. ����� �� ������ ��������� �������� ���� �������, �� ������ ��� ������� ���������� ������, ������, ���������� ����� � ��������� ������� ������� ���� �������� �� ����� �������� ����� �� �������� ����������� �������, ��������� ��� ���������� ���� �� ������ �� ����������� ������ �������� ������� ��� ����������� �����������.
������ ����������
������� �������� � ����� ������� �� ���������� ����������� � ��� ������ ������ ���������� �������� �������:- �� ����� ������� web-�������, ������������� �� �������� �� ������ �� ���������� (��������� ��� ���������), � ������� ������� ���� ��� ������������ ��������� ���� (�������� �� �������, keystore), � ��� ������ �������.
- ������, ����������� ��������� �������, ���������������� ��� �� ����� ��� �������� ������ ��� ������ ��������, � ������� � �� ���� ����������� (keystore) ���������� ��������� ���� ������� ��� ��� �������� �� ��������������.
- ����� ������� ����������������� �������, �� ��� �������, ������ ��������� � ������� ������� �������� � ������� �� ������� ��� �� ��������, �� ��� ���������� �������� �������� ������� ����������������� �������.
- ���� ������ �������� ��������, �� ������ ������� ���������� �������� ���������, ������������� �� ������ �������� ������� ��������� ������ ������� �������, ������ ��� � �������� ������ ������� ���������� � ��.
- � ������, ���� �������� ������� ����� -- �������� ���������� ����������, ����� ���� ��� �������� � �������� ������� ��������� � �� � �������� � ��� �� �������� �� ������ ����.
������ ������� � �������� ���������� keystore -- � ��������� �������� ���������� keystore �� ���������� ��������� ������ �� ��� ������� �� ���������� ������ ��� �� ������������ ��� ��� ���������� ����������� �������. ������� �������� ��������� ���������� �� ���������� �����, � ����������� ���������� ������ ������������ �������:
- �� ������ ������� ��������� keystore ��� ������� � ������� "JKS"
- ��� ��������� keystore ������ ���� �������� ��� ������� ��������� � ����������� ������������.
- �������� �� ������� ������� �������� ���� ��������� ����� ����� �� java ����������, � ������ ������� ������������� ����������� ���������� ������������ � ������ �������� ����������������� ����������.
������� 1. �������� ����������� keystore
��������� ��� ��� ����������� �� �����, ����� ������ �� �������� -delete ���������� ���� :
������� 2. �������� ������������
������� ����� �� ������� ����� ������ �� ���, ����� ���� �������� ������
������� 3. ����� �������
��� �������� �� ������� ������ �������� ��� keystore � alias'a -- ������ ����� ��������� ��� ���������� ��������� ��������:
������� 4. �������� �����������
��������� jdk1.3\bin > �������� ��� ����� � ��� ����� ������� �������. ����� �� ����� �� ��������� ������ ����� ����� ������� � ��������� ���������� ��� ��������������� � ������� *.cer -- ������������ � ��� ������� �� ������ ������� �������� ������� �������. ��� ����� ������� ���� ��� ���������� �����������, �������� �� ����� A:\certificate.cer � �� ���������� ��������� ������ ������ ������� ���������� ����:
������� 5. �������� ����� ��� ���������� �����������
������� � ���� A:\certificate.cer ����������� ��������� ����� ������ �����������, � ������� ����� ���� ���������� �� ������ ������� Windows. � ��������� ���������� ����, ����� ��� ��������� ��������� ������ �� ������ ��������� ���� ����� ����������� keystore, ���, ���� �� ������ ���������� � �������� ����� ������, (������ ������ ��������) ������ ������ ������ � ������������ ����������. ������, ����� � ��� ���� ��� ����������� ����������, ����� ���������� ��������������� � ��������� ���� ������� � �������� ��� ��������� ��� �������.
������ � �������, ������� ������ ������ ��������� ������:
- �������� � ������� �������� ��� �������.
- ��������������� ��� �������
- ��������� �������� ������� ���������
- �������� �������� � ������� ��� ��������
- ������ ���� ���������� �������� ��� ������� � a:\\cacerts
<FORM name='sbm'> //������ ����� � ������� javascript ���������� ���
</FORM> //������� �� ������ -- ��� �������� ��� �������� ��������
//������ InputStream'�
<applet
MAYSCRIPT="MAYSCRIPT" //������ ����������� ��� ���������� javascript'�
codebase = ". "
ARCHIVE = "sign_applet.jar"
code = "sign_applet.class"
name = "TestApplet"
width = "600"
height = "450"
hspace = "0"
vspace = "0"
align = "middle"
>
<param name = "addressFrom" value =
"http://naprimer. ru/test. txt"> //�������� -- ����� ����� ��� �������
<param name = "addressTo" value =
"http://naprimer. ru/yuorServlet"> //�������� -- ����� ����������-��������
� ��� ������:
import java.awt.*;
import java.awt. event.*;
import java.util.*;
import java.lang. Byte;
import java.applet.*;
import java.io.*;
import java.net.*;
//���� ������� ��� �������� �������
import java.security.spec.*;
import java.security.cert.*;
import java.security.*;
import java.security.interfaces.*;
import java.math.*;
//���� ������� ��� JSObject
import netscape.javascript.*;
public class sign_applet extends Applet {
KeyStore ks;
InputStream is = null;
DataInputStream dis = null;
boolean isStandalone = false;
byte b[]=null;
TextArea ar;
TextField tf;
Button bt;
String func = "func";
String addressFrom = "";
String addressTo = "";
String buttonTxt ="send your signature to other side";
public void init()
{
//� ������� �������� �������� ���������
//��������� � �������� ������
//� ������� ���������� �������� �������
setSize(600, 450);
setBackground(Color.white);
//��� ������ ��������� �������
ar = new TextArea(25, 80);
//��� ����� ��������������
ar. setEditable(false);
ar. setBackground(Color.white);
//��� �������� ������
tf= new TextField(40);
//��� ������� ��������� ������� � ��������
bt = new Button(buttonTxt);
bt. setBackground(Color.white);
//������� �������� �������� � ��������� ������...
try{
addressFrom = getParameter("addressFrom", "address not found");
addressTo = getParameter("addressTo", "address not found");
}
catch(Exception e) {}
}
public void start()
{
add(ar);//��������� ������ � ���� � ������
add(tf);
add(bt);
try {
//��������� ������� keystore �� �������
ks = KeyStore.getInstance("JKS", "SUN");
//� ����� FileInputStream �� ��� keystore �� �������
is = new FileInputStream("a:\\cacerts");
//���������� �� ������ -- �� ������������� ������
URL url = new URL(addressFrom);
//��� �� ���� -- ��������� URLConnection
URLConnection urlConn = url.openConnection();
//�� ���� �������� InputStream � ������������ ��� � BufferedInputStream
BufferedInputStream bf =
new BufferedInputStream((InputStream)
urlConn.getInputStream() );
// ByteArrayOutputStream �����������
// ��� ���������� ��������� ������� b[]
ByteArrayOutputStream bas =
new ByteArrayOutputStream();
//������������� �������
int bit;
//���� ����� �� ����, ������ �� ���� � ����� ����� � bas
while((bit = bf.read() ) != -1)
{
bas.write(bit);
}
//����� ����, ��� ��� � ��� ���� -- ������ � ������ ����
b = bas.toByteArray();
//�� ������� ������ ���� b[]
//������� ������ ������� ��� ���������
String a = new String(bas.toString("UTF-8") );
//������ ��������� ���������� ����������� ������� ���� ��� ������� ���
//��� ������� jdk1.3 ����������� ����������� RU � ���� -- �������. ���������
//�� ������� ����� ������ ���� UTF-8 -- ��� ����� ��������� ���������� ������
//������ �. �������� '������� ����� � �� ������...'
writer (a+"\r\n");
}
catch(Exception e) {e.toString();}
}
public void writer(String str)
//������ ��������� ������ � TextArea
{
ar.append(str+"\r\n");
}
// ����� ������� ��������� ������� � �������� ��
// ������ �� ������� ������ -- ����� ����������
public boolean action(Event evt, Object obj)
{
String tx ="";
if(buttonTxt.equals(obj) )
{
//�������� ������ �������
tx = tf.getText();
//���������
String sign = sign(b, tx);
//� �������� �� �� ������ javascript'��
doScript(sign, new String(b) );
}
return true;
}
//����� ����������. �� ����� ������ ���������� �������� � ���� �������
// ���� b[] � ������ ������� ������� �� ���� � ���� �������,
//�� ������ �������� ������ �������
public String sign(byte[]b, String client_mess)
{
String signdoc = "";
try
{
//is -- ����� �� ����� "a:\\cacerts",
// client_mess. toCharArray() -��� ������ =
'1', '2', '3', '4', '5', '6';
ks. load(is, client_mess.toCharArray() );
//Enumeration �������� �����(�����es) �� keystore �������
//� ����� ������ -- ���� ��� 'tst'
Enumeration aliaslist = ks.aliases();
//RSAPrivateKey -- ���� ��� ������� ����� ������ ���� � keystore
//������� �������� ����� � �������� �������� ������
//�������� �������� �� ��� DSAPrivateKey -��� ������� ���� SHA1withDSA
//�� ���������, �� �������� � ��� RSAPrivateKey -- ��� MD5withRSA
//������ ������ java.lang.ClassCastException:
//sun.security.provider.DSAPrivateKey
RSAPrivateKey priv = (RSAPrivateKey) ks.getKey
(aliaslist.nextElement().toString() , client_mess.toCharArray() );
//������ Signature -- ������������ �������� �������
Signature sign = Signature.getInstance("MD5withRSA");
//� ������ priv -- ���������� ������
sign.initSign(priv);
//� ������� ���� b[]
sign.update(b);
//byte[] realSig -- �� � ���� �� ���� �������� ������� ��� ������� b[]
//��� ������� ������� �����, ������ � ������� �������� ������ ����
// 2 20 81 6 120 -122 60 -106 102 14 60 42 -35 51 105
byte[] realSig = sign.sign();
//������� ��������, ������ �� ����� �������� ��� �������� �� ������
//� �����, �������� ��� ����� ���� ������ ���� ��� -- ������ �������
//��������� ��������� ������������� �������
//�� �� ���� ������� -- ������� ����� ��������� �� � ������ -
//�� ������� �������� -- ���� �������� ������� ��� ���������. . .
for(int z=0; z<realSig.length; z++)
signdoc += " " + Byte.toString(realSig[z]);
return signdoc;
}catch(Exception e)
{
System. out. println(e.toString() );
return "false";
}
}
//����� �������� ������ ������� � ��������� �� ������ �������
//�� ����� �������� ������ ������� � ������������ ������ � ���������
//JSObject � HTML ����� 'sbm' �������� �� �������...
void doScript(String sig, String doc) {
//���� ��� ��������� �������� ���������, �� ������ ������ ���������...
try{
JSObject win = (JSObject) JSObject.getWindow(this);
win.eval("f = document. forms['sbm']");
win.eval("f.method = 'post'");
win.eval("f.action = '"+ addressTo +"'");
win.eval("inputTag = document.createElement('input') ");
win.eval("inputTag.name = 'doc'");
win.eval("inputTag.type = 'text'");
win.eval("inputTag.value = '"+doc+"'");
win.eval("f.appendChild(inputTag) ");
win.eval("inputTag = document. createElement('input') ");
win.eval("inputTag.name = 'sig'");
win.eval("inputTag.type = 'text'");
win.eval("inputTag.value = '"+sig+"'");
win.eval("f.appendChild(inputTag) ");
win.eval("f.submit() ");
win = null;
} catch(Exception t) {}
}
//������� ����� ��������� ���������� �� HTML
public String getParameter(String key, String def) {
return isStandalone ? System. getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
public void stop()
{ }
public void destroy()
{ }
public String getAppletInfo()
{return ""; }
}
�� ��������, ��� ����� ��������� ������ ������ ���� ������� �������� (�������� ��� trusted) ���������� keystore ��������������� �������. � ���������� � ��� ��������� ��������� ������, ��� ���������� TextArea, �����������, ����� �������� �� ������ ����� �� �������:
������� 6. �������� ������
��������� �����
�� ���� ����� �������� �������� ������ � ����� � �������� �������� �� ������� ����������� ���������: ��� � �������, ��� � �� ������� ������� �������� ������ �������� ���������� ���������� -- �������� ����� ��������� ��������� ������ ��������� ������� ������ ������ ������� -- ��� ������� ��� ������ �� ����� �������� ����������� ����� ��������� ����� ������� ������ ��������������, ������, � �������� ���������� �������� ����� �������� -- ������� �� ����������� ����������� �������� ������������� ������.- ������ ��� ����� ������� ������� �� ����� �������������
������:
- ��� �� ������������ ������������� ������� � ������ �� �������
- ����������� �� request'a ���������� ������������ ���� �� �������
- ���������� � �� �� ���������� ������� ������� ��������������� �������
- �� ��������� ����� � ������ �������-�������� �������� ��������� �� �����������
- ���� �������� ������������ -- ������� �������� � ������� � ��
import javax.servlet.*;
import javax.servlet. http.*;
import java.io.*;
import java.util.*;
//�������� ������� ��� ������ oracle � Blob
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;
//������ ��� ����������� �������
import sun.security.pkcs.PKCS10;
import java.security.spec.*;
import java.security.cert.*;
import java.security.*;
import java.security.interfaces.*;
public class verify_sign extends HttpServlet
{
Connection conn;
Blob keystore;
private static final String CONTENT_TYPE =
"text/html;charset=Windows-1251";
HttpSession session;
public void init(ServletConfig config)
throws ServletException
{
super.init(config);
}
public void putsession(HttpSession ses) {
session = ses;
}
// ��������� request'a
public void service(HttpServletRequest
request, HttpServletResponse response)
throws ServletException, IOException
{
String er = "";
String sig = "";
String doc = "";
boolean verifies;
try
{
// ��������� �������� ������� � ��������� �� request'a
byte[] sign_from_client = new byte[1024];
sig = request.getParameter("sig");
// StringTokenizer ����� ��� ����������
// ������ �� ��������� � ���������� ������
// ������� ���������� � ������ sign_from_client[i]
StringTokenizer stoken = new StringTokenizer(sig, " ");
int i = 0;
while(stoken.hasMoreTokens() )
{
sign_from_client[i] = Byte.parseByte(stoken. nextToken() );
i++;
}
doc = request. getParameter("doc");
//�������������� keystore
KeyStore ks = KeyStore. getInstance("JKS", "SUN");
//�������� connection � �� �� ������ --
//��������������, ��� �� ��� ��������
//� ������ � ������ ����������� �������
conn = (Connection) session.getValue("connection");
//�������� ����� ������� �� connection --
//���������� ��, ��� ����� �������
// ��������� � ��� alias � keystore...
String login = conn.getMetaData().getUserName();
//����������� keystore ������� �� ��
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery(
"SELECT KEY_STORE FROM users WHERE
LOGIN_NAME = '"+login.toUpperCase() +"'");
rset. next();
//�������� �� �� BLOB -- ����� keystore
BLOB blob = ((OracleResultSet) rset).
getBLOB("KEY_STORE");
//� �� ���� -- InputStream
InputStream is1 = blob.getBinaryStream();
//�������� ������ ������� �� request'a
//��������� ���� ����� ��� ��� �����������
char[] pass = request.getParameter("password").toCharArray();
//��������� ��������� keystore
ks.load(is1, pass);
//�� ������ ������� �� keystore
//�������� ��� ���������� -- ��������� ����
java.security.cert.Certificate certif =
(java.security.cert.Certificate)
ks.getCertificate(login);
//������� ������ sign ���� Signature
Signature sign = Signature.getInstance("MD5withRSA");
//� �������������� �������� �������
sign. initVerify(certif);
sign. update(doc.getBytes() );
verifies = sign.verify(sign_from_client);
stmt.close();
}
catch(Exception e)
{
er = "Error: " + e. toString();
verifies = false;
}
//������ �����-�� ����� �������...
response. setContentType(CONTENT_TYPE);
PrintWriter out = response. getWriter();
out. println("<html>");
out. println("<head><title>
</title></head>");
out. println("<body>");
out. println("<p>Sign is " + verifies + er+" "+
doc+"**** "+sig+"</p>");
out. println("</body></html>");
}
//����������� ������� ������
public void destroy()
{
}
}
��������� �� ������� � ������� ��� ������� �� ���������� ������ � �� � ������� ������������������ ������ -- ������ �����, ��� ����� ��������� ����������� ���� ���������� ��������� �� ���������� ������ � ��. �� �������� �����, ��������� �������� ������, � ���� ���������������� �� �������������� �������, �� �� ����� ������ � ������ ������:
// sig -- ������� ������� � ���� ������
// doc -- ���������� �������� � ������� ��� �� ��
// login -- ����� ������� � keystore
// pass -- ������ ����� ������
public boolean check(String sig, String doc,
String login, String pass)
{
boolean verifies = false;
byte[] sign_from_client = new byte[1024];
// StringTokenizer stoken ����� �
// ������ ����� �� ��������� �� ������ ����,
// � ������ int'��
StringTokenizer stoken = new StringTokenizer(sig, " ");
int q=0;
while(stoken.hasMoreTokens() )
{
sign_from_client[q] = Byte.parseByte
(stoken. nextToken() );
q++;
}
int i=0;
char [] password = pass. toCharArray();
try{
// � ������ � ����� �� FileInputStream
// is1 ��� ����� ����� ��������
// �� InputStream �� BLOB'a ������������� ��
FileInputStream is1 = new FileInputStream("a:\\cacerts");
ks = KeyStore. getInstance("JKS", "SUN");
ks. load(is1, password);
java.security. cert. Certificate certif =
(java.security. cert. Certificate) ks. getCertificate(login);
Signature sign = Signature. getInstance("SHA1withDSA");
sign. initVerify(certif);
sign. update(doc. getBytes() );
verifies = sign. verify(sign_from_client);
}catch(Exception e)
{System. out. println(e. toString() );}
return verifies;
}
����������
������������ ����� ������ �� ����������, �� ������ �������������� ��� ������������� jdk1.3. ����� ��������� �� ����������� �� ��� ������ �������� ��, ��� �� ������� ������� ����������� ����� keystore �������, � ��� ������, ��� � �������� ���������� ����������� �������������� ������������� ��� � ������ ������ �� ��� ����� ����������. ������� ������ ��, ��� ��� ��������� ���������� ������ keystor'a ������� ������� �� ������ ����� ���������� ������. ������������� ����������� � ������� *.cer � �������� ����� ��������� �������� � ���� ����������.�, �������, � �������� ������� ����� ����� �������� ����� ���������� ����������� ��������� ��������������� ��������� ������� openSSL �� ��������� ����������� certificate.cer ����� �� ������� �� ����������� jdk � ��������� �������� ������ �� ����� Python:
def sslverify(login, message, sign) :
/*
*/
result = getstatusoutput('openssl dgst -verify '
+ file_cer + ' -signature '
+ file_sig + ' ' + file_mes)
/*
*/
if rfind(result[1], 'OK') %gt;= 0:
return 1
else:
return 0
�������
- Rivest, R., Shamir, A., and L. Adleman 'A Method for Obtaining Digital Signatures and Public Key Crypto -- systems'
- ����������� � �� �������� �������. http://wincrypt.chat.ru/begin.html
- C. ������� ������ '������� ����� � �� ������...'