Secure Socket


Secure Connectivity

The server must be sure
  1. Who is its client. The server must be capable of authenticate the client with which it is communicating.
  2. The information that is being sent to the client has not been modified nor viewed for someone else.

El servidor debe estar seguro
  1. De quien es el cliente. El servidor debe ser capaz de identificar al cliente con el que se comunica.
  2. Que la información que se envía al cliente no ha sido modificada o vista por alguien más.

Encryption

Encryption is applied to data when there is an insecure communication (or storage) medium to provide:
  • Privacy, so that nobody but the intended client can understand the data being sent.
  • Authentication, so that the server and client are sure who they are communicating with.
  • Integrity, so that the data (sent to the client) has not been modified by a third party during the data transferring.

La encriptación es aplicada a los datos cuando hay un medio inseguro de comunicación (o almacenamiento) para proporcionar:
  • Privacidad, de tal forma que nadie más que el cliente puedan entender los datos enviados.
  • Authentication, de tal forma que el servidor y el cliente estén seguros con quien se están comunicando
  • Integridad, de tal forma que los datos (enviados al cliente) no han sido modificados por terceros durante la transferencia de los datos.

Security Support Provider Interface (SSPI)

A Security Support Provider is a Microsoft Windows system to implement different communication security protocols such as: NTLM, Kerbedos and SSL. Wintempla provides the Sys::SecuritySupportProvider class to ease the use of a SSPI.
Un Proveedor de Apoyo de Seguridad es un sistema de Microsoft Windows para implementar diferentes protocolos de comunicación seguros tales como: NTLM, Kerbedos y SSL. Wintempla proporciona la clase Sys::SecuritySupportProvider para facilitar el uso de un SSPI.

Encryption

It is the base of secure communication. Two or more computers can use encryption to share information securely. A key is a digital value that is used by an encryption algorithm to encrypt data. In symmetric key encryption, the same key can be used for both encryption and decryption of the data. Two computers must hold symmetric keys, requiring the computers to communicate these keys. This communication of keys can become a security risk.
La encriptación es la base de la comunicación segura. Dos o más computadoras pueden usar la encriptación para compartir información en forma segura. Una llave es un valor digital que es usado por un algoritmo de encriptación para encriptar datos. En la encriptación con llave simétrica, la misma llave puede ser usada para encriptar y des-encriptar los datos. Dos computadoras pueden tener llaves simétricas, requiriendo que las computadoras comuniquen estas llaves. Esta comunicación de las llaves puede ser un riesgo en la seguridad.

Public Key

Because in the Internet it is impossible for each computer to share a secret key, asymmetric keys (or public keys) has been created. Public key encryption uses two keys: a public key that can be shared, and a private key that must be kept secret.
Debido a que en la Internet es imposible que cada computadora comparta una llave simétrica, las llaves asimétricas (o llaves públicas) se han creado. La encriptación con llaves publicas usa dos llaves: una llave pública que puede compartirse, y una llave privada que se mantiene en secreto.

Certificates

Digital certificates used mainly to store public keys. They can store also the owner of the key pair and have information about the certificate. A pfx file can store a certificate as shown in the figure below. Secure commercial web sites such as www.amazon.com use certificates. A Certificate Authority (CA) issues certificates. www.verisign.com and www.thawte.com are some popular certificate authorities that can issue certificates. You can use Microsoft Certificate Services (included in Microsoft Windows Server) to issue certificates. Wintempla provides the Sys::SecurityCertificate class to manage certificates; you are encouraged to carefully review this class.
Los certificados digitales son usados principalmente para almacenar llaves públicas. Estos pueden almacenar información sobre el propietario del par de llaves y tienen información acerca del certificado. Un archivo pfx puede almacenar un certificado como se muestra en la figura de abajo. Los sitios web seguros comerciales tales como www.amazon.com usan los certificados. Una Autoridad de Certificados (CA) emite certificados. www.verisign y www.thawte.com son algunas autoridades de certificados populares que pueden emitir certificados. Usted puede usar Microsoft Certificate Services (incluído en Microsoft Windows Server) para emitir certificados. Wintempla proporciona la clase Sys::SecurityCertificate para manipular certificados; usted está invitado a revisar con cuidado esta clase.

Certificates

Certificate Management

You can use the Microsoft Management Console to manage certificates. Search in your computer for MMC. When found open it. The figure below shows how the Microsoft Management Console looks like.
Usted puede usar la Consola de Administración de Microsoft para administrar certificados. Busque en su computadora por MMC. Cuando la encuentre ábrala. La figura abajo muestra como se ve la Consola de Administración de Microsoft.

MicrosoftManagementConsole

Problem 1
Open the Microsoft Management Console and use the File menu to select Add Remove Snap In as shown below. Select the certificates and press the add button. Select My User Account. After the Finish button, you can view the certificates you have in your computer.
Abra la Consola de Administración de Microsoft y use el menú de File para seleccionar Add Remove Snap In como se muestra debajo. Seleccione los certificados y presione el botón de agregar. Selecciona Mi Cuenta de Usuario. Después de presionar el botón de Finalizar, usted puede ver los certificados que tiene en su computadora.

