本文說明如何透過 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 加密功能」核取方塊。詳情請參閱「在管理控制台中啟用代管式 S/MIME」。
授權範圍
Gmail API 採用與 Gmail sendAs 方法相同的 OAuth 範圍:
gmail.settings.basic:更新主要SendAsS/MIME 時必須提供。gmail.settings.sharing:更新自訂 from 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:標頭中。
以 PKCS #12 格式在
pkcs12
欄位中提供 S/MIME 憑證和私密金鑰。請勿在要求中設定任何其他欄位。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 郵件。刪除金鑰前,請先向核發機構 (CA) 撤銷金鑰。
為別名設定預設 S/MIME 金鑰
使用 settings.sendAs.smimeInfo 資源的 settings.sendAs.smimeInfo.setDefault 方法,將指定的 S/MIME 金鑰標示為指定別名的預設金鑰。使用下列路徑參數找出目標別名:
userId:使用者的電子郵件地址。使用特殊值me表示已驗證的使用者。sendAsEmail:要設定預設金鑰的別名。使用這個別名傳送郵件時,這個電子郵件地址會顯示在From:標頭中。id:smimeInfo的不可變更 ID。
使用者的「以這個地址傳送郵件」別名只能有一個預設的 S/MIME 金鑰。呼叫 settings.sendAs.smimeInfo.setDefault 方法會取消先前的預設值。
使用者收到以特定金鑰簽署的 S/MIME 郵件時,Gmail 會將該金鑰與最遠的not_before有效日期建立關聯,並在加密傳送給相關使用者的郵件時,預設使用該金鑰。如要確保使用者已與之通訊的 Gmail 使用者採用新的預設金鑰,請確認新的預設金鑰的 not_before 日期晚於先前的預設金鑰,或撤銷先前的預設金鑰。
程式碼範例
下列程式碼範例說明如何使用 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 檔案插入認證」範例類似。