|
|
��� �������� �������� �� ��������� ������: English Castellano Deutsch Francais Nederlands Russian Turkce |
����� Chianglin Ng <chglin(at)singnet.com.sg> �� ������: � ���� � ��������� - �����������, ����������������� �����������, �������������� � ����� ����. �� Linux � ��������� �� ���������� 2 ���. ������ ���� ������������� ��� redhat 6.2. � ��������� ����� ���� � ��������� redhat 8.0. ������� �� �������: Pukhlyakov Kirill <kirill(at)linuxfocus.org> ����������:
|
������:
� ������� �������������� � ������� � PostgreSQL ����� JDBC � redhat 8.0
��������� ���������� Sun's Java Secured Socket ��� ����������� �����������
������� � ��������� ���� ������.
������ ���������� ��� 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, ����� ����� ��������� �������� � ����.
������ � ��� ���� ��������������� postgres, ������� ����������� ������������ ��������� JDBC ����������. ����� ������������ ���������� ��������� ������� ���������� �������� ��� ��������� ������.
��������� �������� ���������� ��� ��� ����� ��������.
JDBC ���������� ������������� ���������� � ���������� ������, ������� ����� ���������� ��� ������ ����� SSL ���������� � ���������� ���������� ������. � ���� ������� ��������� ������ ����� �������������� ������� � postgres � ���������� ���������� ������ JDBC ���������� ����� ����� SSL ����������. ���� ���� ������� ����� ��������� ��� JDBC ����������.
�� ��������� �����, ��� �� ������� ������� ���������� �������
�������� �������� ������ � ��������� �� �������� � ���� � �����
�������� - ������� �������� ������ �� ���� � ������������� ��
�������. �� �� ����� ��������� � ����������� ����������. ���
���������� ����� ����� ������������ threads. ��������� ���������
������������� ���.
��� 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 ���
������������� �������� ����������. � �������, ��� ����� �����
��� ����������� �������� ������. �� ������ ������ ������
�� ��������� ������ � �������������� �� � ���������.
�� ������� ��� ���������� ��������� ����� : SSLConnection.java, RelayIntoOut.java � RelayApp.java. �� ������� : SSLRelayServer.java, RelayIntoOut.java � SSLConnection.java. ��������� �� � ���� �������. ������������� ���������� ������ :
javac RelayApp.java
������������� ��������� ������ :
javac SSLRelayServer.java
�� ������� � postgres, ��������� SSLRelayServer � 6-� ����������� :
java SSLRelayServer servestore trustclientcert storepass1 prikeypass0 2001 5432
�������� ��������� ������, �� ������ ��������� � ����������. �� ������� 7 ����������, �������������� - ��� ��� ��� IP ����� �������, � �������� ���������� :
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 � ���������. ����� !
|
Webpages maintained by the LinuxFocus Editor team
© Chianglin Ng, FDL LinuxFocus.org |
Translation information:
|
2003-03-05, generated by lfparser version 2.31