AddRemoveSnapIn

AddCertificates

MyUserAccount

MMC

Problem 2
Create a Wintempla dialog application called SecureEmail to display the certificate of the SMTP secure server: smtp.gmail.com at port 465. After creating the project, edit the stdafx.h file and remove the comments from the line #define WIN_SOCKETS_SUPPORT as shown below, (in previous versions of Wintempla check the socket support option while creating the project).
Cree una aplicación de diálogo de Wintempla llamada SecureEmail para mostrar el certificado del servidor seguro de SMTP: smtp.gmail.com en el puerto 465. Despues de crear el proyecto, edite el archivo stdafx.h y remueva los comentarios de la línea #define WIN_SOCKETS_SUPPORT como se muestra debajo, (en versiones previas de Wintempla cheque la opción de soporte para sockets cuando cree el proyecto).

CertificateInfoRun

SecureEmail.cpp
...
void SecureEmail::Window_Open(Win::Event& e)
{
     const wchar_t* servername = L"smtp.gmail.com";
     const int port = 465;
     const DWORD protocol = SP_PROT_TLS1;
     //_____________________________________________________________________ Create Credentials
     Sys::SecuritySupportProvider ssp;
     SECURITY_STATUS status;
     status = ssp.CreateCredentials(protocol);
     if (status != SEC_E_OK)
     {
          this->MessageBox(ssp.GetErrorDescr(status), L"SecureEmail", MB_OK | MB_ICONERROR);
          return;
     }
     //____________________________________________________________________ Create socket and connect
     Sys::Socket socket;
     if (socket.Connect(servername, port) == SOCKET_ERROR)
     {
          this->MessageBox(socket.GetLastErrorDesc(), L"SecureEmail", MB_OK | MB_ICONERROR);
          return;
     }
     //____________________________________________________________________ Handshake
     status = ssp.ClientHandshake(socket, servername);
     if (status != SEC_E_OK)
     {
          this->MessageBox(ssp.GetErrorDescr(status), L"SecureEmail", MB_OK | MB_ICONERROR);
          return;
     }
     //____________________________________________________________________ Get Certificate
     Sys::SecurityCertificate certificate;
     status = ssp.GetCertificate(certificate);
     if (status != SEC_E_OK)
     {
          this->MessageBox(ssp.GetErrorDescr(status), L"SecureEmail", MB_OK | MB_ICONERROR);
     }
     //____________________________________________________________________ Display Certificate
     wstring info;
     certificate.GetDisplayInfo(true, info);
     this->MessageBox(info, L"Certificate Info", MB_OK);

     //___________________________________________________________________ Disconnect
     ssp.DisconnectFromServer(socket);
     socket.Disconnect();
}


Problem 3
Modify the project of problem 2 to show the connection info in the same SMTP secure server. The figure below shows how a Security Support Provider can be used to send and receive data using a socket.
Modifique el proyecto el problema 2 para mostrar la información de la conexión en el mismo servidor seguro de SMTP. La figura de abajo muestra como un Security Support Provider puede ser usado para enviar y recibir datos usando un socket.

ConnectionInfo

SecuritySupportProvider

SecureEmail.cpp
...

void SecureEmail::Window_Open(Win::Event& e)
{
     const wchar_t* servername = L"smtp.gmail.com";
     const int port = 465;
     const DWORD protocol = SP_PROT_TLS1;
     //_____________________________________________________________________ Create Credentials
     Sys::SecuritySupportProvider ssp;
     SECURITY_STATUS status;
     status = ssp.CreateCredentials(protocol);
     if (status != SEC_E_OK)
     {
          this->MessageBox(ssp.GetErrorDescr(status), L"SecureEmail", MB_OK | MB_ICONERROR);
          return;
     }
     //____________________________________________________________________ Create socket and connect
     Sys::Socket socket;
     if (socket.Connect(servername, port) == SOCKET_ERROR)
     {
          this->MessageBox(socket.GetLastErrorDesc(), L"SecureEmail", MB_OK | MB_ICONERROR);
          return;
     }
     //____________________________________________________________________ Handshake
     status = ssp.ClientHandshake(socket, servername);
     if (status != SEC_E_OK)
     {
          this->MessageBox(ssp.GetErrorDescr(status), L"SecureEmail", MB_OK | MB_ICONERROR);
          return;
     }
     //___________________________________________________________________ Display Connection Info
     wstring info;
     ssp.GetConnectionInfo(info);
     this->MessageBox(info, L"Connection Info", MB_OK);
     //

     //___________________________________________________________________ Disconnect
     ssp.DisconnectFromServer(socket);
     socket.Disconnect();
}


Problem 4
Use the Internet to find out the following about Secure Socket Layer Certificates: (a) When they can be obtain? (b) How much they are? (c) How long do they last? (d) What are they used for?
Use la Internet para encontrar sobre los Certificados para Capa de Sockets Seguros: (a) De donde se pueden conseguir? (b) Cuanto cuestan? (c) Cuando duran? (d) Para que se usan?

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home