Red de conocimiento informático - Aprendizaje de programación - API para el protocolo ssl x509 para mbedtls

API para el protocolo ssl x509 para mbedtls

1 Generar certificado:

openssl genrsa -des3 -out host.key 2048

Generar la clave de autoridad emisora

openssl req -new -x509 -days 7305 - key host.key -out host.crt

p> Generar certificado para su emisión

openssl genrsa -des3 -out applier.pem 1024

Para solicitar El autenticado la empresa genera una clave privada

openssl rsa -in applier.pem -out applier.key

Genera la clave de descifrado applier.key correspondiente a applier.pem

openssl req -new -key applier.pem -out applier.csr Escuchar 443 ssl default_server;

Índice index.html index.htm;

Ubicación / {

Raíz /rootdir

}

Ssl en

Ssl_certificado /path/applier.crt ?#Proporcionar certificado

Ssl_certificate_key /path /applier.key ?#Proporcionar clave privada de descifrado

}

Acceda a localhost directamente a través del protocolo https. En este momento, el navegador le dará la mano al servidor y recibirá un mensaje de certificado. Dado que en la prueba se utiliza un certificado autofirmado, el navegador le indicará que el certificado no es confiable y el certificado se agregará a la excepción de accesibilidad. El segmento de mensaje de certificado enviado por el servidor al cliente contiene la clave pública del certificado del servidor; después de que el cliente recibe el segmento de mensaje, lee la clave pública del certificado del servidor desde la posición correspondiente en el segmento de mensaje de acuerdo con el protocolo. y lo almacena en las variables relevantes.

La conexión segura SSL con el sitio web se establece a través del protocolo https, al que se accede a través de https://ip:port/. El navegador y el servidor web establecen una conexión segura completando la autenticación y el intercambio de claves mediante un proceso de protocolo de enlace. El proceso es el siguiente:

1 El navegador del usuario envía el número de versión de SSL, los parámetros de configuración de cifrado, los datos relacionados con la sesión y alguna otra información necesaria al servidor.

El servidor envía al navegador su número de versión SSL, configuración de cifrado, datos relacionados con la sesión y otra información necesaria, junto con el certificado del servidor. Si el SSL del servidor está configurado para requerir autenticación de usuario, se envía una solicitud de certificado de usuario al navegador.

2 El cliente comprueba el certificado del servidor. Si la comprobación falla, no se puede establecer la conexión SSL. Si tiene éxito, continúe. El navegador del cliente generará un texto cifrado previo al maestro para esta sesión, lo cifrará con la clave pública del servidor y lo enviará al servidor. Si el servidor requiere una identidad de cliente, el cliente debe firmar algunos datos adicionales y enviarlos al servidor junto con el certificado del cliente.

Si el servidor requiere autenticación del cliente, comprueba si la CA que firmó el certificado del cliente es confiable. Si no está en la lista de confianza, la sesión finalizará.

3 Tanto el cliente como el servidor utilizan esta clave maestra para generar la clave de sesión (clave simétrica) para esta sesión. Esta clave de sesión se utiliza para cualquier información pasada después de que finaliza el protocolo de enlace SSL entre las dos partes. La razón principal de esto es que el cifrado simétrico es más de un orden de magnitud menos intensivo desde el punto de vista computacional que el cifrado asimétrico, lo que puede aumentar significativamente la velocidad computacional durante la sesión entre ambas partes. El cliente notifica al servidor cualquier información posterior que envíe. El cliente notifica al servidor que todos los mensajes futuros se cifrarán utilizando esta clave de sesión. El cliente notifica al servidor que el protocolo de enlace SSL está completo.

El servidor notifica al cliente que todos los mensajes futuros se cifrarán utilizando esta clave de sesión. El servidor notifica al cliente que toda la información enviada posteriormente se cifrará utilizando esta clave de sesión y notifica al servidor que el cliente ha completado el protocolo de enlace SSL.

Función de inicialización del certificado:

void mbedtls_x509_crt_init( mbedtls_x509_crt *crt ){

memset( crt, 0, sizeof(mbedtls_x509_crt) );}

