Configurer OpenSSL pour Linux

Attention

Cet article fait référence à CentOS, une distribution Linux proche de l’état EOL (End Of Life). Faites le point sur votre utilisation afin de vous organiser en conséquence. Pour plus d’informations, consultez les Conseils sur la fin de vie CentOS.

Avec le kit SDK Speech, OpenSSL est configuré de façon dynamique en fonction de la version du système hôte.

Notes

Cet article s’applique uniquement lorsque le SDK Speech est pris en charge sur Linux.

Pour garantir la connectivité, vérifiez que les certificats OpenSSL ont été installés sur votre système. Exécutez une commande :

openssl version -d

Sur les systèmes basés sur Ubuntu/Debian, la sortie doit être la suivante :

OPENSSLDIR: "/usr/lib/ssl"

Vérifiez s'il existe un sous-répertoire certs sous OPENSSLDIR. Dans l'exemple ci-dessus, il s'agirait de /usr/lib/ssl/certs.

  • S'il existe un sous-répertoire /usr/lib/ssl/certs et qu'il contient de nombreux fichiers de certificats individuels (avec l'extension .crt ou .pem), aucune action supplémentaire n'est nécessaire.

  • Si OPENSSLDIR est différent de /usr/lib/ssl et/ou en présence d'un seul fichier de groupement de certificats plutôt que de plusieurs fichiers individuels, vous devez définir une variable d'environnement SSL appropriée pour indiquer l'emplacement des certificats.

Exemples

Voici quelques exemples de variables d’environnement à configurer par répertoire OpenSSL.

  • OPENSSLDIR est /opt/ssl. Il y a un sous-répertoire certs contenant de nombreux fichiers .crt ou .pem. Définissez la variable d'environnement SSL_CERT_DIR pour qu’elle pointe sur /opt/ssl/certs avant d’utiliser le SDK Speech. Par exemple :
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR a la valeur /etc/pki/tls (par exemple sur les systèmes RHEL/CentOS). Il y a un sous-répertoire certs contenant un fichier de bundle de certificats, par exemple ca-bundle.crt. Définissez la variable d'environnement SSL_CERT_FILE pour qu’elle pointe sur ce fichier avant d’utiliser le SDK Speech. Par exemple :
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

Vérifications de la révocation de certificats

Lorsque le SDK Speech se connecte au service Speech, il vérifie le certificat TLS (Transport Layer Security). Le SDK Speech vérifie que le certificat signalé par le point de terminaison distant est approuvé et qu’il n’a pas été révoqué. Cette vérification fournit une couche de protection contre les attaques impliquant l’usurpation d’identité et d’autres vecteurs associés. La vérification s’effectue en extrayant une liste de révocation de certificats (CRL) d’une autorité de certification utilisée par Azure. Vous trouverez une liste des emplacements de téléchargement de l’autorité de certification Azure pour les listes de révocation de certificats TLS mises à jour dans ce document.

Si une destination se faisant passer pour le service Speech signale un certificat qui a été révoqué dans une liste de révocation de certificats récupérée, le Kit de développement logiciel (SDK) met fin à la connexion et signale une erreur via un événement Canceled. L’authenticité d’un certificat signalé ne peut pas être vérifiée sans une liste de révocation de certificats mise à jour. Par conséquent, le Kit de développement logiciel (SDK) Speech traite également un échec de téléchargement d’une liste de révocation de certificats à partir d’un emplacement d’autorité de certification Azure en tant qu’erreur.

Avertissement

Si votre solution utilise un proxy ou un pare-feu, elle doit être configurée pour autoriser l’accès à toutes les URL de la liste de révocation de certificats utilisées par Azure. Notez que la plupart de ces URL sont en dehors du domaine microsoft.com, donc autoriser l’accès à *.microsoft.com n’est pas suffisant. Pour plus d’informations, consultez ce document. Dans certains cas exceptionnels, vous pouvez ignorer les défaillances de liste de révocation de certificats (voir la section correspondante), mais une telle configuration est fortement déconseillée, en particulier pour les scénarios de production.

Fichiers de liste de révocation de certificats volumineux (> 10 Mo)

L’une des causes des échecs liés aux listes de révocation de certificats est l’utilisation de fichiers de liste de révocation de certificats volumineux. Cette classe d’erreur s’applique en général uniquement aux environnements spéciaux avec des chaînes d’autorité de certification étendues. Les points de terminaison publics standard ne devraient pas rencontrer cette classe de problème.

La taille maximale de la liste de révocation de certificats par défaut utilisée par le kit de développement logiciel (SDK) Speech (10 Mo) peut être ajustée par objet de configuration. La clé de la propriété pour ce réglage est CONFIG_MAX_CRL_SIZE_KB, et la valeur, spécifiée sous forme de chaîne, est par défaut « 10000 » (10 Mo). Par exemple, lors de la création d’un objet SpeechRecognizer (qui gère une connexion au service Speech), vous pouvez définir cette propriété dans son SpeechConfig. Dans l’extrait de code ci-dessous, la configuration est ajustée pour autoriser une taille de fichier de liste de révocation de certificats allant jusqu’à 15 Mo.

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")

Contournement ou passage des échecs de la liste de révocation de certificats

Si un environnement ne peut pas être configuré pour accéder à un emplacement d’autorité de certification Azure, le Kit de développement logiciel (SDK) Speech ne peut pas récupérer une liste de révocation de certificats mise à jour. Vous pouvez configurer le kit de développement logiciel (SDK) pour continuer et consigner les échecs de téléchargement ou ignorer toutes les vérifications.

Avertissement

Les vérifications de la liste de révocation de certificats sont une mesure de sécurité et leur contournement augmente la sensibilité aux attaques. Elles ne doivent pas être contournées sans tenir compte des implications en matière de sécurité et des mécanismes alternatifs pour la protection contre les vecteurs d’attaque que les vérifications de la liste de révocation de certificats atténuent.

Pour poursuivre la connexion lorsqu’une liste de révocation de certificats ne peut pas être récupérée, réglez la propriété "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" sur "true". Une tentative est toujours effectuée pour récupérer une liste de révocation de certificats et les échecs sont toujours émis dans les journaux, mais les tentatives de connexion sont autorisées à se poursuivre.

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")

Pour désactiver les vérifications de révocation de certificats, réglez la propriété "OPENSSL_DISABLE_CRL_CHECK" sur "true". Ensuite, lors de la connexion au service vocal, il n’y aura aucune tentative de vérification ou de téléchargement d’une liste de révocation de certificats ou de vérification automatique d’un certificat TLS/SSL signalé.

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")

Performances et mise en cache de la liste de révocation

Par défaut, le kit de développement logiciel (SDK) Speech met en cache une liste de révocation de certificats téléchargée avec succès sur le disque pour améliorer la latence initiale des connexions futures. Si aucune liste de révocation de certificats mise en cache n’est présente ou si la liste de révocation de certificats mise en cache a expiré, une nouvelle liste est téléchargée.

Certaines distributions Linux ne disposent pas d’une variable d’environnement TMP ou TMPDIR définie. Par conséquent, le Kit de développement logiciel (SDK) Speech ne met pas en cache les listes de révocation de certificats téléchargées. Sans variable d’environnement TMP ou TMPDIR définie, le Kit de développement logiciel (SDK) Speech télécharge une nouvelle liste de révocation de certificats pour chaque connexion. Pour améliorer les performances de la connexion initiale dans ce cas, vous pouvez créer une variable d’environnement TMPDIR et la définir sur le chemin d’accès accessible d’un répertoire temporaire.

Étapes suivantes