Openssl de programación de aplicaciones

  
para la programación de aplicaciones openssl en esta área de documentación detallada rara vez, he venido a aprender y el hombre vinculante documento para comprender su estructura básica de un cuidadoso análisis del código de ejemplo en OpenSSL paquete fuente. La comunicación SSL modelo estándar de C /S estructura, a excepción de la transmisión sobre la capa de TCP, y corresponden generalmente ninguna diferencia obvia. Permítanme hacer un análisis simple para establecer una conexión TCP segura con SSL proceso.
a, certificados digitales listos
Normalmente nuestro servidor necesita
servidor de archivos server.crt certificados secundarios archivo server.key
servidor de clave privada para
de dos vías de conexión de autenticación, utilizar client.key archivo de la clave privada del cliente

del lado del cliente de autenticación de certificado de archivo client.crt
para una conexión de un solo sentido, no es necesario presentar un certificado con el fin hogar
< b> dos,

estructura del programa y los archivos de cabecera relacionadas con SSL se colocan en el directorio de OpenSSL, en general tienen que utilizar estas:
#include /* SSLeay cosas * /con RSA definiciones relacionadas algoritmo de
#include /* interfaz de biblioteca de cifrado * /
#include /* archivos relacionados con los certificados * /#include

# include # include

1
, por
OPENSSL
Algunos de la inicialización necesaria
SSL_load_error_strings (); /* inicializar el mensaje de error, no es necesario, si utilizar imprime el mensaje de error de OpenSSL, usted debe llamar a * /
SSLeay_add_ssl_algorithms (); /* cargar el algoritmo SSL biblioteca * /
/* algoritmo también se puede cargar la biblioteca SSL
SSL_library_init utilizando los dos métodos siguientes ( void); OpenSSL_add_ssl_algor ithms ();
* /
crear el entorno SSL continuación
metanfetamina = SSLv23_server_method (); modos
/* Cliente son:
SSL_METHOD * TLSv1_client_method (void); acuerdo TLSv1.0 SSL_METHOD * SSLv2_client_method (void); protocolo SSLv2 SSL_METHOD * SSLv3_client_method (void); protocolo SSLv3 SSL_METHOD * SSLv23_client_method (void); SSLv2 /v3 modos protocolo de Windows Server son:
SSL_METHOD * TLSv1_server_method (void); SSL_METHOD * SSLv2_server_method (void); el mismo patrón /* en la aplicación, el cliente y el servidor deben ser * /; SSL_METHOD * SSLv3_server_method (void); SSL_METHOD * SSLv23_server_method (void);
* /
ctx = SSL_CTX_new (met)
CTX es un puntero para devolver el entorno de sesión SSL actual, configurarlo según sus necesidades:
anular SSL_CTX_set_verify (SSL_CTX *, int, int * (int, X509_STORE_CTX *));
conjunto método de validación de certificados. El primer parámetro es el actual puntero del CTX, el segundo es para verificar cierto, si desea verificar las palabras de los demás, utiliza SSL_VERIFY_PEER. Usted no lo necesita, utilice SSL_VERIFY_NONE. En circunstancias normales, el cliente debe autenticarse entre sí, y no se requiere el servidor. El tercer parámetro es la validación del proceso de devolución de llamada, si no hay una necesidad especial para el uso de un puntero nulo en él.
SSL_CTX_load_verify_locations void (SSL_CTX *, const char *, const char *);
se carga el certificado, el primer argumento anterior, el segundo es el nombre del parámetro del archivo de certificado, y el parámetro de tres es la ruta de acceso al archivo de certificado;
int SSL_CTX_use_certificate_file (SSL_CTX * CTX, archivo * const char, tipo int);
cargar el certificado local, el tipo de tipo de estructura se especifica en el archivo de certificado, el fracaso para volver -1
SSL_CTX_set_default_passwd_cb_userdata (CTX, " 123.456 "); certificado de contraseña SSL
listo para ser cargado, se le pedirá un mensaje para introducir una contraseña si no se establece, a continuación, cargue el certificado, por lo que el uso de más problemas en el programa, la función es contraseñas guardado anteriormente, usados ​​de forma automática cuando se lee el certificado .
int SSL_CTX_use_PrivateKey_file (SSL_CTX * CTX, const char * archivo, tipo int);
cargar su clave privada; tipo de argumento especifica el tipo de construcción del archivo de clave privada, el fracaso para volver -1. Después de cargar los documentos y certificados, claves privadas y certificados pueden ser verificados partidos:
int SSL_CTX_check_private_key (SSL_CTX *);
Ejemplo: si
(SSL_CTX_use_certificate_file (ctx, server.crt, SSL_FILETYPE_PEM) < = 0) {
ERR_print_errors_fp (stderr);
de salida (3);
}
SSL_CTX_set_default_passwd_cb_userdata (ctx, " 123456789 ");
si (SSL_CTX_use_PrivateKey_file (CTX, server.key, SSL_FILETYPE_PEM) < = 0) {
ERR_print_errors_fp (stderr);
de salida (4);
}
if (! SSL_CTX_check_private_key (CTX)) {
fprintf (stderr, " la clave privada no coincide con el certificado de clave pública /n ");
de salida (5);
}
2
,
asociado TCP

SSL socket es dependiente del ritmo de la ranura, por lo que la seguridad debe estar asociado con un conector de toma respectiva. proceso de la comunicación SSL se lleva a cabo después de que se haya establecido la conexión TCP, el proceso de establecer un socket con la programación del zócalo ordinario no es diferente, no repetiremos aquí.
ssl = SSL_new (CTX); //aplicar socket SSL
SSL_set_fd (SSL, sd); //enlazar el conector para leer y escribir más de
llamar para conectar con éxito con el socket TCP asociación SSL.
3
, comienza los servicios de comunicaciones seguras para el fin de llamar
err = SSL_accept (SSL);
monitorear las solicitudes del cliente, el cliente llama
err = SSL_CONNECT (SSL);
iniciar la conexión. Tras el éxito, las dos partes pueden llamar
int SSL_read (SSL SSL *, char * buf, int num); int SSL_write (SSL SSL *, char * buf, int num);
una comunicación segura.
tiempo las dos partes pueden obtener información de certificado de pares
ejemplo llamando X509 * SSL_get_peer_certificate (SSL * ssl):
client_cert = SSL_get_peer_certificate (SSL);
if (! client_cert = NULL) {printf
(" certificado de cliente: /n ");
cadena = X509_NAME_oneline (X509_get_subject_name (client_cert), 0, 0);
CHK_NULL (str);
printf (" /t Asunto:% s /n ", str);
OPENSSL_free (str);
str = X509_NAME_oneline (X509_get_issuer_name (client_cert), 0, 0);
CHK_NULL (str);
printf (" /t emisor:% s /n ", str);
OPENSSL_free (str);
/* Nos podía hacer todo tipo de cosas antes de la verificación del certificado aquí
desasignar el certificado * /
X509_free (client_cert);.
} else printf
(" el cliente no tiene certificate./n");
4
>, el fin de la comunicación, es necesario solicitar la libertad frente a la SSL
recursos
int SSL_shutdown (SSL * SSL); cierra el socket SSL; SSL_free anular (SSL); sockets liberación SSL; void SSL_CTX_free (ctx), el medio ambiente liberación SSL;


Copyright © Conocimiento de Windows All Rights Reserved