Función de liberación de espacio del certificado

void mbedtls_x509_crt_free( mbedtls_x509_crt *crt )

Estructura del certificado:

typedef struct mbedtls_x509_crt

{

mbedtls_ x509_buf raw;datos aleatorios

mbedtls_x509_buf tbs;firma

int versión;versión

mbedtls_x509_buf serial; No.

mbedtls_x509_buf sig_oid; algoritmo de firma, como sha1RSA *

mbedtls_x509_time valid_from;Hora de inicio de validez del certificado

mbedtls_x509_time valid_to;Hora de vencimiento del certificado

mbedtls_pk_context pk;Contenedor de claves públicas

int ext_types; ?/**< Cadena de bits que contiene extensiones para detección y análisis*/

int max_pathlen

mbedtls_x509_buf sig; Firma cifrada con clave privada

mbedtls_md_type_t sig_md; MBEDTLS_MD_SHA256mbedtls_pk_type_t sig_pk;Configuración del algoritmo de cifrado de firma MBEDTLS_PK_RSA nombre */

estructura mbedtls_x509_crt *next;Puntero al siguiente certificado

}

Apretón de manos en Mbedtls:

p>

Función de cliente

int mbedtls_ssl_handshake_client_step(mbedtls_ssl_context *ssl)

El parámetro de entrada ssl_context es el parámetro de configuración de la conexión segura, incluido el estado del protocolo de enlace, los parámetros del protocolo de enlace y los datos de la sesión. , Parámetros del cliente como ID de terminal y entrada de devolución de llamada relacionada.

El siguiente programa es de ssl_tls.

#if definido(MBEDTLS_SSL_CLI_C)

if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT )

ret = mbedtls_ssl_handshake_client_step( ssl );

#endif

#si está definido(MBEDTLS_SSL_SRV_C)

if( ssl->conf->endpoint = = MBEDTLS_SSL_IS_SERVER )

ret = mbedtls_ssl_handshake_server_step( ssl );

#endif

Lógica del cliente:

Después de que el cliente inicia una solicitud de saludo del cliente , el servidor devolverá un paquete de saludo del servidor y un certificado (si el cliente tiene requisitos de autenticación, enviará un paquete de solicitud de certificado para solicitar el certificado del cliente), y luego el cliente comienza a analizar si el certificado del servidor entrante es válido y legal. :

Primero, confirme si el certificado pasa la verificación juzgando el campo ssl->transform_negotiate->.ciphersuite_info (información cifrada)

MBEDTLS_KEY_EXCHANGE_ECJPAKE,

MBEDTLS_KEY_EXCHANGE_PSK,

p>

MBEDTLS_KEY_EXCHANGE_DHE_PSK,

MBEDTLS_KEY_EXCHANGE_ECDHE_PSK

Los cuatro conjuntos de cifrado psk anteriores no requieren certificados para interactuar con ellos. Los conjuntos de cifrado psk que requieren certificados son los siguientes. siguiente:

MBEDTLS_KEY_EXCHANGE_ECDHE_RSA,

MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA,

MBEDTLS_KEY_EXCHANGE_ECDH_RSA,

MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA,

En segundo lugar, verifique la validez. del certificado: mbedtls_x509_crt _verify_with_profile hay en x509_crt una función de verificación. c. Los parámetros de entrada incluyen el certificado PEER de la sesión, la cadena de certificados, la lista de CA confiable, el perfil de autenticación y los parámetros de autenticación.

1.

1. Compare el campo CN para ver si coincide. Si no, use la función x509_memcasecmp para devolver un error CN_MISMATCH.

2. Verifique. la clave según el archivo de configuración Si el tamaño y el tipo son correctos, si no, se devuelve el error BAD_KEY----función x509_profile_check_key

3. Determine si el emisor de la CA y el emisor principal (cadena de emisores) son confiables--- --función x509_crt_check_parent

Una vez completada la verificación, se determinará si el certificado usó una clave EC, y de ser así, se usará la función mbedtls_ssl_check_curve para verificar que la curva elíptica es correcto.