本文档介绍了如何在 Gmail API 中使用 S/MIME 电子邮件证书。
Gmail API 提供程序化访问权限,用于管理 Google Workspace 网域中用户的 S/MIME 电子邮件证书。
S/MIME 标准为 MIME 数据的公钥加密和签名提供了规范。在用户账号中配置 S/MIME 证书后,Gmail 会以以下方式使用这些证书:
使用用户证书和私钥为外发邮件签名。
使用用户私钥解密收到的邮件。
使用收件人证书和公钥加密外发邮件。
使用发件人证书和公钥验证收到的邮件。
您可以使用 Gmail API 生成各个 S/MIME 证书并上传。每个 S/MIME 证书都适用于用户电子邮件账号的特定别名。别名包括主邮箱和自定义“发件人”地址。API 会将单个 S/MIME 证书标记为每个别名的默认证书。
如需详细了解别名,请参阅使用 Gmail API 管理别名和签名。
授权 API 访问权限
如需授权访问 Gmail API,请使用以下方法之一:
使用具有 全网域授权的 服务账号。如需了解这些术语的说明,请参阅了解身份验证和 授权。如需 启用此选项,请参阅创建访问 凭据。
使用标准 OAuth 2.0 流程,该流程需要最终用户同意才能获取 OAuth 2.0 访问令牌。如需了解详情,请参阅了解 身份验证和授权。
如需使用此选项,网域管理员必须在 Google 管理控制台中选中为收发电子邮件启用 S/MIME 加密 复选框。如需了解详情,请参阅在 Google 管理控制台中启用托管 S/MIME。
ACL 范围
Gmail API 依赖于与 Gmail sendAs 方法相同的 same ACL scopes 范围:
gmail.settings.basic:更新主SendAsS/MIME 时需要此范围。gmail.settings.sharing:更新自定义 发件人 S/MIME 时需要此范围。
配置 S/MIME 密钥
settings.sendAs.smimeInfo
资源提供了多种管理 S/MIME 证书的方法。每个证书都与用户的某个发件人别名相关联。
如需确定用户的发件人别名,请对
settings.sendAs
资源使用
settings.sendAs.list
方法。
上传 S/MIME 密钥
对 settings.sendAs.smimeInfo 资源使用
settings.sendAs.smimeInfo.insert
方法,为属于用户的别名上传新的 S/MIME 密钥
。使用以下路径参数标识目标别名:
userId:用户的电子邮件地址。使用特殊值me表示经过身份验证的用户。sendAsEmail:您要为其上传密钥的别名。此电子邮件地址会显示在使用此别名发送的邮件的From:标头中。
S/MIME 证书和私钥应采用该格式显示在
pkcs12
字段中;不应在请求中设置任何其他字段。pkcs12 字段包含用户 S/MIME 密钥和签名证书链。API 会对此字段执行标准验证,然后再接受该字段,并验证以下内容:
- 主题与指定的电子邮件地址一致。
- 有效期有效。
- 颁发证书的证书授权机构 (CA) 位于 Google 可信列表中。
- 证书符合 Gmail 的技术限制。
如果密钥已加密,则密码应位于
encryptedKeyPassword
字段中。成功调用 settings.sendAs.smimeInfo.insert 方法会返回
settings.sendAs.smimeInfo 资源 id,该资源用于在日后引用密钥。
列出用户的 S/MIME 密钥
对 settings.sendAs.smimeInfo 资源使用
settings.sendAs.smimeInfo.list
方法,返回给定用户的给定别名的 S/MIME
密钥列表。使用以下路径参数标识目标别名:
userId:用户的电子邮件地址。使用特殊值me表示经过身份验证的用户。sendAsEmail:要列出密钥的别名。此电子邮件地址会显示在使用此别名发送的邮件的From:标头中。
检索别名的 S/MIME 密钥
对 settings.sendAs.smimeInfo 资源使用
settings.sendAs.smimeInfo.get
方法,返回用户的特定发件人别名的特定 S/MIME
密钥。使用以下路径参数标识目标别名:
userId:用户的电子邮件地址。使用特殊值me表示经过身份验证的用户。sendAsEmail:您要为其检索密钥的别名。此电子邮件地址会显示在使用此别名发送的邮件的From:标头中。
删除 S/MIME 密钥
对 settings.sendAs.smimeInfo 资源使用
settings.sendAs.smimeInfo.delete
方法,从别名中删除指定的
S/MIME 密钥。使用以下路径参数标识目标别名:
userId:用户的电子邮件地址。使用特殊值me表示经过身份验证的用户。sendAsEmail:您要为其删除密钥的别名。此电子邮件地址会显示在使用此别名发送的邮件的From:标头中。id:smimeInfo的不可变 ID。
为别名设置默认 S/MIME 密钥
对 settings.sendAs.smimeInfo 资源使用
settings.sendAs.smimeInfo.setDefault
方法,将指定的 S/MIME
密钥标记为指定别名的默认密钥。使用以下路径参数标识目标别名:
userId:用户的电子邮件地址。使用特殊值me表示经过身份验证的用户。sendAsEmail:要设置为默认密钥的别名。此电子邮件地址会显示在使用此别名发送的邮件的From:标头中。id:smimeInfo的不可变 ID。
代码示例
以下代码示例展示了如何使用 Gmail API 管理具有多个用户的组织的 S/MIME 证书:
为 S/MIME 证书创建 smimeInfo 资源
此代码示例展示了如何从文件中读取证书,将其编码为 Base64网址 字符串,并将其分配给 pkcs12 字段上的 settings.sendAs.smimeInfo 资源:
Java
Python
上传 S/MIME 证书
如需上传证书,请调用
settings.sendAs.smimeInfo.insert
方法,并在请求正文中提供 settings.sendAs.smimeInfo 资源:
Java
Python
管理多个用户的证书
这些代码示例展示了如何在一次批量调用中管理组织中多个用户的证书:
从 CSV 文件插入证书
以下是一个示例 CSV 文件,其中列出了用户 ID 和每个用户证书的路径:
$ 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
您可以使用
CreateSmimeInfo和
InsertSmimeInfo示例
上传 CSV 文件中指定用户的证书:
Python
您可以使用
create_smime_info和
insert_smime_info
示例上传 CSV 文件中指定用户的证书:
证书管理
此示例结合了 settings.sendAs.smimeInfo 资源中的多种方法,展示了如何管理组织的证书。它列出了用户的证书。如果默认证书已过期或未设置,它会上传在指定文件中找到的证书。然后,它会将有效期最长的证书设置为默认证书。
然后,此函数会处理 CSV 文件,类似于之前的插入 从 CSV 文件插入证书示例。