Comment puis-je résoudre les problèmes liés à la chaîne de certificats et aux certificats auto-signés pour Amazon API Gateway lorsque les domaines personnalisés et le protocole TLS mutuel sont activés ?

Dernière mise à jour: 11-01-2022

J'utilise l'authentification mutuelle TLS (Transport Layer Security) avec Amazon API Gateway avec un nom de domaine personnalisé. Je reçois des erreurs de chaîne de certificats ou de certificats auto-signés. Comment puis-je résoudre ce problème ?

Brève description

Solution

Pour obtenir la liste des messages d'erreur spécifiques lorsque vous appelez votre API Amazon API Gateway, exécutez une commande curl similaire à la suivante :

$ curl -v https://mtls.example.info/test-apigw-mtls --key self-signed.key --cert self-signed.pem:"example"

Erreurs du client

« curl : (58) Impossible de charger le certificat client PEM, erreur OpenSSL : erreur : 02001002:bibliothèque système:Fopen : aucun fichier ou répertoire de ce type, (aucune clé trouvée, phrase secrète incorrecte ou format de fichier incorrect ? »

Cette erreur signifie que le nom, l'emplacement ou le format de fichier du fichier PEM sont incorrects. Par exemple, le format de fichier de certificat stocké localement est .crt, mais le fichier .pem a été utilisé à la place dans la demande d'API. Pour résoudre ce problème, assurez-vous que le format et le nom du certificat client local sont corrects.

« curl : (6) Impossible de résoudre l'hôte : mtls.example.info »

Le client n'a pas réussi à résoudre le nom de domaine. Assurez-vous que le nom de domaine et la configuration sont corrects.

« url : (58) schannel : Impossible d'importer le fichier de certification auto-signé .pem, la dernière erreur est 0x80092002"

Cette erreur signifie qu'il existe un problème avec le fichier .pem du client local. Assurez-vous que le nom et le format du fichier .pem sont corrects.

« curl : (58) Impossible de définir le fichier de clé privée : 'self-signed.key' type PEM »

Cette erreur signifie qu'il existe un problème avec le fichier client local. Assurez-vous que la clé privée fournie dans la requête HTTP n'est pas manquante et correcte.

Erreurs de serveur

« Accès refusé. Raison : certificat auto-signé. »

Vérifiez que le certificat client auto-signé dans la demande d'API n'est ni modifié ni endommagé.

Les éléments suivants doivent correspondre exactement :

  • Module de la clé privée (private.key) utilisé pour signer le certificat auto-signé dans le magasin de confiance de S3 (bundle.crt ou bundle.pem).
  • Module du certificat du client transmis dans la demande d'API (client.crt).

Pour comparer les deux modules, exécutez les commandes OpenSSL suivantes :

$ openssl rsa -noout -modulus -in private.key
$ openssl x509 -noout -modulus -in bundle.crt
$ openssl x509 -noout -modulus -in client.crt

Remarque : pour produire une valeur de hachage plus courte afin de faciliter la comparaison, vous pouvez intégrer via PIPE le module de sortie dans une fonction de hachage cryptographique. Par exemple :openssl sha1.

$ openssl [operation] -noout -modulus -in [data] | openssl sha1

Exemples de sorties de commandes valides:

2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb

Pour confirmer l'intégrité des données, vérifiez qu'il n'y a pas eu de modification des données au niveau du contenu en exécutant la commande diff suivante :

$ diff client.crt bundle.crt