L'API S/MIME de Gmail fournit un accès programmatique pour gérer les certificats de messagerie S/MIME des utilisateurs d'un Google Workspace domaine.
Un administrateur doit activer S/MIME pour le domaine pour que les certificats fonctionnent.
La norme S/MIME fournit une spécification pour le chiffrement par clé publique et la signature des données MIME. Si vous configurez des certificats S/MIME dans le compte d'un utilisateur, Gmail utilise ce certificat comme suit:
- Gmail utilise le certificat et la clé privée de l'utilisateur pour signer les e-mails sortants.
- Gmail utilise la clé privée de l'utilisateur pour déchiffrer les e-mails entrants.
- Gmail utilise le certificat et la clé publique du destinataire pour chiffrer les e-mails sortants.
- Gmail utilise le certificat et la clé publique de l'expéditeur pour valider le courrier entrant.
Vous générez des certificats S/MIME individuels et les importez à l'aide de l'API. Chaque certificat S/MIME est destiné à un alias spécifique d'un compte de messagerie utilisateur. Les alias incluent l'adresse e-mail principale, ainsi que les adresses "Envoyer en tant que" personnalisées. Un seul certificat S/MIME est marqué comme par défaut pour chaque alias.
Autoriser l'accès aux API
Il existe deux façons d'autoriser l'accès à l'API:
- Vous pouvez utiliser un compte de service avec une délégation d'autorité au niveau du domaine. Pour en savoir plus sur ces termes, consultez la section Termes de la présentation de l'authentification et de l'autorisation. Pour savoir comment activer cette option, consultez la section Créer un compte de service avec délégation d'autorité au niveau du domaine.
- Vous pouvez utiliser un flux OAuth2 standard nécessitant l'autorisation de l'utilisateur final pour obtenir un jeton d'accès OAuth2. Pour en savoir plus, consultez la section Présentation de l'authentification et de l'autorisation. Pour utiliser cette option, l'administrateur du domaine doit activer la case à cocher "Accès des utilisateurs finaux à l'API S/MIME activé" dans le panneau de configuration du domaine.
Champs d'application des LCA
Cette API s'appuie sur les mêmes champs d'application d'ACL que les méthodes sendAs de Gmail:
- gmail.settings.basic
- Cette portée est requise pour mettre à jour le paramètre SendAs S/MIME principal.
- gmail.settings.sharing
- Ce champ d'application est obligatoire pour mettre à jour les éléments personnalisés à partir de S/MIME.
Utilisation de l'API
La ressource users.settings.sendAs.smimeInfo fournit les méthodes que vous utilisez pour gérer les certificats S/MIME. Chaque certificat est associé à un alias d'envoi pour un utilisateur.
Importer une clé S/MIME
Utilisez la méthode smimeInfo.insert() pour importer une nouvelle clé S/MIME pour un alias appartenant à un utilisateur. Vous identifiez l'alias de la cible à l'aide des paramètres suivants:
- userId
- Adresse e-mail de l'utilisateur. Vous pouvez utiliser la valeur spéciale
me
pour indiquer l'utilisateur actuellement authentifié. - sendAsEmail
- Alias pour lequel vous importez la clé. Il s'agit de l'adresse e-mail qui s'affiche dans l'en-tête "De" des e-mails envoyés à l'aide de cet alias.
Le certificat S/MIME et la clé privée doivent être présents dans le champ pkcs12
sous ce format. Aucun autre champ ne doit être défini dans la requête. Le champ PKCS12 doit contenir à la fois la clé S/MIME de l'utilisateur et la chaîne de certificats de signature. L'API effectue des validations standards sur ce champ avant de l'accepter, en vérifiant les points suivants:
- L'objet correspond à l'adresse e-mail spécifiée.
- Les dates d'expiration sont valides.
- L'autorité de certification (CA) émettrice figure dans notre liste de confiance.
- Les certificats correspondent aux contraintes techniques de Gmail.
Si la clé est chiffrée, le mot de passe doit se trouver dans le champ encryptedKeyPassword
. Les appels insert() réussis renvoient l'ID de smimeInfo, qui peut être utilisé pour faire référence à la clé à l'avenir.
Lister les clés S/MIME d'un utilisateur
Utilisez la méthode smimeInfo.list() pour renvoyer la liste des clés S/MIME de l'utilisateur donné pour l'alias donné. Vous identifiez l'alias de la cible à l'aide des paramètres suivants:
- userId
- Adresse e-mail de l'utilisateur. Vous pouvez utiliser la valeur spéciale
me
pour indiquer l'utilisateur actuellement authentifié. - sendAsEmail
- Alias pour lequel lister les clés. Il s'agit de l'adresse e-mail qui s'affiche dans l'en-tête "De" des e-mails envoyés à l'aide de cet alias.
Récupérez les clés S/MIME d'un alias.
Utilisez la méthode smimeInfo.get() pour renvoyer les clés S/MIME spécifiques à un alias d'envoi en tant que pour un utilisateur. Vous identifiez l'alias de la cible à l'aide des paramètres suivants:
- userId
- Adresse e-mail de l'utilisateur. Vous pouvez utiliser la valeur spéciale
me
pour indiquer l'utilisateur actuellement authentifié. - sendAsEmail
- Alias pour lequel vous récupérez les clés. Il s'agit de l'adresse e-mail qui s'affiche dans l'en-tête "De" des e-mails envoyés à l'aide de cet alias.
Supprimer une clé S/MIME
Utilisez la méthode smimeInfo.delete() pour supprimer la clé S/MIME spécifiée d'un alias. Vous identifiez l'alias de la cible à l'aide des paramètres suivants:
- userId
- Adresse e-mail de l'utilisateur. Vous pouvez utiliser la valeur spéciale
me
pour indiquer l'utilisateur actuellement authentifié. - sendAsEmail
- Alias pour lequel vous récupérez les clés. Il s'agit de l'adresse e-mail qui s'affiche dans l'en-tête "De" des e-mails envoyés à l'aide de cet alias.
- id
- ID immuable de SmimeInfo.
Définir la clé S/MIME par défaut pour un alias
Utilisez la méthode smimeInfo.setDefault() pour définir la clé S/MIME spécifiée comme valeur par défaut pour l'alias spécifié. Vous identifiez l'alias de la cible à l'aide des paramètres suivants:
- userId
- Adresse e-mail de l'utilisateur. Vous pouvez utiliser la valeur spéciale
me
pour indiquer l'utilisateur actuellement authentifié. - sendAsEmail
- Alias pour lequel vous récupérez les clés. Il s'agit de l'adresse e-mail qui s'affiche dans l'en-tête "De" des e-mails envoyés à l'aide de cet alias.
- id
- ID immuable de SmimeInfo.
Exemple de code
Les exemples de code suivants montrent comment utiliser l'API pour gérer les certificats S/MIME d'une organisation comptant plusieurs utilisateurs.
Créer une ressource SmimeInfo pour un certificat S/MIME
L'exemple de code suivant montre comment lire un certificat à partir d'un fichier, l'encoder en chaîne base64url et l'attribuer au champ pkcs12
de la ressource smimeInfo
:
Java
Python
Importer un certificat S/MIME
Pour importer un certificat, appelez smimeInfo.insert
et fournissez la ressource smimeInfo
dans le corps de la requête:
Java
Python
Exemples de gestion des certificats de nombreux utilisateurs
Vous pouvez gérer les certificats de plusieurs utilisateurs de l'organisation à la fois. Les exemples suivants montrent comment gérer les certificats de plusieurs utilisateurs dans un seul appel par lot.
Insérer des certificats à partir d'un fichier CSV
Supposons que vous disposiez d'un fichier CSV qui liste les ID utilisateur et le chemin d'accès au certificat de chaque utilisateur:
$ cat certificates.csv
user1@example.com,/path/to/user1_cert.p12,cert_password_1
user2@example.com,/path/to/user2_cert.p12,cert_password_2
user3@example.com,/path/to/user3_cert.p12,cert_password_3
Java
Vous pouvez utiliser les appels createSmimeInfo
et insertSmimeInfo
précédents pour importer les certificats comme indiqué dans le fichier CSV:
Python
Vous pouvez utiliser les appels create_smime_info
et insert_smime_info
précédents pour importer les certificats comme indiqué dans le fichier CSV:
Gestion des certificats
Cet exemple combine plusieurs appels de l'API smimeInfo
pour montrer comment gérer les certificats de votre organisation. Il liste les certificats de l'utilisateur et, si le certificat par défaut est expiré ou non défini, il importe le certificat trouvé dans le fichier spécifié. Il définit ensuite le certificat dont l'expiration est la plus éloignée dans le temps comme valeur par défaut.
Il est ensuite appelé à partir d'une fonction qui traite un fichier CSV, comme dans l'exemple précédent.