[LinuxFocus-icon]
�����  |  �����  |  ������  |  �����

������� | ������ | ������ | ��� LF
��� �������� �������� �� ��������� ������: English  Castellano  Deutsch  Francais  Nederlands  Russian  Turkce  

[Photo of the Author]
����� Chianglin Ng
<chglin(at)singnet.com.sg>

�� ������:

� ���� � ��������� - �����������, ����������������� �����������, �������������� � ����� ����. �� Linux � ��������� �� ���������� 2 ���. ������ ���� ������������� ��� redhat 6.2. � ��������� ����� ���� � ��������� redhat 8.0.



������� �� �������:
Pukhlyakov Kirill <kirill(at)linuxfocus.org>

����������:

 

������ � PostgreSQL � ������� JDBC ����� Java SSL

[Illustration]

������:

� ������� �������������� � ������� � PostgreSQL ����� JDBC � redhat 8.0 ��������� ���������� Sun's Java Secured Socket ��� ����������� ����������� ������� � ��������� ���� ������.

_________________ _________________ _________________

 

��������

������ ������ ������ postgres � JDBC � ���� ������ ������ ����������� ����������� ������� � ������.    
������ JDBC ���������� �� ����������� � ����� ������������� ����� �������� ������ � ������ ������. ���������� ��������� �������� ������� ������ ��������. ������������ postgres ������� � ���, ��� ����� �������������� postgres � ���������� SSL ��� ������������ SSH tunneling.

������ ���� ���� �������� � ����� ������������ ����������� java. � ������ Sun's Java JDK 1.4.1 �������� java secured socket extensions (JSSE), ������� ����� ���� ������������ ��� ����������� SSL ����������. ����� JDK ������������� ���������� ��� �������� public/private ������, �������� ������������ � ��������. �������������, ��� ����������� ��� �������� java-������ ����, ������� � ����� ���������� ������.  

��������� PostgreSQL � JDBC � redhat 8.0

������ ���������� ��� redhat 8.0, �� � ����� ��������� �� ���� �������������. ������ ����� ���������� ���������� PostgreSQL � ��������������� JDBC �������� ���� �� ��� �� ������� �����. � redhat 8.0, �� ������ ������������ ������� rpm ��� ����������� ���������� ��� ���������� ��������. ����� ���������� Sun's JDK 1.4.1. Sun's JDK 1.4.1 ���������������� � ������������� ������������ ���������� � ������������ � ����������� ����������� US. ����� ������������ �������������� ����������� ���������� - �������� JCE (Java Crytographic Extensions). �������� Sun's Java website.

� ��������� JDK1.4.1 � /opt � ���������� JAVA_HOME ��� �������� ��������������� JDK. ����� ����� ������� PATH. ��������� ������ � ������� � ���� .bash_profile.

JAVA_HOME = /opt/j2sdk1.4.1_01
PATH = /opt/j2sdk1.4.1_01/bin:$PATH
export JAVA_HOME PATH

�����������(�����������) ����� ��� ����������, �������� � ������ Sun JDK, ���� �������� ������� �� JCE. ����� java ����� JDBC �������� ��� postgres � ���������� �� � /opt/j2sdk1.4.1_01/jre/lib/ext. � ������������ redhat 8.0 postgres-jdbc �������� ��������� � /usr/share/pgsql.

���� �� ������ ��� ���������� postgresql - ��� ���������� ������� ����� ���� � ������� ������������. ��-������ ������������� � su � ��������� ������ postgres. ����� �������� ��������� �������������� postgres.

