Gmail S/MIME API 提供程式輔助存取權,可管理 Google Workspace 網域中使用者使用的 S/MIME 電子郵件憑證。
管理員必須為網域啟用 S/MIME,憑證才能正常運作。
S/MIME 標準提供 MIME 資料的公開金鑰加密和簽署規格。在使用者帳戶中設定 S/MIME 憑證後,Gmail 會以以下方式使用該憑證:
- Gmail 會使用使用者的憑證和私密金鑰簽署外寄郵件。
- Gmail 會使用使用者的私密金鑰解密郵件。
- Gmail 會使用收件者的憑證和公開金鑰加密外寄郵件。
- Gmail 會使用寄件者的憑證和公開金鑰驗證外部傳入的郵件。
您會產生個別的 S/MIME 憑證,並使用 API 上傳。每個 S/MIME 憑證都適用於使用者電子郵件帳戶的特定別名。別名包括主要電子郵件地址,以及自訂的「寄件者身分」地址。 每個別名都會標示一個預設的 S/MIME 憑證。
授權 API 存取權
授權存取 API 的方式有兩種:
- 您可以使用具備全網域授權委派的服務帳戶。 如要瞭解這些字詞的說明,請參閱「驗證和授權總覽字詞」。如要瞭解如何啟用這個選項,請參閱「建立具有全網域授權委派功能的服務帳戶」
- 您可以透過標準 OAuth2 流程取得 OAuth2 存取權杖,但必須先徵求使用者同意。詳情請參閱「驗證和授權總覽」。如要使用這個選項,網域管理員必須在網域控制面板中勾選「啟用 S/MIME API 使用者存取權」核取方塊。
ACL 範圍
這個 API 依賴與 Gmail sendAs 方法相同的 ACL 範圍:
- gmail.settings.basic
- 更新主要「以這個地址或別名傳送郵件」S/MIME 時,必須使用這個範圍。
- gmail.settings.sharing
- 更新 S/MIME 的自訂 時,必須使用這個範圍。
使用 API
users.settings.sendAs.smimeInfo 資源提供管理 S/MIME 憑證的方法。每個憑證都與使用者的其中一個「以這個別名傳送郵件」別名相關聯。
上傳 S/MIME 金鑰
使用 smimeInfo.insert() 方法,為使用者的別名上傳新的 S/MIME 金鑰。您可以使用下列參數識別目標別名:
- userId
- 使用者的電子郵件地址。您可以使用特殊值
me
指出目前已通過驗證的使用者。 - sendAsEmail
- 您要上傳金鑰的別名。這是使用這個別名傳送郵件時,顯示在「寄件者:」標頭中的電子郵件地址。
S/MIME 憑證和私密金鑰應以該格式出現在 pkcs12
欄位中;要求中不得設定其他欄位。PKCS12 欄位應包含使用者 S/MIME 金鑰和簽署憑證鏈結。API 會先對這個欄位執行標準驗證,再接受該欄位,並驗證下列事項:
- 主旨與指定的電子郵件地址相符。
- 到期日有效。
- 核發憑證授權單位 (CA) 位於我們的信任清單中。
- 憑證符合 Gmail 的技術限制。
如果金鑰已加密,密碼應位於 encryptedKeyPassword
欄位。成功呼叫 insert() 後,系統會傳回 smimeInfo 的 ID,供日後參照金鑰。
列出使用者的 S/MIME 金鑰
使用 smimeInfo.list() 方法,傳回指定別名和使用者的 S/MIME 金鑰清單。您可以使用下列參數識別目標別名:
- userId
- 使用者的電子郵件地址。您可以使用特殊值
me
指出目前已通過驗證的使用者。 - sendAsEmail
- 要列出金鑰的別名。這是使用這個別名傳送郵件時,顯示在「寄件者:」標頭中的電子郵件地址。
擷取別名的 S/MIME 金鑰
使用 smimeInfo.get() 方法,傳回特定使用者的特定「以其他地址或別名傳送郵件」別名的 S/MIME 金鑰。 您可以使用下列參數識別目標別名:
- userId
- 使用者的電子郵件地址。您可以使用特殊值
me
指出目前已通過驗證的使用者。 - sendAsEmail
- 要擷取金鑰的別名。這是使用這個別名傳送郵件時,顯示在「寄件者:」標頭中的電子郵件地址。
刪除 S/MIME 金鑰
使用 smimeInfo.delete() 方法,從別名中刪除指定的 S/MIME 金鑰。您可以使用下列參數識別目標別名:
- userId
- 使用者的電子郵件地址。您可以使用特殊值
me
指出目前已通過驗證的使用者。 - sendAsEmail
- 要擷取金鑰的別名。這是使用這個別名傳送郵件時,顯示在「寄件者:」標頭中的電子郵件地址。
- id
- SmimeInfo 的固定 ID。
為別名設定預設 S/MIME 金鑰
使用 smimeInfo.setDefault() 方法,將指定別名的 S/MIME 金鑰設為預設金鑰。您可以使用下列參數識別目標別名:
- userId
- 使用者的電子郵件地址。您可以使用特殊值
me
指出目前已通過驗證的使用者。 - sendAsEmail
- 要擷取金鑰的別名。這是使用這個別名傳送郵件時,顯示在「寄件者:」標頭中的電子郵件地址。
- id
- SmimeInfo 的固定 ID。
程式碼範例
下列程式碼範例說明如何使用 API,管理機構中多位使用者的 S/MIME 憑證。
為 S/MIME 憑證建立 SmimeInfo 資源
下列程式碼範例示範如何從檔案讀取憑證、編碼為 base64url 字串,並指派給 smimeInfo
資源的 pkcs12
欄位:
Java
Python
上傳 S/MIME 憑證
如要上傳憑證,請呼叫 smimeInfo.insert
,並在要求主體中提供 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 檔案中指定的憑證:
憑證管理功能
這個範例結合了 smimeInfo
API 的多項呼叫,說明如何管理貴機構的憑證。這項工具會列出使用者的憑證,並在預設憑證過期或未設定時,上傳指定檔案中的憑證。然後將到期日最遠的憑證設為預設憑證。
然後從處理 CSV 檔案的函式呼叫,如上一個範例所示。