本文說明如何在 Gmail API 中使用 S/MIME 電子郵件憑證。
Gmail API 提供程式輔助存取權,可管理 Google Workspace 網域中使用者使用的 S/MIME 電子郵件憑證。
管理員必須為網域啟用代管式 S/MIME,憑證才能正常運作。
S/MIME 標準提供 MIME 資料的公開金鑰加密和簽署規格。在使用者帳戶中設定 S/MIME 憑證後,Gmail 會以以下方式使用這些憑證:
使用使用者憑證和私密金鑰簽署外寄郵件。
使用使用者私密金鑰解密收到的郵件。
使用收件者憑證和公開金鑰加密外寄郵件。
使用寄件者憑證和公開金鑰驗證來信。
您可以產生個別的 S/MIME 憑證,然後使用 Gmail API 上傳。每個 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 方法相同的 ACL 範圍:
gmail.settings.basic:更新主要 S/MIME 時,必須使用這個範圍。SendAsgmail.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 資源
這個程式碼範例說明如何從檔案讀取憑證、將憑證編碼為 Base64URL 字串,並指派給 settings.sendAs.smimeInfo 資源的 pkcs12 欄位:
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 檔案插入認證」範例類似。