su root
password:******
[root#localhost]#/etc/init.d/postgresql start
[root#localhost]# Starting postgresql service: [ OK ]
[root#localhost]# su postgres
[bash]$

������� ������ ������������ postgres � ���� ������.

[bash]$:createuser
Enter name of user to add: chianglin
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) y
CREATE USER
[bash]$createdb chianglin
CREATE DATABASE

� ������ ������ �������������� postgres � ������������ � ���� ���������������� �������� � ������� � ����� ���� ������ � ����� �� ������. �� ���������, ����� �� ���������� psql, ���������� ���������� � ����� ��������������� ������������ Linux. ��������� ������� �� ���� � ������������ � postgres. ����� ���������� ������ ������ ������������ - ��������� psql � ����������� ������� ALTER USER. �������� ��������� �������

ALTER USER chianglin WITH PASSWORD 'test1234' ;

����� ��������� tcp/ip ���������� - �������������� postgresql.conf � ���������� ����� tcpip_socket � true. � redhat 8, ���� ���� ���������� � /var/lib/pgsql/data. ������������� � root � ���������� �����

tcpip_socket=true

� ������� �������������� ���� pg_hba.conf. � ��� ���������� ����������, ������� ������ � ���� ������ postgres. � ������� ���� ��������� - ���� � ��������� ������������� ������ ��� ����. � ����� ������������� � root, ����� ���������� ����������� ���������. 

host sameuser 127.0.0.1 255.255.255.255 password

������������� postgres, ����� ����� ��������� �������� � ����.

 

�������� Java SSL Tunnel

������ � ��� ���� ��������������� postgres, ������� ����������� ������������ ��������� JDBC ����������. ����� ������������ ���������� ��������� ������� ���������� �������� ��� ��������� ������.

��������� �������� ���������� ��� ��� ����� ��������.

òÉÓÕÎÏË ÄÅÍÏÎÓÔÒÉÒÕÅÔ ÒÁÂÏÔÕ Java proxies

JDBC ���������� ������������� ���������� � ���������� ������, ������� ����� ���������� ��� ������ ����� SSL ���������� � ���������� ���������� ������. � ���� ������� ��������� ������ ����� �������������� ������� � postgres � ���������� ���������� ������ JDBC ���������� ����� ����� SSL ����������. ���� ���� ������� ����� ��������� ��� JDBC ����������.

�� ��������� �����, ��� �� ������� ������� ���������� ������� �������� �������� ������ � ��������� �� �������� � ���� � ����� �������� - ������� �������� ������ �� ���� � ������������� �� �������. �� �� ����� ��������� � ����������� ����������. ��� ���������� ����� ����� ������������ threads. ��������� ��������� ������������� ���.

Diagram showing how the 4 relaying threads work  

�������� �������� ������, ������ � ������������

��� SSL ���������� ���������� ��������� ��������������, ���������� - �� �������������. ����� � ����������� ������������ � ���������� � ��������� ��������������, ��� ������, ��� � ���� ��������� ����� � ����������� � ��� ������� � ��� ������� � ������� ����������� ���������������� Java JDK.. � ���������� ��������� �� ��� ��������� �� ������ ������� - ������ ��� �������� private ����� ����� � ������ ��� �������� �����������.

��������� ��������� ��������� ��������� ������� - private ���� � public ����������.

keytool -genkey -alias serverprivate -keystore servestore -keyalg rsa -keysize 2048

Enter keystore password: storepass1
What is your first and last name?
[Unknown]: ServerMachine
What is the name of your organizational unit?
[Unknown]: ServerOrg
What is the name of your organization?
[Unknown]: ServerOrg
What is the name of your City or Locality?
[Unknown]: Singapore
What is the name of your State or Province?
[Unknown]: Singapore
What is the two-letter country code for this unit?
[Unknown]: SG
Is CN=ServerMachine, OU=ServerOrg, O=ServerOrg, L=Singapore, ST=Singapore, C= [no]: yes
Enter key password for <serverprivate>
(RETURN if same as keystore password): prikeypass0 </serverprivate>

�������� ��������, ��� ������ ������������� ��� ���� - ������ - ��� ���������, � ������ - ��� private �����. ����� ����� ������������� ��������� ���������� � ����.

keytool -export -alias serverprivate -keystore -rfc servestore -file server.cer

������ �������� �� ����������� ��������� ���������� � ���� server.cer. �� ���������� ������� ������������ ���� ���� � ���������, ��� �������� ��� �����������.

keytool -import -alias trustservercert -file server.cer -keystore clienttruststore

���������� ������� ����������� ��������� ���������� � ��������� � ��������� clientruststore, ���� ������ ��������� ��� - ��� ����� ������� � � ��� �������� ������ ��� ����. 

������ ���� ������� �������� ���������� SSL ���������� � ��������� ���������������.
�� ��� ��� � ����� ������������ � ���������� �������������� - ���������� ������� private/public ����� � ����� ���������� ���������, �������������� ���������� ���������� � ������������� ��� � ��������� ���������.

����� ����� �� ������� ��� ��������� �� ������� - ���� ��� �������� private ����� � ���� ��� ������������. �� �� ����� � ��� �������.

����� ������������ ������, ��������������� �����, ���������� ���������� ���������� ������ ��� ����� �������� �� ���������� - �.�. ��� ��������� �� ������� ������ ����� ���������� ������, �� �� ����� � ��� ���������� ��������. 

��������� �� ������������� keytool �������� ��� -> Sun's documentation.  

������

��� ������ ����� ������������ ���������� Sun's Java Secured Socket. ������������ �� Sun JSSE �������� ����� http://java.sun.com/j2se/1.4.1/docs/guide/security/jsse/JSSERefGuide.html. ��� ������������� ssl ���������� ���������� ������� ��������� ������� SSLContext, ���������������� JSSE. ��������������� ������ SSLContext � ������������ ��� ����������� � �������� ��������� ������ Secured SocketFactory. socketfactory ����� �������������� ��� �������� ssl �������.

� ���� ������ ����� ������� � ���������� � ��������� ������ ��� ���������� SSL �������. ��� ��� ��� ��� ����� ������������ SSL ���������� - ��� ��� ����� ������� �� ������ �������� ������ SSLConnection. ���� ����� ������������� �� SSLContext, ������� ����� �������������� � ����������� � ���������� ������. � �������, ��� ����� ��� ����� ��� ������������� threads. ����� ���������� ������ ������.

�������� ������ SSLConnection

/* initKeyStore method to load the keystores which contain the private key and the trusted certificates */

public void initKeyStores(String key , String trust , char[] storepass)
{
      // mykey holding my own certificate and private key, mytrust holding all the certificates that I trust
  try {
      //get instances of the Sun JKS keystore
     mykey = KeyStore.getInstance("JKS" , "SUN");
     mytrust = KeyStore.getInstance("JKS", "SUN");

    //load the keystores
   mykey.load(new FileInputStream(key)  ,storepass);
   mytrust.load(new FileInputStream(trust) ,storepass );
    }
 catch(Exception e) {
    System.err.println(e.getMessage());
    System.exit(1);
    }
}

/* initSSLContext method to obtain a  SSLContext and initialize it with the SSL protocol and data from the keystores */
public void initSSLContext(char[] storepass , char[] keypass) {
    try{
    //get a SSLContext from Sun JSSE
    ctx = SSLContext.getInstance("TLSv1" , "SunJSSE") ;
    //initializes the keystores
    initKeyStores(key , trust , storepass) ;

    //Create the key and trust manager factories for handing the cerficates
    //in the key and trust stores
    TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509" ,
    "SunJSSE");
    tmf.init(mytrust);

    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509" ,
    "SunJSSE");
    kmf.init(mykey , keypass);

    //initialize the SSLContext with the data from the keystores
    ctx.init(kmf.getKeyManagers() , tmf.getTrustManagers() ,null) ;
    }
    catch(Exception e) {
    System.err.println(e.getMessage());
    System.exit(1);
    }

}

