SSH que hace un túnel en su uso
Este artículo se dedica a la tarea de asegurar la conexión del servidor de cliente de MySQL usando la funcionalidad proporcionada por el protocolo seguro de la cáscara (SSH). Para ser exacto, el concepto el hacer un túnel de SSH se utiliza. Repasaremos los pasos necesitados para construir usos seguros del cliente de MySQL y para poner una muestra en ejecucio'n una ourselves.
El tráfico de MySQL no es la única clase de datos que puedan ser tunneled por la cáscara segura. SSH se puede utilizar para asegurar cualquier protocolo de la uso-capa TCP-based, tal como HTTP, smtp y POP3. Si su uso necesita asegurar tal protocolo haciéndolo un túnel a través de una conexión protegida de SSH, este artículo le será útil.
Fondo
' s dejado se imagina que estamos desarrollando un uso de la empresa que necesite enviar peticiones a un número de servidores del SQL todo sobre el mundo y conseguir respuestas de ellos (deje ' s se imaginan que él ' s un sistema estupendo-de gran alcance del banco que almacene la información sobre millones de cuentas).
Todos los datos entre el uso y los servidores del SQL se transfieren vía el Internet "como es". Pues la mayoría de los protocolos usados por los servidores de SQL no proporcionan integridad y el secreto (y los de datos que lo hagan, hágala de una manera absolutamente nontransparent), todas las peticiones transferidas y las respuestas pueden (y ser seguro, ellas la voluntad!) haga visible a un adversario pasivo. ¡Un adversario activo puede causar problemas mucho más serios - él puede alterar los datos y nadie la detectará!
SSH (cáscara segura) es un protocolo que puede ayudar en solucionar este problema. Una de sus características excepcionales es su capacidad de hacer un túnel diversos tipos de conexiones a través de una conexión sola, confidente e integridad-protegida.
Ahora usted no tiene que preocuparse de asegurar los datos transferidos sobre el Internet - SSH dirigirá esto para usted. En detalle, SSH tomará el cuidado de los aspectos siguientes de la seguridad:
Cifrado de datos fuerte según los algoritmos industry-standard más últimos (AES, Twofish)
Autentificación de las computadoras del cliente y de servidor
Protección de la integridad de datos
Estabilidad con respecto a diversas clases de ataques de la red
La compresión de los datos que eran tunneled
Termine la independencia de los específicos del sistema operativo y de la red
El hacer un túnel (o expedición) trabaja de la manera siguiente:
El cliente de SSH abre un puerto que escucha en un cierto interfaz local de la red y dice a servidor de SSH que él desee remitir todas las conexiones aceptadas en este puerto a un poco de anfitrión alejado.
Cuando otra conexión se acepta en el puerto que escucha, el cliente de SSH informa al servidor de SSH sobre este hecho y juntos establecen un túnel lógico para él. En el mismo tiempo, el servidor de SSH establece una nueva conexión del TCP al anfitrión alejado convenido en en el paso 1.
El cliente de SSH cifra todos los datos que recibe de la conexión aceptada y los envía al servidor de SSH. El servidor de SSH descifra los datos recibidos del cliente de SSH y los envía al anfitrión alejado.
Por favor la nota, de que el cliente de SSH actúa como un servidor del TCP para las conexiones que acepta, y el servidor de SSH actúa como un cliente del TCP para las conexiones establece al anfitrión alejado.
Una sola conexión de SSH puede hacer un túnel tantas conexiones de la capa de uso según lo necesitado. Esto significa que usted puede defender su servidor moviendo todos los puertos que escuchan (los puertos e.g., de la base de datos y del servidor del uso) a una red local, saliendo solamente del puerto de SSH abierto. Es mucho más fácil tomar cuidado de un solo puerto, más bien que diversos puertos que escuchan una docena.
¡En el fuego!
' s dejado desarrolla un uso pequeño que ilustre el uso de las capacidades de la expedición de SSH. Consideraremos una tarea importante de asegurar una conexión entre un uso del cliente de MySQL y un servidor de MySQL. Imagínese que necesitamos conseguir la información del servidor de la base de datos, que está situado mil millas lejos de nosotros, de una manera segura.
SecureMySQLClient es el uso que estamos planeando poner en ejecucio'n. Incluye los módulos siguientes:
Módulo del cliente-lado de SSH con capacidades de la expedición
Módulo del cliente-lado de MySQL
Interfaz utilizador para los ajustes de configuración y exhibir del uso resultados de la pregunta.
El servidor de SSH funciona en una red alejada y es visible del Internet. El servidor de la base de datos (MySQL) funciona en la misma red que el servidor de SSH y puede no ser visible del Internet.
El proceso de realizar intercambio de datos seguro entre SecureMySQLClient y el servidor de la base de datos va como sigue:
El módulo del cliente de SSH negocia una conexión segura al servidor de SSH y establece la expedición de algún puerto local al servidor alejado de MySQL.
El módulo del cliente de MySQL conecta con el puerto que escucha abierto por el módulo del cliente de SSH.
El cliente y el servidor de SSH instalaron un túnel lógico para la conexión aceptada.
El cliente de MySQL envía SELECTO al puerto abierto por el módulo del cliente de SSH, que lo cifra y lo envía al servidor de SSH. El servidor de SSH descifra la petición y la envía al servidor de MySQL.
El servidor de SSH recibe una respuesta del servidor de MySQL, la cifra y la envía de nuevo al cliente de SSH, que la descifra y la pasa al módulo del cliente de MySQL.
¿Miradas demasiado complejas? Poner esto en ejecucio'n es más fácil que usted think.So, deje ' s van hacerlo.
Necesitaremos los productos siguientes instalados en la computadora antes de crear el uso:
NET Visual 2003, 2005 o 2008 del estudio de Microsoft.
EldoS SecureBlackbox (edición del NET). Puede ser descargado de
http://www.eldos.com/sbbdev/download.php.
Conectador del NET De MySQL. Puede ser descargado de
http://www.mysql.com/products/connector/net/.
' NET Visual abierto dejado del estudio de s ahora Microsoft (utilizaremos la versión 2005) e intento para construir tal uso del rasguño.
Después de que se haya acabado el diseño del GUI, podemos encendernos con el código sí mismo de la lógica del negocio. Primero, agregando referencias a las asambleas siguientes a nuestro proyecto:
SecureBlackbox
SecureBlackbox.PKI (solamente en SecureBlackbox 5. SecureBlackbox 6 no tiene esta asamblea)
SecureBlackbox.SSHClient
SecureBlackbox.SSHCommon
MySql.Data
SSHForwarding nos notifica que sobre ciertas situaciones vía sus acontecimientos, así que nosotros necesite crear a tratantes para algunos de ellos:
Se enciende OnAuthenticationSuccess - cuando se ha terminado el proceso de la autentificación del cliente.
Se enciende OnAuthenticationFailed - si el cliente no podía authenticar con método particular de la autentificación. En general, esto no significa que el proceso � totalmente fallado de la autentificación el cliente puede intentar varios métodos de la autentificación por lo tanto y uno de ellos puede tener éxito.
Se enciende OnError - si un cierto error del protocolo ocurre durante la sesión. Esto conduce generalmente a un encierro de la conexión. El error exacto se puede detectar vía el código de error pasado a él.
OnKeyValidate - se utiliza para pasar la llave recibida del servidor al uso. Observe por favor que la dirección incorrecta de este acontecimiento puede dar lugar a una abertura seria de la seguridad. El tratante de este acontecimiento debe verificar que la llave pasada corresponda al servidor alejado (y advierta a usuario si no lo hace). Si la llave es válida, el tratante debe fijar el parámetro del validar para verdad. La muestra no realiza el chequeo dominante para el motivo de la simplicidad.
Se enciende OnOpen - cuando se establece la conexión de SSH y el componente es listo hacer un túnel datos. Utilizaremos a tratante de este acontecimiento para golpear el componente del cliente con el pie de MySQL.
Se enciende OnClose - cuando la conexión de SSH es cerrada.
Se enciende OnConnectionOpen - cuando se crea un túnel nuevo. El corresponder tunneled el objeto de la conexión se pasa como parámetro.
Se enciende OnConnectionClose - cuando un túnel existente es cerrado.
Poner dos métodos, SetupSSHConnection() y RunQuery() de la base en ejecucio'n. Primer inicializa el objeto de SSHForwarding y establece una sesión de SSH al servidor alejado llamando su método de Open(), y segundo envía la pregunta al servidor de MySQL.
El código del método de SetupSSHConnection() es bastante simple:
SetupSSHConnection() vacío privado
{
//que especifica la dirección y el puerto del servidor de SSH
Forwarding.Address = tbSSHAddress.Text;
Forwarding.Port = Convert.ToInt32(tbSSHPort.Text);
//que fija las credenciales para la autentificación en el servidor de SSH
Forwarding.Username = tbUsername.Text;
Forwarding.Password = tbPassword.Text;
//que especifica el interfaz de la red y el número de acceso que se abrirán localmente
Forwarding.ForwardedHost = "";
Forwarding.ForwardedPort = Convert.ToInt32(tbFwdPort.Text);
//que especifica el anfitrión de la destinación a donde el servidor debe remitir los datos.
//observa por favor, eso que la destinación se debe especificar según
punto de vista de los servidores// SSH. E.g., 127.0.0.1 estarán parados para
localhost de los servidores// SSH, no clientes uno de SSH.
Forwarding.DestHost = tbDBAddress.Text;
Forwarding.DestPort = Convert.ToInt32(tbDBPort.Text);
//conexión de la abertura SSH
Forwarding.Open();
}
Un pedacito más complejo es el código del método de RunQuery() (ser exacto, el código del método de RunQueryThreadFunc(), que es invocado en un hilo de rosca separado por el método de RunQuery()):
RunQueryThreadFunc() vacío privado
{
MySqlConnection MySQLConnection = MySqlConnection() nuevo;
//que forma la secuencia de la conexión
secuencia connString = "base de datos =" + tbDBName.Text + ";Connect Timeout=30;user identificación =" + tbDBUsername.Text + "; pwd = "+ tbDBPassword.Text +";";
si (cbUseTunnelling.Checked)
{
//que especifica la destinación local si se permite la expedición
el connString = el connString + "server=127.0.0.1; puerto = "+ tbFwdPort.Text;
}
{
//que especifica la localización verdadera del servidor de MySQL si la expedición no se utiliza
el connString = el connString + "servidor =" + tbDBAddress.Text + "; puerto = "+ tbDBPort.Text;
}
MySQLConnection.ConnectionString = connString;
intento
{
//conexión de MySQL de la abertura
Cmd de MySqlCommand = MySqlCommand(tbQuery.Text nuevo, MySQLConnection);
Log("Connecting al servidor..."); de MySQL
MySQLConnection.Open();
Log("Connection al servidor de MySQL estableció. Versión: "+ MySQLConnection.ServerVersion +".");
//resultados de la pregunta de la lectura
Lector de MySqlDataReader = cmd.ExecuteReader();
intento
{
para (interno i = 0; i < reader.FieldCount; i++)
{
AddQueryColumn(reader.GetName(i));
}
mientras que (reader.Read())
{
el string[ ] valora = string[reader.FieldCount nuevo ];
para (interno i = 0; i < reader.FieldCount; i++)
{
values[i ] = reader.GetString(i);
}
AddQueryValues(values);
}
}
finalmente
{
//conexiones de cierre de MySQL y de SSH
Conexión de Log("Closing MySQL");
reader.Close();
MySQLConnection.Close();
Forwarding.Close();
}
}
retén (excepción ex)
{
La conexión de Log("MySQL falló ("+ ex.Message + ")");
}
}
¡Y, ese ' s todo!
Pero hay una más cosa que necesito dibujar su atención a. Como SSH y el funcionamiento de los protocolos de MySQL en hilos de rosca separados y controles del GUI del acceso de esos hilos de rosca, nosotros necesitan manejar el acceso del GUI de una manera especial de prevenir problemas de una fibra transversal. Ilustraré esto con el ejemplo del método de Log():
delegado LogFunc(string vacío S);
Log(string vacío privado S)
{
si (lvLog.InvokeRequired)
{
LogFunc d = LogFunc(Log) nuevo;
Invoke(d, nuevo object[ ] {S});
}
{
Artículo de ListViewItem = ListViewItem() nuevo;
item.Text = DateTime.Now.ToShortTimeString();
item.SubItems.Add(S);
lvLog.Items.Add(item);
}
}
Finalmente, se acaba el uso, y podemos intentarlo en trabajo. F5 tan que chasca y especificar los ajustes siguientes en los campos del texto del formulario de inscripción:
La localización del servidor de SSH, el username y la contraseña authenticaban a él.
Dirección del servidor de la base de datos, puerto, username, contraseña, nombre de la base de datos y pregunta. Recuerde que la dirección del servidor de la base de datos se debe especificar como ella es visible del servidor de SSH.
El dar vuelta en "el checkbox el hacer un túnel del uso".
Ahora chasque la tecla de partida y espere los resultados de la pregunta. Si todos los parámetros se han especificado correctamente, debemos conseguir algo como esto:
Características y requisitos
El protocolo de SSH proporciona (y los instrumentos de SecureBlackbox) las características siguientes:
Cifrado de datos fuerte usando AES, Twofish, el DES triple, la serpiente y muchos otros algoritmos simétricos con las longitudes dominantes hasta 256 pedacitos
Autentificación del cliente usando uno o tipos múltiples de la autentificación (autentificación certificado-basada, interactiva llave-basado, de X.509 contraseña-basada, pública de la desafiar-respuesta)
Autentificación del servidor
Intercambio dominante fuerte basado en algoritmos dominantes públicos del ADO o de RSA
Protección de la integridad de datos
La compresión de tunneled datos
La multiplexación de varios tunneled conexiones a través de una sola conexión de SSH
SecureBlackbox proporciona la funcionalidad siguiente también:
Puesta en práctica esta'ndar-obediente comprensiva del protocolo de SSH (lados del cliente y del servidor)
Ayuda para el símbolo criptográfico como almacenaje para las llaves y los certificados
Ayuda de los almacenes del certificado del sistema de Windows
Ayuda de cliente profesional y rápida
SecureBlackbox está disponible en ediciones del NET, de VCL y de ActiveX. Esto significa que usted puede utilizar los componentes en los proyectos puestos en ejecucio'n en C #, las idiomas de VB.NET, del PASCAL del objeto (Delphi y Kylix), de FreePascal, de VB6 y de C++.
SecureBlackbox (edición del NET) está disponible para el marco 1.1, 2.0, 3.0 y 3.5, y marco compacto del NET de Microsoft del NET.
Sobre el autor
Tom Davidge es un revelador NETO mayor de SFTP Compnents que ha probado experiencia en la codificación del net.
Rate, comment or bookmark this article
Este artículo ha sido traducido automáticamente de la fuente Inglés.
¿Cree usted que esta es una mala traducción?
Traducir este artículo, y usted gana dinero!
This article is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.

