-
-
Configuration de Citrix ADC pour Citrix Virtual Apps and Desktops
-
Préférence de zone optimisée pour l'équilibrage de la charge du serveur global (GSLB)
-
Déploiement d'une plateforme de publicité numérique sur AWS avec Citrix ADC
-
Amélioration de l'analyse des flux de clics dans AWS à l'aide de Citrix ADC
-
Citrix ADC dans un cloud privé géré par Microsoft Windows Azure Pack et Cisco ACI
-
-
Déployer une instance de Citrix ADC VPX sur AWS
-
Installer une instance Citrix ADC VPX sur le cloud VMware sur AWS
-
Installer une instance Citrix ADC VPX sur des serveurs Microsoft Hyper-V
-
Installer une instance Citrix ADC VPX sur la plate-forme Linux-KVM
-
Provisionnement de l'appliance virtuelle Citrix ADC à l'aide d'OpenStack
-
Provisionnement de l'appliance virtuelle Citrix ADC à l'aide de Virtual Machine Manager
-
Configuration des appliances virtuelles Citrix ADC pour utiliser l'interface réseau SR-IOV
-
Configuration des appliances virtuelles Citrix ADC pour utiliser l'interface réseau PCI
-
Provisioning de l'appliance virtuelle Citrix ADC à l'aide du programme virsh
-
Provisioning de l'appliance virtuelle Citrix ADC avec SR-IOV, sur OpenStack
-
Configuration d'une instance Citrix ADC VPX sur KVM pour utiliser les interfaces hôtes OVS DPDK
-
Déployer une instance de Citrix ADC VPX sur AWS
-
Serveurs d'équilibrage de charge dans différentes zones de disponibilité
-
Haute disponibilité dans toutes les zones de disponibilité AWS
-
Déployer une paire VPX haute disponibilité avec des adresses IP privées dans différentes zones AWS
-
Ajout d'un service de mise à l'échelle automatique AWS back-end
-
Configurer une instance Citrix ADC VPX pour utiliser l'interface réseau SR-IOV
-
Configurer une instance Citrix ADC VPX pour utiliser la mise en réseau améliorée avec AWS ENA
-
Déployer une instance de Citrix ADC VPX sur Microsoft Azure
-
Architecture réseau pour les instances Citrix ADC VPX sur Microsoft Azure
-
Configurer plusieurs adresses IP pour une instance autonome Citrix ADC VPX
-
Configurer une configuration haute disponibilité avec plusieurs adresses IP et cartes réseau
-
Configurer une instance Citrix ADC VPX pour utiliser la mise en réseau accélérée Azure
-
Configurer les nœuds HA-INC à l'aide du modèle de haute disponibilité Citrix avec Azure ILB
-
Ajouter des paramètres de mise à l'échelle automatique Azure
-
Configurer GSLB sur une configuration haute disponibilité active en veille
-
Configurer des pools d'adresses (IIP) pour une appliance Citrix Gateway
-
Scripts PowerShell supplémentaires pour le déploiement Azure
-
Déployer une instance Citrix ADC VPX sur Google Cloud Platform
-
Déployer une paire haute disponibilité VPX sur Google Cloud Platform
-
Déployer une paire VPX haute disponibilité avec des adresses IP privées sur Google Cloud Platform
-
Ajouter un service de mise à l'échelle automatique GCP back-end
-
Prise en charge de la mise à l'échelle VIP pour l'instance Citrix ADC VPX sur GCP
-
-
Automatiser le déploiement et les configurations de Citrix ADC
-
Solutions pour les fournisseurs de services de télécommunication
-
Trafic de plan de contrôle d'équilibrage de charge basé sur les protocoles Diameter, SIP et SMPP
-
Utilisation de la bande passante à l'aide de la fonctionnalité de redirection de cache
-
Optimisation TCP de Citrix ADC
-
Authentification, autorisation et audit du trafic des applications
-
Fonctionnement de l'authentification, de l'autorisation et de l'audit
-
Composants de base de la configuration d'authentification, d'autorisation et d'audit
-
Autorisation de l'accès des utilisateurs aux ressources applicatives
-
Citrix ADC en tant que proxy du service de fédération Active Directory
-
Citrix Gateway sur site en tant que fournisseur d'identité pour Citrix Cloud
-
Prise en charge de la configuration de l'attribut de cookie SameSite
-
Configuration d'authentification, d'autorisation et d'audit pour les protocoles couramment utilisés
-
Résoudre les problèmes liés à l'authentification et à l'autorisation
-
-
-
Prise en charge de la configuration Citrix ADC dans la partition d'administration
-
Prise en charge de VXLAN pour les partitions d'administration
-
Prise en charge de SNMP pour les partitions d'administration
-
Prise en charge des journaux d'audit pour les partitions d'administration
-
Afficher les adresses PMAC configurées pour la configuration VLAN partagée
-
-
-
-
Configuration de l'expression de stratégie avancée : Mise en route
-
Expressions de stratégie avancées : utilisation de dates, d'heures et de nombres
-
Expressions de stratégie avancées : analyse des données HTTP, TCP et UDP
-
Expressions de stratégie avancées : analyse des certificats SSL
-
Expressions de stratégie avancées : adresses IP et MAC, débit, ID VLAN
-
Expressions de stratégie avancées : fonctions d'analyse de flux
-
Référence aux expressions - Expressions de stratégie avancées
-
Résumé d'exemples d'expressions et de stratégies de syntaxe par défaut
-
Didacticiel exemples de stratégies de syntaxe par défaut pour la réécriture
-
Migration des règles Apache mod_rewrite vers la syntaxe par défaut
-
-
-
Traduire l'adresse IP de destination d'une requête vers l'adresse IP d'origine
-
-
Prise en charge de la configuration de Citrix ADC dans un cluster
-
-
-
Groupes de nœuds pour les configurations spotted et striped partielles
-
Suppression du nœud d'un cluster déployé à l'aide de l'agrégation de liens de cluster
-
Surveillance des itinéraires pour les itinéraires dynamiques dans le cluster
-
Surveillance de la configuration du cluster à l'aide de MIB SNMP avec liaison SNMP
-
Surveillance des échecs de propagation des commandes dans un déploiement de cluster
-
Prise en charge de MSR pour les nœuds inactifs dans une configuration de cluster spotted
-
Liaison d'interface VRRP dans un cluster actif à nœud unique
-
Scénarios de configuration et d'utilisation du cluster
-
Migration d'une configuration HA vers une configuration de cluster
-
Interfaces communes pour le client et le serveur et interfaces dédiées pour le backplane
-
Commutateur commun pour le client, le serveur et le backplane
-
Commutateur commun pour le client et le serveur et commutateur dédié pour le backplane
-
Services de surveillance dans un cluster à l'aide de la surveillance des chemins
-
Opérations prises en charge sur des nœuds de cluster individuels
-
-
-
Configurer les enregistrements de ressources DNS
-
Créer des enregistrements MX pour un serveur d'échange de messagerie
-
Créer des enregistrements NS pour un serveur faisant autorité
-
Créer des enregistrements NAPTR pour le domaine des télécommunications
-
Créer des enregistrements PTR pour les adresses IPv4 et IPv6
-
Créer des enregistrements SOA pour les informations faisant autorité
-
Créer des enregistrements TXT pour contenir du texte descriptif
-
Configurer Citrix ADC en tant que résolveur de stub adapté à la sécurité sans validation
-
Prise en charge des trames Jumbo pour DNS pour gérer les réponses de grandes tailles
-
Configurer la mise en cache négative des enregistrements DNS
-
-
Équilibrage de charge globale des serveurs
-
Configurer les entités GSLB individuellement
-
Cas d'utilisation : Déploiement d'un groupe de services d'échelle automatique basé sur l'adresse IP
-
-
Remplacer le comportement de proximité statique en configurant les emplacements préférés
-
Configurer la sélection du service GSLB à l'aide du changement de contenu
-
Configurer GSLB pour les requêtes DNS avec les enregistrements NAPTR
-
Exemple de configuration parent-enfant complète à l'aide du protocole d'échange de mesures
-
-
Équilibrer la charge du serveur virtuel et des états de service
-
Protéger une configuration d'équilibrage de charge contre les défaillances
-
-
Configurer des serveurs virtuels d'équilibrage de charge sans session
-
Réécriture des ports et des protocoles pour la redirection HTTP
-
Insérer l'adresse IP et le port d'un serveur virtuel dans l'en-tête de requête
-
Utiliser une adresse IP source spécifiée pour la communication backend
-
Définir une valeur de délai d'attente pour les connexions client inactives
-
Utiliser un port source à partir d'une plage de ports spécifiée pour la communication backend
-
Configurer la persistance de l'IP source pour les communications backend
-
-
Paramètres avancés d'équilibrage de charge
-
Protéger les applications sur les serveurs protégés contre les surtensions de trafic
-
Activer le nettoyage des connexions de serveur virtuel et de service
-
Activer ou désactiver la session de persistance sur les services TROFS
-
Activer la vérification de l'état TCP externe pour les serveurs virtuels UDP
-
Maintenir la connexion client pour plusieurs demandes client
-
Utiliser l'adresse IP source du client lors de la connexion au serveur
-
Définir une limite de nombre de requêtes par connexion au serveur
-
Définir une valeur de seuil pour les moniteurs liés à un service
-
Définir une valeur de délai d'attente pour les connexions client inactives
-
Définir une valeur de délai d'attente pour les connexions au serveur inactif
-
Définir une limite sur l'utilisation de la bande passante par les clients
-
Configurer les moniteurs dans une configuration d'équilibrage de charge
-
Configurer l'équilibrage de charge pour les protocoles couramment utilisés
-
Cas d'utilisation 3 : Configurer l'équilibrage de charge en mode de retour direct du serveur
-
Cas d'utilisation 4 : Configurer les serveurs LINUX en mode DSR
-
Cas d'utilisation 5 : Configurer le mode DSR lors de l'utilisation de TOS
-
Cas d'utilisation 7 : Configurer l'équilibrage de charge en mode DSR à l'aide d'IP sur IP
-
Cas d'utilisation 8 : Configurer l'équilibrage de charge en mode à un bras
-
Cas d'utilisation 9 : Configurer l'équilibrage de charge en mode Inline
-
Cas d'utilisation 10 : Équilibrage de la charge des serveurs du système de détection d'intrusion
-
Cas d'utilisation 11 : Isolation du trafic réseau à l'aide de stratégies d'écoute
-
Cas d'utilisation 12 : Configurer XenDesktop pour l'équilibrage de charge
-
Cas d'utilisation 13 : Configurer XenApp pour l'équilibrage de charge
-
Cas d'utilisation 14 : Assistant ShareFile pour l'équilibrage de charge Citrix ShareFile
-
-
Configurer pour source de trafic de données Citrix ADC FreeBSD à partir d'une adresse SNIP
-
Déchargement et accélération SSL
-
Prise en charge du protocole TLSv1.3 tel que défini dans la RFC 8446
-
Suites de chiffrement disponibles sur les appliances Citrix ADC
-
Matrice de prise en charge des certificats de serveur sur l'appliance ADC
-
Prise en charge du module de sécurité matérielle du réseau Gemalto SafeNet
-
-
-
-
Authentification et autorisation pour les utilisateurs du système
-
Configuration des utilisateurs, des groupes d'utilisateurs et des stratégies de commande
-
Réinitialisation du mot de passe administrateur par défaut (nsroot)
-
Configuration de l'authentification des utilisateurs externes
-
Authentification basée sur la clé SSH pour les administrateurs Citrix ADC
-
Authentification à deux facteurs pour les utilisateurs système
-
-
-
Configuration d'un tunnel de connecteur CloudBridge entre deux centres de données
-
Configuration de CloudBridge Connector entre Datacenter et AWS Cloud
-
Configuration d'un tunnel de connecteur CloudBridge entre un centre de données et Azure Cloud
-
Configuration du tunnel Connector CloudBridge entre Datacenter et SoftLayer Enterprise Cloud
-
-
Points à prendre en considération pour une configuration de haute disponibilité
-
Restriction du trafic de synchronisation haute disponibilité à un VLAN
-
Configuration des nœuds haute disponibilité dans différents sous-réseaux
-
Limitation des basculements causés par les moniteurs de routage en mode non-INC
-
Comprendre le calcul de la vérification de l'état de haute disponibilité
-
Gestion des messages de pulsation haute disponibilité sur une appliance Citrix ADC
-
Suppression et remplacement d'un Citrix ADC dans une configuration haute disponibilité
-
This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已动态机器翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
This content has been machine translated dynamically.
This content has been machine translated dynamically.
This content has been machine translated dynamically.
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.
Este artigo foi traduzido automaticamente.
这篇文章已经过机器翻译.放弃
Translation failed!
Opérations complexes sur le texte
En plus de la simple correspondance de chaînes, vous pouvez configurer des expressions qui examinent la longueur de chaîne et le bloc de texte pour des motifs plutôt que des chaînes spécifiques.
Soyez conscient des éléments suivants pour toute opération basée sur le texte :
- Pour toute opération qui prend un argument de chaîne, la chaîne ne peut pas dépasser 255 caractères.
- Vous pouvez inclure des espaces blancs lorsque vous spécifiez une chaîne dans une expression.
Opérations sur la longueur d’une chaîne
Les opérations suivantes extraient les chaînes par un nombre de caractères.
Opération de comptage de caractères | Description |
---|---|
<text>.TRUNCATE(<count>) |
Renvoie une chaîne après avoir tronqué la fin de la cible par le nombre de caractères dans <count> . Si la chaîne entière est plus courte que,<count> rien n’est retourné. |
<text>.TRUNCATE(<character> , <count> ) |
Renvoie une chaîne après avoir tronqué le texte après <character> par le nombre de caractères spécifié dans <count> . |
<text>.PREFIX(<character> , <count> ) |
Sélectionne le préfixe le plus long de la cible qui a au plus d’occurrences <count> de <character> . |
<text>.SUFFIX(<character> , <count> ) |
Sélectionne le suffixe le plus long de la cible ayant au plus d’occurrences <count> de <character> . Par exemple, considérez le corps de réponse suivant : JLEwX. L’expression suivante renvoie une valeur de « jlewX » : http.res.body (100) .suffixe (‘L’,1) L’expression suivante renvoie « llewX » : http.res.body (100) .suffixe (‘L’,2) |
<text>.SUBSTR(<starting_offset>, <length> ) |
Sélectionnez une chaîne avec <length> le nombre de caractères dans l’objet cible. Commencez à extraire la chaîne après le <starting_offset> . Si le nombre de caractères après le décalage est inférieur à la valeur de l’argument <length> , sélectionnez tous les caractères restants. |
<text>.SKIP(<character>, <count>) |
Sélectionnez une chaîne de la cible après avoir ignoré le préfixe le plus long ayant au plus d’occurrences <count> de <character> . |
Opérations sur une partie d’une chaîne
Reportez-vousTable des opérations de chaîneà la pour savoir comment extraire un sous-ensemble d’une chaîne plus grande à l’aide de l’une des opérations.
Opérations de comparaison de l’ordre alphanumérique de deux chaînes
L’opération COMPARER examine le premier caractère non correspondant de deux chaînes différentes. Cette opération est basée sur l’ordre lexicographique, qui est la méthode utilisée pour commander des termes dans les dictionnaires.
Cette opération renvoie la différence arithmétique entre les valeurs ASCII des premiers caractères non correspondants dans les chaînes comparées. Les différences suivantes sont des exemples :
- La différence entre « abc » et « et » est -1 (basée sur la troisième comparaison de caractères par paire).
- La différence entre « @ » et « abc » est -33.
- La différence entre « 1” et « abc » est -47.
Voici la syntaxe de l’opération COMPARER.
<text>.COMPARE(<string>)
Extraire un entier d’une chaîne d’octets représentant du texte
Reportez-vousTable d’extraction d’entiersà la pour savoir comment traiter une chaîne d’octets représentant du texte comme une séquence d’octets, extraire 8 bits, 16 bits ou 32 bits de la séquence, puis convertir les bits extraits en un entier.
Convertir le texte en une valeur de hachage
Vous pouvez convertir une chaîne de texte en une valeur de hachage à l’aide de la fonction HASH. Cette fonction renvoie un entier positif 31 bits à la suite de l’opération. Voici le format de l’expression :
<text>.HASH
Cette fonction ignore la casse et les espaces blancs. Par exemple, après l’opération, les deux chaînes Ab c et une bc produiraient la même valeur de hachage.
Encoder et décoder du texte en appliquant l’algorithme de codage Base64
Les deux fonctions suivantes encodent et décodent une chaîne de texte en appliquant l’algorithme de codage Base64
Fonction | Description |
---|---|
text.B64ENCODE | Encode la chaîne de texte (désignée par du texte) en appliquant l’algorithme de codage Base64. |
text.B64DECODE | Décode la chaîne codée Base64 (désignée par du texte) en appliquant l’algorithme de décodage Base64. L’opération déclenche un UNDEF si le texte n’est pas au format B64. |
Affiner la recherche dans une action de réécriture à l’aide de la fonction Extend
La fonction Extend est utilisée dans les actions de réécriture qui spécifient des modèles ou des jeux de motifs et ciblent les corps des paquets HTTP. Lorsqu’une correspondance de motif est trouvée, la fonction Extend étend la portée de la recherche par un nombre prédéfini d’octets des deux côtés de la chaîne correspondante. Une expression régulière peut ensuite être utilisée pour effectuer une réécriture sur les correspondances dans cette région étendue. Les actions de réécriture configurées avec la fonction EXtend effectuent des réécritures plus rapides que les actions de réécriture qui évaluent des corps HTTP entiers en utilisant uniquement des expressions régulières.
Le format de la fonction EXTEND est EXTEND (m, n), où m et n sont le nombre d’octets par lesquels la portée de la recherche est étendue avant et après le modèle correspondant, respectivement. Lorsqu’une correspondance est trouvée, la nouvelle portée de recherche comprend m octets qui précèdent immédiatement la chaîne correspondante, la chaîne elle-même et les n octets qui suivent la chaîne. Une expression régulière peut ensuite être utilisée pour effectuer une réécriture sur une partie de cette nouvelle chaîne.
La fonction EXtend ne peut être utilisée que si l’action de réécriture dans laquelle elle est utilisée remplit les conditions suivantes :
- La recherche est effectuée à l’aide de modèles ou de jeux de motifs (pas d’expressions régulières)
- L’action de réécriture évalue uniquement les corps des paquets HTTP.
En outre, la fonction Extend ne peut être utilisée qu’avec les types d’actions de réécriture suivants :
- remplace_tous
- insert_after_all
- delete_all
- insert_before_all
Par exemple, vous pouvez supprimer toutes les instances de “http://exampleurl.com/” et “http://exampleurl.au/” dans les 1000 premiers octets du corps. Pour ce faire, vous pouvez configurer une action de réécriture pour rechercher toutes les instances de la chaîne exampleurl, étendre la portée de la recherche des deux côtés de la chaîne lorsqu’une correspondance est trouvée, puis utiliser une expression régulière pour effectuer la réécriture dans la région étendue. L’exemple suivant étend la portée de la recherche de 20 octets à gauche et de 50 octets à droite de la chaîne correspondante :
add rewrite action delurl_example delete_all 'HTTP.REQ.BODY(1000)' -pattern exampleurl -refineSearch 'extend(20,50).regex_select(re#http://exampleurl.(com|au)#)'
Convertir le texte au format hexadécimal
La fonction suivante convertit le texte au format hexadécimal et extrait la chaîne résultante :
<text>.BLOB_TO_HEX(<string>)
Par exemple, cette fonction convertit la chaîne d’octets « abc » en “61:62:63 « .
Chiffrer et déchiffrer le texte
Dans les expressions syntaxiques par défaut, vous pouvez utiliser les fonctions ENCRYPT et DECRYPT pour chiffrer et déchiffrer du texte. Les données chiffrées par la fonction ENCRYPT sur une appliance Citrix ADC ou une paire haute disponibilité (HA) donnée sont destinées à être déchiffrées par la fonction DECRYPT sur la même appliance Citrix ADC ou paire HA. L’appliance prend en charge les méthodes de chiffrement RC4, DES3, AES128, AES192 et AES256. La valeur de clé requise pour le chiffrement n’est pas spécifiée par l’utilisateur. Lorsqu’une méthode de chiffrement est définie, l’appliance génère automatiquement une valeur de clé aléatoire appropriée à la méthode spécifiée. La méthode par défaut est le chiffrement AES256, qui est la méthode de chiffrement la plus sécurisée et celle recommandée par Citrix.
Vous n’avez pas besoin de configurer le chiffrement sauf si vous souhaitez modifier la méthode de chiffrement ou si vous souhaitez que l’appliance génère une nouvelle valeur de clé pour la méthode de chiffrement actuelle.
Remarque : Vous pouvez également chiffrer et déchiffrer des charges utiles XML. Pour plus d’informations sur les fonctions de chiffrement et de décryptage des charges utiles XML, reportez-vous à la section Chiffrer et déchiffrer les charges utiles XML.
Configurer le chiffrement
Au démarrage, l’appliance exécute la commande set ns EncryptionParams avec, par défaut, la méthode de chiffrement AES256 et utilise une valeur de clé générée aléatoirement appropriée pour le chiffrement AES256. L’appliance chiffre également la valeur de clé et enregistre la commande, avec la valeur de clé chiffrée, dans le fichier de configuration Citrix ADC. Par conséquent, la méthode de chiffrement AES256 est activée pour les fonctions ENCRYPT et DECRYPT par défaut. La valeur de clé enregistrée dans le fichier de configuration persiste pendant les redémarrages même si l’appliance exécute la commande chaque fois que vous la redémarrez.
Vous pouvez exécuter manuellement la commande set ns EncryptionParams ou utiliser l’utilitaire de configuration si vous souhaitez modifier la méthode de chiffrement ou si vous souhaitez que l’appliance génère une nouvelle valeur de clé pour la méthode de chiffrement actuelle. Pour utiliser l’interface de ligne de commande pour modifier la méthode de chiffrement, définissez uniquement le paramètre de méthode, comme indiqué dans “Exemple 1 : Modification de la méthode de chiffrement.” Si vous souhaitez que l’appliance génère une nouvelle valeur de clé pour la méthode de chiffrement actuelle, définissez le paramètre de méthode sur la méthode de chiffrement actuelle et le paramètre KeyValue sur une chaîne vide (« »), comme indiqué dans “Exemple 2 : Génération d’une nouvelle valeur de clé pour la méthode de chiffrement actuelle.” Après avoir généré une nouvelle valeur de clé, vous devez enregistrer la configuration. Si vous n’enregistrez pas la configuration, l’appliance utilise la nouvelle valeur de clé uniquement jusqu’au prochain redémarrage, après quoi elle revient à la valeur de clé dans la configuration enregistrée.
Configurer le chiffrement à l’aide de l’interface graphique
- Accédez à Système > Paramètres.
- Dans la zone Paramètres, cliquez sur Modifier les paramètres de chiffrement .
- Dans la boîte de dialogue Modifier les paramètres de chiffrement, effectuez l’une des opérations suivantes :
- Pour modifier la méthode de chiffrement, dans la liste Méthode, sélectionnez la méthode de chiffrement souhaitée.
- Pour générer une nouvelle valeur de clé pour la méthode de chiffrement actuelle, cliquez sur Générer une nouvelle clé pour la méthode sélectionnée.
- Cliquez sur OK.
Utiliser les fonctions ENCRYPT et DECRYPT
Vous pouvez utiliser les fonctions ENCRYPT et DECRYPT avec n’importe quel préfixe d’expression qui renvoie du texte. Par exemple, vous pouvez utiliser les fonctions ENCRYPT et DECRYPT dans les stratégies de réécriture pour le chiffrement des cookies. Dans l’exemple suivant, les actions de réécriture cryptent un cookie nommé MyCookie, qui est défini par un service back-end, et décryptent le même cookie lorsqu’il est renvoyé par un client :
add rewrite action my-cookie-encrypt-action replace "HTTP.RES.SET_COOKIE.COOKIE("MyCookie").VALUE(0)" "HTTP.RES.SET_COOKIE.COOKIE("MyCookie").VALUE(0).ENCRYPT" -bypassSafetyCheck YES
add rewrite action my-cookie-decrypt-action replace "HTTP.REQ.COOKIE.VALUE("MyCookie")" "HTTP.REQ.COOKIE.VALUE("MyCookie").DECRYPT" -bypassSafetyCheck YES
Après avoir configuré les stratégies de chiffrement et de déchiffrement, enregistrez la configuration pour appliquer les stratégies.
Configurer la clé de chiffrement pour le chiffrement tiers
Dans les expressions syntaxiques par défaut, vous pouvez utiliser les fonctions ENCRYPT et DECRYPT pour chiffrer et déchiffrer du texte dans une requête ou une réponse. Les données chiffrées par la fonction ENCRYPT sur une appliance (autonome, haute disponibilité ou cluster) doivent être déchiffrées par la fonction DECRYPT par la même appliance. L’appliance prend en charge les méthodes de chiffrement RC4, DES, Triple-DES, AES92 et AES256 et chacune de ces méthodes utilise une clé secrète pour le chiffrement et le déchiffrement des données. Vous pouvez utiliser l’une de ces méthodes pour chiffrer et déchiffrer les données de deux façons : l’auto-cryptage et le cryptage tiers.
La fonctionnalité d’auto-cryptage d’une appliance (autonome, haute disponibilité ou cluster) chiffre puis déchiffre les données en évaluant la valeur d’en-tête. Un exemple pour comprendre cela est le cryptage des cookies HTTP. L’expression évalue l’en-tête, chiffre la valeur du cookie HTTP dans l’en-tête Set-Cookie dans la réponse sortante, puis déchiffre la valeur du cookie lorsqu’elle est renvoyée dans l’en-tête du cookie d’une requête entrante ultérieure du client. La valeur de clé n’est pas configurable par l’utilisateur. Au lieu de cela, lorsqu’une méthode de chiffrement est configurée dans la commande set ns EncryptionParams, l’appliance génère automatiquement une valeur de clé aléatoire pour la méthode configurée. Par défaut, la commande utilise la méthode de chiffrement AES256, qui est la méthode hautement sécurisée, et Citrix recommande cette méthode.
La fonctionnalité de chiffrement tiers crypte ou déchiffre les données avec une application tierce. Par exemple, un client peut chiffrer des données dans une requête et l’appliance les déchiffre avant de les envoyer au serveur principal ou vice versa. Pour ce faire, l’appliance et l’application tierce doivent partager une clé secrète. Sur l’appliance, vous pouvez configurer directement la clé secrète à l’aide d’un objet clé de chiffrement et la valeur de clé est automatiquement générée par l’appliance pour un chiffrement plus solide. La même clé est configurée manuellement sur l’appliance tierce afin que l’appliance et l’application tierce puissent utiliser la même clé pour le chiffrement et le déchiffrement des données.
Remarque : En utilisant le cryptage tiers, vous pouvez également chiffrer et déchiffrer des charges utiles XML. Pour plus d’informations sur les fonctions de cryptage et de décryptage des charges utiles XML, reportez-vous à « Chiffrement et décryptage des charges utiles XML.
Méthodes de chiffrement
Une méthode de chiffrement fournit deux fonctions : une fonction de chiffrement qui transforme une séquence d’octets de texte brut en séquence d’octets de texte chiffré, et une fonction de déchiffrement qui transforme le texte chiffré en texte brut. Les méthodes de chiffrement utilisent des séquences d’octets appelées clés pour effectuer le chiffrement et le déchiffrement. Les méthodes de chiffrement qui utilisent la même clé pour le chiffrement et le déchiffrement sont appelées symétriques. Les méthodes de chiffrement qui utilisent différentes clés pour le chiffrement et le déchiffrement sont asymétriques. Les exemples les plus notables de chiffrement asymétriques sont la cryptographie à clé publique, qui utilise une clé publique accessible à tous pour le chiffrement et une clé privée connue uniquement du décrypteur.
Une bonne méthode de chiffrement rend impossible de déchiffrer (« crack ») le texte chiffré si vous ne possédez pas la clé. « Irréalisable » signifie vraiment que craquer le cyphertext prendrait plus de temps et de ressources informatiques que cela ne vaut la peine. À mesure que les ordinateurs deviennent plus puissants et moins chers, les chiffrements qui étaient auparavant impossibles à craquer deviennent plus réalisables. En outre, au fil du temps, des défauts sont trouvés dans les méthodes de chiffrement (ou leurs implémentations), rendant la fissuration plus facile. Les méthodes de chiffrement les plus récentes sont donc préférées aux méthodes plus anciennes. En général, les clés de longueur plus longue offrent une meilleure sécurité que les clés plus courtes, au prix de temps de chiffrement et de décryptage plus longs.
Une méthode de chiffrement peut utiliser des chiffrements de flux ou des chiffrements de blocs. RC4 est le chiffrement de flux principalement sécurisé et il est utilisé uniquement pour les applications héritées. Les chiffrements par blocs peuvent inclure un rembourrage.
Chiffrements de flux
Une méthode de chiffrement de flux fonctionne sur des octets individuels. Un seul chiffrement de flux est disponible sur les appliances Citrix ADC- : RC4, qui utilise une longueur de clé de 128 bits (16 octets). Pour une clé donnée, RC4 génère une séquence pseudo-aléatoire d’octets, appelez un flux de clés, qui est X-ored avec le texte brut pour produire le texte chiffré. Le RC4 n’est plus considéré comme sécurisé et ne doit être utilisé que si les applications existantes l’exigent.
Ciphers par blocs
Une méthode de chiffrement par blocs fonctionne sur un bloc fixe d’octets. Une appliance Citrix ADC fournit deux chiffrements par blocs : Data Encryption Standard (DES) et Advanced Encryption Standard (AES). DES utilise une taille de bloc de 8 octets et (sur une appliance Citrix ADC) deux choix pour la longueur de clé : 64 bits (8 octets), dont 56 bits sont des données et 8 bits sont la parité, et Triple-DES, une longueur de clé de 192 bits (24 octets). AES a une taille de bloc de 16 octets et (sur Citrix ADC) trois choix pour la longueur de clé : 128 bits (16 octets), 192 bits (24 octets) et 256 bits (32 octets).
Rembourrage
Si le texte brut d’un chiffrement de blocs n’est pas un nombre intégral de blocs, un remplissage avec plus d’octets peut être nécessaire. Par exemple, supposons que le texte brut est « xyzzy » (hex 78797a7a79). Pour un bloc Triple-DES de 8 octets, cette valeur devrait être complétée pour créer 8 octets. Le schéma de remplissage doit permettre à la fonction de déchiffrement de déterminer la longueur du texte brut original après le décryptage. Voici quelques schémas de remplissage actuellement en cours d’utilisation (n est le nombre d’octets ajoutés) :
- PKCS7 : Ajoute n octets de valeur n chacun. Par exemple, 78797a7a79030303. Il s’agit du schéma de remplissage utilisé par OpenSSL et ENCRYPT () fonction de stratégie. Le schéma de remplissage PKCS5 est le même que PKCS7.
- ANSI X.923 : Ajoute n-1 zéro octets et un octet final de valeur n. Par exemple, 78797a7a79000003.
- ISO 10126 : Ajoute n-1 octets aléatoires et un octet final de valeur n. Par exemple, 78797a7a79xxxx03, où xx peut être n’importe quelle valeur d’octet. La fonction de stratégie DECRYPT () accepte ce schéma de remplissage, ce qui lui permet également d’accepter les schémas PKCS7 et ANSI X.923.
- ISO/IEC 7816-4 : Ajoute un octet 0x80 et n-1 zéro octets. Par exemple, 78797a7a79800000. Ceci est également appelé rembourrage OneAndZeros.
- Zéro : Ajoute n zéro octets. Exemple : 78797a7a79000000. Cela ne peut être utilisé qu’avec du texte brut qui n’inclut pas les octets NUL.
Si le remplissage est utilisé et que le texte brut est un nombre intégral de blocs, un bloc supplémentaire est généralement ajouté afin que la fonction de déchiffrement puisse déterminer sans ambiguïté la longueur du texte brut d’origine. Pour PCKS7 et bloc 8 octets, ce serait 0808080808080808.
Modes de fonctionnement
Il existe un certain nombre de modes de fonctionnement différents pour les chiffrements par blocs, qui spécifient comment plusieurs blocs de texte brut sont chiffrés. Certains modes utilisent un vecteur d’initialisation (IV), un bloc de données mis à part le texte brut utilisé pour démarrer le processus de chiffrement. Il est recommandé d’utiliser un IV différent pour chaque cryptage, de sorte que le même texte brut produise un texte chiffré différent. Le IV n’a pas besoin d’être secret, et il est donc préfixé au chiffrement. Les modes comprennent :
- Livre électronique de codes (ECB) : chaque bloc de texte brut est crypté indépendamment. Un IV n’est pas utilisé. Un remplissage est requis si le texte brut n’est pas un multiple de la taille du bloc de chiffrement. Le même texte brut et la même clé produisent toujours le même texte chiffré. Pour cette raison, ECB est considéré comme moins sûre que les autres modes et ne devrait être utilisé que pour les applications héritées.
- Cipher Block Chaining (CBC) : Chaque bloc de texte brut est rendu OU exclusif avec le bloc de texte chiffré précédent, ou l’IV pour le premier bloc, avant d’être chiffré. Un remplissage est requis si le texte brut n’est pas un multiple de la taille du bloc de chiffrement. Il s’agit du mode utilisé avec la méthode Citrix ADC EncryptionParams.
- Cipher Feedback (CFB) : Le bloc de texte chiffré précédent, ou IV pour le premier bloc, est crypté et la sortie est rendu OU exclusif avec le bloc de texte brut courant pour créer le bloc de texte chiffré courant. La rétroaction peut être de 1 bit, 8 bits ou 128 bits. Puisque le texte brut est rendu OU exclusif avec le texte de chiffrement, le remplissage n’est pas requis.
- Feedback (OFB) : Un flux de clés est généré en appliquant successivement le chiffrement au IV et xOring les blocs de flux de clés avec le texte brut. Le rembourrage n’est pas nécessaire.
Configurer les clés de chiffrement pour le chiffrement tiers
Voici les tâches de configuration effectuées dans la configuration de la clé de chiffrement.
- Ajout d’une clé de chiffrement. Configure une clé de chiffrement pour une méthode de chiffrement spécifiée avec une valeur de clé spécifiée.
- Modification d’une clé de chiffrement. Vous pouvez modifier les paramètres d’une clé de chiffrement configurée.
- Désinstallation d’une clé de chiffrement. Définit les paramètres d’une clé de chiffrement configurée sur leurs valeurs par défaut. Une valeur EncryptionKey portant le nom doit exister. Définit le remplissage sur DEFAULT (déterminé par la méthode), supprime un IV existant, ce qui provoque ENCRYPT () à générer un IV aléatoire. Supprime un commentaire existant. La méthode et la valeur de clé ne peuvent pas être réinitialisées.
- Suppression d’une clé de chiffrement. Supprime une clé de chiffrement configurée. La clé ne peut pas avoir de références.
- Afficher une clé de chiffrement. Affiche les paramètres de la clé de chiffrement configurée ou de toutes les clés configurées. Si le nom est omis, la valeur de clé n’est pas affichée.
Ajouter une clé de chiffrement à l’aide de l’interface de ligne de commande
À l’invite de commandes, tapez :
add ns encryptionKey <name> -method <method> [-keyValue <keyvalue>][-padding (OFF | ON)] [-iv <hexstring>] -keyValue <keyvalue> [-comment <string>]
Où,
<method> = ( NONE | RC4 | DES3 | AES128 | AES192 | AES256 | DES | DES-CBC | DES-CFB | DES-OFB | DES-ECB | DES3-CBC | DES3-CFB | DES3-OFB | DES3-ECB | AES128-CBC | AES128-CFB | AES128-OFB | AES128-ECB | AES192-CBC | AES192-CFB | AES192-OFB | AES192-ECB | AES256-CBC | AES256-CFB | AES256-OFB | AES256-ECB ) <hexstring> = hex-encoded byte sequence
Les méthodes de chiffrement ci-dessus spécifient le mode de fonctionnement avec CBC comme mode de fonctionnement par défaut. Par conséquent, les méthodes DES, DES2, AES128, AES192 et AES256 sont équivalentes aux méthodes DES-CBC, DES3-CBC, AES128-CBC, AES192-CBC et AES256-CBC.
Modifier une clé de chiffrement à l’aide de l’interface de ligne de commande
À l’invite de commandes, tapez :
set ns encryptionKey <name> [-method <method>] [-keyValue <keyvalue>] [-padding ( OFF | ON )] [-iv <string>] [-comment <string>]
Désactiver une clé de chiffrement à l’aide de l’interface de ligne de commande
À l’invite de commandes, tapez :
unset ns encryptionKey <name> [-padding] [-iv] [-comment]
Supprimer une clé de chiffrement à l’aide de l’interface de ligne de commande
À l’invite de commandes, tapez :
rm ns encryptionKey <name>
Afficher une clé de chiffrement à l’aide de l’interface de ligne de commande
À l’invite de commandes, tapez :
Exemple :
show ns encryptionKey [<name>]
add ns encryptionKey my_key -method aes256 -keyValue 26ea5537b7e0746089476e5658f9327c0b10c3b4778c673a5b38cee182874711 –iv c2bf0b2e15c15004d6b14bcdc7e5e365
set ns encryptionKey my_key -keyValue b8742b163abcf62d639837bbee3cef9fb5842d82d00dfe6548831d2bd1d93476
unset ns encryptionKey my_key -iv
rm ns encryptionKey my_key
show ns encryptionKey my_key
Name: my_key
Method: AES256
Padding: DEFAULT
Key Value: (not disclosed)
Ajouter une clé de chiffrement à l’aide de l’interface graphique
Accédez à Système > Clés de chiffrement et cliquez sur Ajouter pour créer une clé de chiffrement.
Modifier une clé de chiffrement à l’aide de l’interface graphique
Accédez à Système > Clés de chiffrement et cliquez sur Modifier pour modifier les paramètres d’une clé de chiffrement configurée.
Supprimer une clé de chiffrement à l’aide de l’interface graphique
Accédez à Système > Clés de chiffrement et cliquez sur Supprimer .
Fonctions ENCRYPT et DECRYPT pour le cryptage tiers
Voici la fonction ENCRYPT utilisée pour le cryptage tiers.
ENCRYPT (encryptionKey, out_encoding)
Où,
Les données d’entrée de l’appliance sont le texte à chiffrer
EncryptionKey : paramètre de chaîne facultatif qui spécifie l’objet clé de chiffrement configuré pour fournir la méthode de chiffrement, la valeur de clé secrète et d’autres paramètres de chiffrement. Si elle est omise, la méthode utilise la valeur de clé générée automatiquement associée à la commande set ns EncryptionParams.
out_encoding : Cette valeur spécifie comment la sortie est codée. En cas d’omission, l’encodage BASE64 est utilisé.
Entrée :
BASE64: original PEM base64-encoding: 6 bits (0..63) encoded as one ASCII character:
0..23 = 'A'..'Z', 24..51 = 'a'..'z', 52..61 = '0'..'9', 62 = '+', 63 = '/', '=' = pad byte.
BASE64URL: URL and Filename safe base64-encoding: same as BASE64 except 62 = '-', 63 = '_'
HEX_UPPER: Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'A'..'F'.
HEX_LOWER: Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'a'..'f'.
HEX_COLONS: Hexadecimal with 0..9 = '0'..'9' and 10..15 = 'A'..'F'; ':' between each hex byte. Matches BLOB_TO_HEX() output format
HEX: For input, accepts HEX_UPPER, HEX_LOWER, and HEX_COLONS format. For output, produces HEX_LOWER format
Sortie : La sortie est un texte chiffré à l’aide de la méthode et de la clé spécifiées et encodé à l’aide d’un encodage de sortie spécifié. Il insère un IV généré avant le texte chiffré pour les méthodes et les modes de bloc qui nécessitent un IV, et soit aucun IV n’est spécifié pour EncryptionKey, soit l’EncryptionKey est omis.
Voici la fonction DECRYPT utilisée pour le décryptage de la troisième partie.
DECRYPT(encryptionKey, in_encoding)
Où,
Les données d’entrée sont un texte chiffré utilisant la méthode spécifiée et la clé codée à l’aide de l’encodage d’entrée spécifié. Ce texte devrait inclure un IV généré avant le texte chiffré pour les méthodes et les modes de bloc qui nécessitent un IV, et aucun IV n’est spécifié pour EncryptionKey ou l’EncryptionKey est omis.
EncryptionKey—Paramètre de chaîne facultatif qui spécifie l’objet EncryptionKey configuré pour fournir la méthode de chiffrement, la clé secrète et d’autres paramètres de chiffrement. Si cette option est omise, la méthode et la clé générée automatiquement associée au paramètre EncryptionParams seront utilisées
in_encodage : paramètre d’énumération facultatif qui spécifie comment l’entrée doit être codée. Les valeurs sont les mêmes que le out_encoding de ENCRYPT. S’il est omis, l’encodage BASE64 sera attendu.
Les données de sortie sont un texte déchiffré non encodé.
Variantes et paramètres facultatifs
Voici les variantes de ces fonctions avec les paramètres optionnels :
Variante | Description |
---|---|
ENCRYPT | Utilisez la commande EncryptionParams et le paramètre de codage de sortie BASE64. |
ENCRYPT (out_encoding) | Utilisez EncryptionParams et le paramètre de codage de sortie spécifié. |
ENCRYPT (EncryptionKey) | Utilisez le paramètre de codage de sortie EncryptionKey et BASE64 spécifiés. |
ENCRYPT (EncryptionKey, out_encoding) | Utilisez le paramètre EncryptionKey et de codage de sortie spécifiés. |
DECRYPT | Utilisez la commande EncryptionParams et le paramètre d’encodage d’entrée BASE64. |
DECRYPT (out_encoding) | Utilisez la commande EncryptionParams et le paramètre d’encodage d’entrée spécifié. |
DECRYPT (EncryptionKey) | Utilisez le paramètre d’encodage d’entrée EncryptionKey et BASE64 spécifiés. |
DECRYPT (EncryptionKey, out_encoding) | Utilisez le paramètre EncryptionKey et d’encodage d’entrée spécifiés. |
Configurer les clés HMAC
Les appliances Citrix ADC prennent en charge une fonction HMAC (Hashed Message Authentication Code) qui calcule une méthode de résumé ou un hachage de texte d’entrée à l’aide d’une clé secrète partagée entre un expéditeur et un récepteur de message. La méthode de résumé (dérivée d’une technique RFC 2104) authentifie l’expéditeur et vérifie que le contenu du message n’a pas été modifié. Par exemple, lorsqu’un client envoie un message avec la clé HMAC partagée à une appliance Citrix ADC, les expressions de stratégie avancées (PI) utilisent la fonction HMAC pour calculer le code basé sur le hachage sur le texte sélectionné. Ensuite, lorsque le récepteur reçoit le message avec la clé secrète, il recalcule le HMAC en le comparant avec le HMAC d’origine pour déterminer si le message a été modifié. La fonction HMAC est prise en charge par des appliances autonomes et par des appliances dans une configuration haute disponibilité ou dans un cluster. L’utiliser est similaire à la configuration d’une clé de chiffrement.
Les commandes add ns hmackey et set ns hmackey incluent un paramètre qui spécifie la méthode digest et la clé secrète partagée à utiliser pour le calcul HMAC.
Pour configurer une clé HMAC, vous devez effectuer les opérations suivantes :
- Ajout d’une clé HMAC. Configure une clé HMAC avec une valeur de clé spécifiée.
- Modification d’une clé HMAC. Modifie les paramètres d’une clé HMAC configurée. La méthode de résumé peut être modifiée sans changer la valeur de clé, car la longueur de la valeur de clé n’est pas déterminée par le résumé. Cependant, il est conseillé de spécifier une nouvelle clé lors du changement du résumé.
- Désinstallation d’une clé HMAC. Définit les paramètres d’une clé HMAC configurée sur leurs valeurs par défaut. Un objet HMacKey portant le nom doit exister. Le seul paramètre qui peut être désactivé est le commentaire, qui est supprimé.
- Suppression d’une clé HMAC. Supprime une clé configurée. La clé ne peut pas avoir de références.
- Afficher une clé HMAC. Affiche les paramètres de la clé AC HMAC configurée ou de toutes les clés configurées. Si le nom est omis, la valeur de clé n’est pas affichée.
Configurer une clé HMAC unique et aléatoire
Vous pouvez générer automatiquement une clé HMAC unique. Si votre appliance est une configuration de cluster, la clé HMAC est générée au début du processus et distribuée à tous les nœuds et moteurs de paquets. Cela garantit que la clé HMAC est identique pour tous les moteurs de paquets et tous les nœuds du cluster.
À l’invite de commandes, tapez :
add ns hmacKey <your_key> -digest <digest> -keyValue <keyvalue>
Exemple :
add ns hmacKey <name> -digest sha1 -keyValue AUTO
Où,
- La syntaxe du nom est correcte et ne duplique pas le nom d’une clé existante.
- La valeur KeyValue « AUTO » peut être utilisée dans les commandes set pour générer de nouvelles clés pour les objets EncrytionKey et HMacKey existants.
Remarque :
La génération automatique de clés est utile si l’appliance Citrix ADC crypte et décrypte des données avec la clé, ou génère et vérifie une clé HMAC. Étant donné que la valeur de clé elle-même est déjà chiffrée lorsqu’elle est affichée, vous ne pouvez pas récupérer la valeur de clé générée pour une utilisation par une autre partie.
Exemple :
add ns hmacKey my_hmac_key -digest sha1 -keyValue 0c753c6c5ef859189cacdf95b506d02c1797407d
Les méthodes de chiffrement ci-dessus spécifient le mode de fonctionnement avec CBC comme mode de fonctionnement par défaut. Par conséquent, les méthodes DES, DES2, AES128, AES192 et AES256 sont équivalentes aux méthodes DES-CBC, DES3-CBC, AES128-CBC, AES192-CBC et AES256-CBC.
Modifier une clé HMAC à l’aide de l’interface de ligne de commande
Cette commande modifie les paramètres configurés pour une clé HMAC. Vous pouvez modifier le résumé sans changer la valeur de la clé, car la longueur de la valeur de la clé n’est pas déterminée par le résumé. Cependant, il est conseillé de spécifier une nouvelle clé lors du changement du résumé. À l’invite de commandes, tapez :
set ns hmacKey <name> [-digst <digest>] [-keyValue <keyvalue>]
[-comment <string>]
Désinstaller une clé HMAC à l’aide de l’interface de ligne de commande
Cette commande définit les paramètres configurés pour une clé HMAC avec leurs valeurs par défaut. Un objet HMacKey portant le nom doit exister. Le seul paramètre que vous pouvez annuler est l’option commentaire, qui est supprimée. À l’invite de commandes, tapez :
unset ns hmacKey <name> -comment
Supprimer une clé HMAC à l’aide de l’interface de ligne de commande
Cette commande supprime la clé hmac configurée. La clé ne peut pas avoir de références. À l’invite de commandes, tapez :
rm ns hmacKey <name>
Afficher une clé HMAC à l’aide de l’interface de ligne de commande
À l’invite de commandes, tapez :
show ns encryptionKey [<name>]
add ns hmacKey my_hmac_key -digest sha1 -keyValue 0c753c6c5ef859189cacdf95b506d02c1797407d
set ns hmacKey my_hmac_key -keyValue f348c594341a840a1f641a1cf24aa24c15eb1317
rm ns hmacKey my_hmac_key
show ns hmacKey my_hmac_key
Name: my_hmac_key
Digest: SHA1
Key Value: (not disclosed)
Partager
Partager
Dans cet article
- Opérations sur la longueur d’une chaîne
- Opérations sur une partie d’une chaîne
- Opérations de comparaison de l’ordre alphanumérique de deux chaînes
- Extraire un entier d’une chaîne d’octets représentant du texte
- Convertir le texte en une valeur de hachage
- Encoder et décoder du texte en appliquant l’algorithme de codage Base64
- Affiner la recherche dans une action de réécriture à l’aide de la fonction Extend
- Convertir le texte au format hexadécimal
- Chiffrer et déchiffrer le texte
- Configurer la clé de chiffrement pour le chiffrement tiers
- Configurer les clés HMAC
- Afficher une clé HMAC à l’aide de l’interface de ligne de commande
This Preview product documentation is Citrix Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Citrix Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Citrix product purchase decisions.
If you do not agree, select Do Not Agree to exit.