����� initSSLContext ������� SSLContext �� Sun JSSE. �� ����� �������� ���������� ������� ������������ �������� SSL. � ������ TLS (Transport Layer Security) ������ 1. ����� ���� ��� SSLContext ������� - �������������� ��� ������� �� ��������.


��������� �������� �� ���� ������ SSLRelayServer, ������� ����� �������� �� ��� �� ����������, �� ������� �������� postgres. ��� �������� ����� �������� �������� ������ �� SSL ���������� � �������� �� � postgres � ��������.

�������� ������ SSLRelayServer

/* initSSLServerSocket method will get the SSLContext via its super class SSLConnection. It will then create a  SSLServerSocketFactory object that will be used to create a SSLServerSocket. */

public void initSSLServerSocket(int localport) {
      try{
           //get the ssl socket factory
           SSLServerSocketFactory ssf = (getMySSLContext()).getServerSocketFactory();

            //create the ssl socket
           ss = ssf.createServerSocket(localport);
           ((SSLServerSocket)ss).setNeedClientAuth(true);
      }
   catch(Exception e) {
      System.err.println(e.getMessage());
      System.exit(1);
    }
 }

// begin listening on SSLServerSocket and wait for incoming client connections
public void startListen(int localport , int destport) {

    System.out.println("SSLRelay server started at " + (new Date()) + "  " +
                     "listening on port " + localport + "  " +  "relaying to port " + destport );

 while(true) {
      try {
         SSLSocket incoming = (SSLSocket) ss.accept();
         incoming.setSoTimeout(10*60*1000); // set 10 minutes time out
         System.out.println((new Date() ) + " connection from " + incoming );
         createHandlers(incoming, destport); // create 2 new threads to handle the incoming connection
       }
    catch(IOException e ) {
        System.err.println(e);
        }
    }
}


