Configuración de OpenSSL para Linux

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planeación en consecuencia. Para obtener más información, consulte la Guía de fin de vida de CentOS.

Con el SDK de Voz, OpenSSL se configura dinámicamente en la versión del sistema host.

Nota

Este artículo solo es aplicable cuando se admite el SDK de Voz en Linux.

Para garantizar la conectividad, compruebe que se han instalado los certificados de OpenSSL en el sistema. Ejecute un comando:

openssl version -d

La salida en los sistemas basados en Ubuntu/Debian debe ser:

OPENSSLDIR: "/usr/lib/ssl"

Compruebe si existe el subdirectorio certs en OPENSSLDIR. En el ejemplo anterior, sería /usr/lib/ssl/certs.

  • Si /usr/lib/ssl/certs existe y si contiene muchos archivos de certificado individuales (con la extensión .crt o .pem), no es necesario realizar más acciones.

  • Si OPENSSLDIR es algo distinto de /usr/lib/ssl o hay un único archivo de paquete de certificados en lugar de varios archivos individuales, debe establecer una variable de entorno SSL adecuada para indicar dónde se pueden encontrar los certificados.

Ejemplos

Estas son algunas variables de entorno de ejemplo para configurar por directorio OpenSSL.

  • OPENSSLDIR is /opt/ssl. Existe un subdirectorio certs con muchos archivos .crt o .pem. Establezca la variable de entorno SSL_CERT_DIR para que apunte a /opt/ssl/certs antes de ejecutar un programa que utilice el SDK de Voz. Por ejemplo:
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR es /etc/pki/tls (como en los sistemas basados en RHEL o CentOS). Existe un subdirectorio certs con un archivo de paquete de certificados, por ejemplo ca-bundle.crt. Establezca la variable de entorno SSL_CERT_FILE para que apunte a ese archivo antes de usar el SDK de Voz. Por ejemplo:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

Comprobaciones de revocación del certificado

Cuando el SDK de Voz se conecta al servicio de Voz, comprueba el certificado de seguridad de la capa de transporte (TLS). El SDK de Voz comprueba que el certificado notificado por el punto de conexión remoto es de confianza y no se ha revocado. Esta verificación proporciona una capa de protección contra ataques que implican suplantación de datos y otros vectores relacionados. La comprobación se realiza recuperando una lista de revocación de certificados (CRL) de una entidad de certificación (CA) usada por Azure. En este documento se puede encontrar una lista de ubicaciones de descarga de CA de Azure para las CRL de TLS actualizadas.

Si un destino que posa como servicio de voz notifica un certificado revocado en una CRL recuperada, el SDK finaliza la conexión e informa de un error a través de un evento de Canceled. La autenticidad de un certificado notificado no se puede comprobar sin una CRL actualizada. Por lo tanto, el SDK de Voz también trata un error al descargar una CRL desde una ubicación de ca de Azure como un error.

Advertencia

Si la solución usa proxy o firewall, debe configurarse para permitir el acceso a todas las direcciones URL de la lista de revocación de certificados que usa Azure. Tenga en cuenta que muchas de estas direcciones URL están fuera del dominio microsoft.com, por lo que permitir el acceso a *.microsoft.com no es suficiente. Consulte este documento para obtener más información. En casos excepcionales, puede omitir los errores de CRL (consulte la sección correspondiente), pero esta configuración se desaconseja encarecidamente, especialmente en escenarios de producción.

Archivos CRL grandes (> 10 MB)

Una causa de los errores relacionados con la CRL es el uso de archivos CRL grandes. Normalmente, esta clase de error solo es aplicable a entornos especiales con cadenas de CA extendidas. Los puntos de conexión públicos estándar no deben encontrar esta clase de problema.

El tamaño de CRL máximo predeterminado que usa el SDK de Voz (10 MB) se puede ajustar por objeto de configuración. La clave de propiedad de este ajuste es CONFIG_MAX_CRL_SIZE_KB y el valor, especificado como una cadena, es de manera predeterminada "10000" (10 MB). Por ejemplo, al crear un objeto SpeechRecognizer (que administra una conexión al servicio de Voz), puede establecer esta propiedad en su SpeechConfig. En el fragmento de código siguiente, la configuración se ajusta para permitir un tamaño de archivo CRL de hasta 15 MB.

config.SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config->SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config.setProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
speech_config.set_property_by_name("CONFIG_MAX_CRL_SIZE_KB"", "15000")
speechConfig.properties.SetPropertyByString("CONFIG_MAX_CRL_SIZE_KB", "15000")

Omitir o ignorar errores de CRL

Si un entorno no se puede configurar para acceder a una ubicación de ca de Azure, el SDK de Voz no puede recuperar una CRL actualizada. Puede configurar el SDK para continuar y registrar errores de descarga o para omitir todas las comprobaciones de CRL.

Advertencia

Las comprobaciones de CRL son una medida de seguridad y omitirlas aumenta la vulnerabilidad a los ataques. No se deben omitir sin tener en cuenta exhaustivamente las implicaciones de seguridad y los mecanismos alternativos para protegerse frente a los vectores de ataque que las comprobaciones de CRL mitigan.

Para continuar con la conexión cuando no se pueda recuperar una CRL, establezca la propiedad "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" a "true". Se sigue intentando recuperar una CRL y los errores se siguen emitiendo en los registros, pero los intentos de conexión pueden continuar.

config.SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config->SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config.setProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
speech_config.set_property_by_name("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")

speechConfig.properties.SetPropertyByString("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")

Para desactivar las comprobaciones de revocación de certificados, establezca la propiedad "OPENSSL_DISABLE_CRL_CHECK" a "true". Después, al conectarse al servicio de Voz, no habrá ningún intento de comprobar o descargar una CRL ni ninguna comprobación automática de un certificado TLS notificado.

config.SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config->SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config.setProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
speech_config.set_property_by_name("OPENSSL_DISABLE_CRL_CHECK", "true")
speechConfig.properties.SetPropertyByString("OPENSSL_DISABLE_CRL_CHECK", "true")

Almacenamiento en caché y rendimiento de CRL

De forma predeterminada, el SDK de Voz almacenará en caché una CRL descargada correctamente en el disco para mejorar la latencia inicial de las conexiones futuras. Cuando ninguna CRL almacenada en caché está presente o cuando la CRL almacenada en caché ha expirado, se descarga una nueva lista.

Algunas distribuciones de Linux no tienen definida una variable de entorno TMP ni TMPDIR, por lo que el SDK de Voz no almacena en caché las CRL descargadas. Sin TMP o TMPDIR variable de entorno definida, el SDK de Voz descarga una nueva CRL para cada conexión. Para mejorar el rendimiento inicial de la conexión en esta situación, puede crear una TMPDIR variable de entorno y establecerla en la ruta de acceso del directorio temporal..

Pasos siguientes