Epinglage de certificat

Utilisez l'épinglage de certificat pour empêcher toute attaque de type man-in-the-middle.

Lorsque vous communiquez sur des réseaux publics, il est essentiel d'envoyer et de recevoir les informations de façon sécurisée. Le protocole largement utilisé pour sécuriser ces communications est SSL/TLS. (SSL/TLS fait référence à Secure Sockets Layer ou à son successeur, TLS, ou Transport Layer Security.) SSL/TLS utilise des certificats numériques pour assurer l'authentification et le chiffrement. Pour garantir qu'un certificat est authentique et valide, il est signé numériquement par un certificat racine appartenant à une autorité de certification de confiance. Les systèmes d'exploitation et les navigateurs gèrent des listes de certificats racine d'autorité de certification de confiance pour pouvoir facilement déterminer quels sont les certificats émis et signés par les autorités de certification.

Les protocoles qui s'appuient sur la vérification de la chaîne de certificats, comme SSL/TLS, sont vulnérables à plusieurs attaques dangereuses, notamment les attaques de type man-in-the-middle, qui surviennent lorsqu'une partie prenante autorisée peut afficher et modifier l'intégralité du trafic transmis entre le terminal mobile et les systèmes de back end.

IBM MobileFirst Platform Foundation fournit une API permettant d'épingler les certificats. Elle est prise en charge dans les applications iOS natives, les applications Android natives et les applications MobileFirst Cordova multiplateformes.

Processus d'épinglage de certificat

L'épinglage de certificat est le processus d'association d'un hôte à sa clé publique prévue. Etant donné vous possédez le code côté serveur et le code côté client, vous pouvez configurer votre code client pour qu'il n'accepte qu'un certificat spécifique pour votre nom de domaine, au lieu de tous les certificats correspondant à un certificat racine d'autorité de certification de confiance reconnus par le système d'exploitation ou le navigateur.
Une copie du certificat est placée dans votre application client. Au cours de l'établissement de liaison SSL (première demande envoyée au serveur), le logiciel SDK du client IBM MobileFirst Platform Foundation vérifie que la clé publique du certificat serveur correspond à la clé publique du certificat qui est stocké dans l'application.
Important :
  • Certains systèmes d'exploitation mobiles peuvent mettre en cache le résultat du contrôle de validation de certificat. Par conséquent, votre code doit appeler l'API d'épinglage de certificat avant l'envoi d'une demande sécurisée. Sinon, toutes les demandes suivantes risquent d'ignorer le contrôle de validation de certificat et d'épinglage.
  • Si vous appelez cette méthode une deuxième fois, l'opération d'épinglage précédente est remplacée.

Si l'épinglage aboutit, la clé publique qui se trouve dans le certificat fourni est utilisée pour vérifier l'intégrité du certificat de MobileFirst Server au cours de l'établissement de liaison SSL/TLS pour la demande sécurisée. S'il échoue, toutes les demandes SSL/TLS envoyées au serveur sont rejetées par l'application client.

Configuration du certificat

Vous devez utiliser un certificat acheté auprès d'une autorité de certification. Les certificats autosignés ne sont pas pris en charge. En vue de la compatibilité avec les environnements pris en charge, veillez à utiliser un certificat codé au format DER (Fichier de règles de codage distinctif, comme défini dans la norme International Telecommunications Union X.690).

Vous devez placer le certificat sur le serveur MobileFirst Server et dans votre application. Placez le certificat comme suit :

  1. Sur le serveur MobileFirst Server : (WebSphere Application Server, WebSphere Application Server Liberty ou Apache Tomcat). Consultez la documentation de votre serveur d'applications spécifique pour des informations sur la configuration de SSL/TLS et des certificats.
  2. Dans votre application :
    • iOS native : ajoutez le certificat au bundle d'applications
    • Android native : placez le certificat dans le dossier assets
    • Multiplateforme (Cordova) : placez le certificat dans le dossier nom_app\www\certificates

API d'épinglage de certificat

L'épinglage de certificat est une méthode d'API unique qui possède un paramètre nom_fichier_certificat, où nom_fichier_certificat est le nom du fichier certificat.

Application Android native
Android
Syntaxe :
public void pinTrustedCertificatePublicKey(String
nom_fichier_certificat) throws
IllegalArgumentException
Exemple :
WLClient.getInstance().pinTrustedCertificatePublicKey("monCertificat.cer");
La méthode d'épinglage de certificat émet une exception dans deux cas :
  • Le fichier n'existe pas
  • Le format du fichier n'est pas correct
Application iOS native
iOS
Syntaxe :
pinTrustedCertificatePublicKeyFromFile:(NSString*)
nom_fichier_certificat; 
Exemple :
[[WLClient sharedInstance]pinTrustedCertificatePublicKeyFromFile:@"monCertificat.cer"]; 
La méthode d'épinglage de certificat émet une exception dans deux cas :
  • Le fichier n'existe pas
  • Le format du fichier n'est pas correct
Application multiplateforme (Cordova)
iOS
Android
Syntaxe :
WL.Client.pinTrustedCertificatePublicKey('nom_fichier_certificat').then(onSuccess,onFailure)
La méthode d'épinglage de certificat renvoie une promesse :
  • La méthode d'épinglage de certificat appelle la méthode onSuccess si l'épinglage aboutit.
  • La méthode d'épinglage de certificat déclenche le rappel onFailure dans deux cas :
    • Le fichier n'existe pas
    • Le format du fichier n'est pas correct
Exemple :
WL.Client.pinTrustedCertificatePublicKey('monCertificat.cer').then(onSuccess,onFailure)

Ultérieurement, si une demande sécurisée est envoyée à un serveur dont le certificat n'est pas épinglé, le rappel onFailure de la demande spécifique (par exemple WL.Client.connect ou WLResourceRequest) est appelé.

Pour plus de détails sur l'API d'épinglage de certificat, voir les sections de référence suivantes :