���������� ������ RelayApp ������� SSLRelayServer. �� ����������� �� SSLConnection � ���������� 2 threads ��� �������� ������. ������� � ���, ��� �� ������� SSLSocket ��� ���������� � ��������� ����������� ������ SSLServerSocket ��� ������������� �������� ����������. � �������, ��� ����� ����� ��� ����������� �������� ������. �� ������ ������ ������ �� ��������� ������ � �������������� �� � ���������. 

��������� ������ ������ �������� ����� (example285-0.1.tar.gz).    

������������ proxies

�� ������� ��� ���������� ��������� ����� : SSLConnection.java, RelayIntoOut.java � RelayApp.java. �� ������� : SSLRelayServer.java, RelayIntoOut.java � SSLConnection.java. ��������� �� � ���� �������. ������������� ���������� ������ :

javac RelayApp.java

������������� ��������� ������ :

javac SSLRelayServer.java

�� ������� � postgres, ��������� SSLRelayServer � 6-� ����������� :

  1. ������ ���� � ���������, ��������� ��������� private ����, ��������� ���� ����� � ������� keytool
  2. ������ ���� � ���������� ���������, ��������� ����������
  3. ������ ��� ��������
  4. ������ ��� ���������� private �����
  5. ���� ��� �������������
  6. ����, � ������� �������������� ������ ( � ����� ������ ��� ���� 5432 �� ��������� ������������ postgresql )

java SSLRelayServer servestore trustclientcert storepass1 prikeypass0 2001 5432

�������� ��������� ������, �� ������ ��������� � ����������. �� ������� 7 ����������, �������������� - ��� ��� ��� IP ����� �������, � �������� ���������� :

  1. ������ ���� � ���������, ��������� ���������� private ����
  2. ������ ���� � ����������� ���������, ��������� ����������
  3. ������ ��� ��������
  4. ������ ��� ����������� private �����
  5. ��� ��� IP ����� �������
  6. ���� ������� ( � ����� ������ 2001 )
  7. ���� ����������, � ������� �������������� ������ ( � ����� ������ ��� postgresql, ������������� ���� 5432 )

java RelayApp clientstore trustservercert clistorepass1 cliprikeypass0 localhost 2001 5432

����� ���� ��� SSL ������� ������� - ������ ������������ JDBC ����������� � �������� � postgres ��� ������. ���� ������� �������� ������ ����� ���������� ��� ������ ����������. ������� ���������� ���������� ������� � � �� ���� ��������� ����� ������� JDBC ����������. � ������������ � postgres � sun ���������� ����� ��������.

���� �� ������ ��� ��� �������������� �� ����� ���������� - �� ��� ������ ������� ���� ������� ���� ��� postgres, ���� �������� ���� RelayApp. ������ ��� ��� ��� ������� �� ������ ��������. ��-������ ������� �� RelayApp - ������� ��� ������ [ctrl] c � ����� �� ������� ���������� SSLRelayServer ������.

��������� ����� RelayApp ��������� ��������. �������� ���� ����� ���������� �����, ������ �� 2002.

java RelayApp clientstore trustservercert clistorepass1 cliprikeypass0 localhost 2001 2002

��������� ����������� ��� ������������ ����� psql. �� ����� �������������� ���� psql ������ ����� ��� �������. ��������� psql ��������� �������� :

psql -h localhost -p 2002

������� �������������� psql ���������� �� ���� 2002, ������� ������������ RelayApp. ����� ����� ������ ������ postgres �� ������ ������� SQL ������� ��� ������ � ����������� SSL ����������, ������� ����������� ������.

 

������������

�� ������ ��������� ��������� ������ � ��������� ������, ���� �� �� ���� ����������� ���������. ����� ������������ ������ ���������� ������� ������� ps -auxww � ������ ��� ���� �������� �� ����� �����������. ������� ���������� ������� ������ � ������������� ���� � ������ ����� � ��� � java ���������� ����� �� �� ����� �����. ����� ����� ������� ���������� ����, � ������� ��������� ����� �������.

 

�����

���������� ������ ������������ Sun JSSE ��� ��������   SSL �������, ������� ����� ������������ � postgres. �� ����� ���� ����� ����������, ��������� ����������� ����������, ����� ������������ �������� SSL ������� � ����� ����� �������, ��� ���������� ��������� ����� �������� ���������� � ������ ���������� - ������ ��������� ��� ������� ��������� �������� � Linux � ���������. ����� !

 

�������� ������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ��������� :
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Chianglin Ng, FDL
LinuxFocus.org
Translation information:
en --> -- : Chianglin Ng <chglin(at)singnet.com.sg>
en --> ru: Pukhlyakov Kirill <kirill(at)linuxfocus.org>

2003-03-05, generated by lfparser version 2.31