Valeurs SSL par défaut dans Liberty
Elles spécifient la configuration, le magasin de clés et le certificat SSL par défaut dans Liberty.
Certificat et magasin de clés par défaut
Les développeurs peuvent utiliser le paramètre createSSLCertificate dans la commande securityUtility pour créer des certificats auto-signés. Les utilisateurs peuvent appeler l'outil directement depuis la ligne de commande ou permettre au serveur de l'appeler afin de créer le certificat et le magasin de clés par défaut au démarrage du serveur.
<keyStore id="defaultKeyStore" password="yourPassword" />
Si une configuration du magasin de clés est en place pour defaultKeyStore et si le magasin de clés n'existe pas au démarrage du serveur, le serveur appelle le paramètre createSSLCertificate. Ce paramètre crée le magasin de clés avec un mot de passe spécifié dans la configuration.
- Emplacement : Le fichier du magasin de clés est appelé key.jks et il se trouve dans le répertoire resources/security du serveur ou des clients.
- Type de magasin de clés : Le type de magasin de clés est JKS.
- Mot de passe : Mot de passe qui est fourni dans la configuration.
- Type : Le certificat est un certificat autosigné.
- Taille : La taille de certificat par défaut est 2048.
- Algorithme de signature : L'algorithme de signature pour le certificat est SHA256WITHRSA.
- Validité : Le certificat est valide pendant 365 jours.
- SubjectDN : Le certificat est créé avec CN=<hostname>,OU=<client or server name>,O=ibm,C=US as the SubjectDN.
Le paramètre createSSLCertificate peut être appelé sur la ligne de commande si les utilisateurs souhaitent personnaliser le certificat.
Configuration SSL par défaut
La configuration minimale nécessaire pour SSL est un élément de magasin de clés unique appelé defaultKeyStore. Lorsque defaultKeyStore existe dans la configuration, l'environnement d'exécution crée autour une configuration SSL appelée defaultSSLConfig.
Détails de defaultSSLConfig :
- Protocole : lorsque le JRE IBM® est utilisé, le protocole est défini par défaut sur SSL_TLSv2. Si le JRE Oracle est utilisé, le protocole SSL est utilisé.
- Chiffrements : la liste des chiffrements est créée par l'extraction d'une liste des chiffrements pris en charge depuis l'environnement d'exécution Java sous-jacent. Par défaut, la liste est réduite à tous les chiffrements d'au moins 128 bits ou 3DES. RC4 est retiré car son activation n'est pas considérée comme sûre. Les chiffrements ECDHE sont retirés car ils peuvent causer des erreurs si vous utilisez un serveur qui ne les prend pas en charge. La liste des chiffrements peut être personnalisée pour les inclure.
- Authentification de client : par défaut, clientAuthentication et clientAuthenticationSupported sont désactivés.
- Magasin de clés : dans la configuration par défaut, defaultKeyStore est utilisé à la fois comme magasin de clés et comme magasin de clés de confiance.
Un élément SSL appelé defaultSSLConfig peut être entré dans le fichier server.xml pour la personnalisation des propriétés de configuration SSL. Un élément ssl personnalisé appelé defaultSSLConfig continue d'être traité comme la configuration SSL par défaut tant qu'une configuration SSL différente n'est pas identifiée comme la valeur par défaut. Pour plus d'informations, voir Attributs de configuration SSL.
<sslDefault sslRef="customSSLConfiguration" />
(transportSecurity-1.0) et (ssl-1.0) sont des comportements de traitement de sécurité. Le comportement transportSecurity-1.0 remplace le comportement ssl-1.0 dans le groupe de correctifs 17.0.0.1 et dans les versions ultérieures. Utilisez le comportement transportSecurity-1.0 afin d'employer des options SSL pour la connexion sortante. Si votre configuration de sécurité n'inclut pas les options de la connexion sortante, vous pouvez continuer à utiliser le comportement ssl-1.0.
- Comportement (transportSecurity-1.0)
Lorsque vous activez la fonction transportSecurity-1.0, les options SSL sortantes deviennent disponibles. Vous pouvez définir une valeur par défaut sortante avec l'attribut outboundSSLRef sur l'élément sslDefault ou définir le filtre SSL sur la configuration SSL pour permettre des connexions sortantes dynamiques. Le filtre est constitué d'un hôte ou d'une combinaison hôte/port. Selon l'hôte et le port de la connexion sortante, celle-ci peut correspondre à la configuration SSL.
Le code d'exécution SSL ne définit pas la valeur par défaut du processus SSLContext lorsque vous activez la fonction transportSecurity-1.0. Le code d'exécution SSL définit une classe SSLSocketFactory personnalisée avec la propriété de sécurité Java™ ssl.SocketFactory.provider. La valeur par défaut du processus SSLContext est la valeur par défaut Java Secure Socket Extension (JSSE) SSLContext qui utilise le fichier cacerts pour la clé et l'approbation.
Le programme renvoie la fabrique de sockets SSL personnalisée Liberty à n'importe quel code qui tente d'obtenir la valeur par défaut de la classe SSLSocketFactory avec la propriété javax.net.ssl.SSLSocketFactory.getDefault(). La classe SSLSocketFactory personnalisée peut résoudre la configuration SSL appropriée pour la connexion sortante.
Les fonctions offertes par Liberty utilisent les configurations SSL de Liberty. Toutefois, il peut s'avérer nécessaire de configurer les API tierces qui émettent des appels SSL sortants afin de leur permettre d'utiliser les capacités Liberty. Le code d'exécution SSL Liberty ne définit pas la valeur par défaut du processus SSLContext lorsque vous activez la fonction transportSecurity-1.0 ou ssl-1.0. Les API tierces qui reposent sur le contexte SSL par défaut ne bénéficient pas de la configuration SSL Liberty. Lorsque la fonction transportSecurity-1.0 est activée, le code d'exécution SSL de Liberty définit une classe SSLSocketFactory personnalisée avec la propriété de sécurité Java ssl.SocketFactory.provider. Les API tierces peuvent bénéficier de la configuration SSL Liberty avec la valeur par défaut de SocketFactory en appelant la propriété javax.net.ssl.SSLSocketFactory.getDefault().Remarque : La classe SSLSocketFactory personnalisée pour Liberty n'accuse pas réception des propriétés système Java, telles que javax.net.ssl.keystore.- Comportement (ssl-1.0)
Les attributs de la configuration SSL par défaut Liberty sont utilisés pour créer un élément SSLContext. Cet élément SSLContext est défini dans le processus comme SSLContext par défaut via l'API Java SSLContext.setDefault(). Si une application appelle une API telle que httpURLConnection() avec une URL https et ne fournit aucune information SSL, l'application sélectionne l'élément SSLContext par défaut du processus. Dans ce cas, il s'agit de l'élément SSLContext qui est créé avec la configuration SSL par défaut de Liberty.
Liberty utilise l'élément SSLContext par défaut de JSSE si une configuration SSL par défaut n'est pas définie dans Liberty. L'élément SSLContext par défaut de JSSE utilise le fichier cacerts pour le magasin de clés et le magasin de clés de confiance. Liberty n'a pas de configuration SSL par défaut si la fonction SSL n'est pas définie ou si la configuration SSL qui existe n'est pas identifiée comme la configuration par défaut. La configuration par défaut est appelée defaultSSLConfig, et peut être implicite si un defaultKeyStore est défini ou une configuration SSL alternative peut être conçue à l'aide de l'élément sslDefault.
Les propriétés système javax, javax.net.ssl.keystore, sont utilisées pour configurer les informations concernant le magasin de clés et le magasin de clés de confiance pour le contexte SSL par défaut et elles ne doivent pas être utilisées. Si ces propriétés sont définies sur le processus, l'appel de SSLContext.setDefault() les efface.
Pour permettre à un élément SSL d'être utilisé par défaut pour les connexions SSL sortantes, vous pouvez utiliser l'attribut outboundSSLRef sur l'élément sslDefault.
Pour spécifier un élément SSL sortant par défaut, la fonction transportSecurity-1.0 doit être activée. Lorsque outboundSSLRef est spécifié, les connexions SSL sortantes adoptent par défaut la configuration SSL spécifiée par cet attribut. Si la fonction transportSecurity-1.0 est manquante, l'attribut outboundSSLRef est ignoré. Si aucun attribut outboundSSLRef n'est spécifié, l'appel sortant utilise la valeur spécifiée par l'attribut sslRef ou defaultSSLConfig si sslRef ne référence pas une configuration SSL.<feature>transportSecurity-1.0</feature> <sslDefault sslRef="mySSLConfig" outboundSSLRef="customSSLConfiguration" />