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 証明書は、ユーザーのメール アカウントの特定のエイリアス用です。エイリアスには、メインのメールアドレスとカスタムの「名前」アドレスが含まれます。各エイリアスに対して 1 つの S/MIME 証明書がデフォルトとしてマークされます。
API アクセスの承認
API へのアクセスを承認する方法は 2 つあります。
- ドメイン全体の権限委任を使用するサービス アカウントを使用できます。これらの用語の説明については、認証と認可の概要の用語をご覧ください。このオプションを有効にする方法については、ドメイン全体の権限を委任されたサービス アカウントを作成するをご覧ください。
- Oauth2 アクセス トークンを取得するためにエンドユーザーの同意を必要とする標準の OAuth2 フローを使用できます。詳細については、認証と承認の概要をご覧ください。このオプションを使用するには、ドメイン管理者がドメイン コントロール パネルで [S/MIME API エンドユーザー アクセスを有効にする] チェックボックスをオンにする必要があります。
ACL スコープ
この API は、Gmail sendAs メソッドと同じ ACL スコープを使用します。
- gmail.settings.basic
- このスコープは、プライマリ SendAs S/MIME の更新に必要です。
- gmail.settings.sharing
- このスコープは、S/MIME からカスタムを更新する場合に必要です。
API の使用
users.settings.sendAs.smimeInfo リソースには、S/MIME 証明書の管理に使用するメソッドが用意されています。各証明書は、ユーザーの 1 つの送信元エイリアスに関連付けられます。
S/MIME 鍵をアップロードする
smimeInfo.insert() メソッドを使用して、ユーザーに属するエイリアスの新しい S/MIME 鍵をアップロードします。ターゲット エイリアスは、次のパラメータを使用して識別します。
- userId
- ユーザーのメールアドレス。特別な値
me
を使用して、現在認証されているユーザーを指定できます。 - sendAsEmail
- キーをアップロードするエイリアス。このエイリアスを使用して送信されたメールの [From:] ヘッダーに表示されるメールアドレスです。
S/MIME 証明書と秘密鍵は、その形式で pkcs12
フィールドに存在する必要があります。リクエストに他のフィールドを設定しないでください。PKCS12 フィールドには、ユーザーの S/MIME 鍵と署名証明書チェーンの両方が含まれている必要があります。API は、このフィールドを受け入れ前に標準の検証を行い、次の点を確認します。
- 件名が指定されたメールアドレスと一致している。
- 有効期限が有効である。
- 発行元の認証局(CA)が信頼リストに登録されている。
- 証明書が Gmail の技術的な制約を満たしている。
鍵が暗号化されている場合は、パスワードを encryptedKeyPassword
フィールドに指定する必要があります。insert() 呼び出しが成功すると、今後キーを参照するために使用できる smimeInfo の ID が返されます。
ユーザーの S/MIME 鍵を一覧表示する
smimeInfo.list() メソッドを使用して、指定されたユーザーの指定されたエイリアスの S/MIME 鍵のリストを返します。ターゲット エイリアスは、次のパラメータを使用して識別します。
- userId
- ユーザーのメールアドレス。特別な値
me
を使用して、現在認証されているユーザーを指定できます。 - sendAsEmail
- キーを一覧表示するエイリアス。このエイリアスを使用して送信されたメールの [From:] ヘッダーに表示されるメールアドレスです。
エイリアスの S/MIME 鍵を取得する
smimeInfo.get() メソッドを使用して、ユーザーの特定の送信者エイリアスの特定の S/MIME 鍵を返します。ターゲット エイリアスは、次のパラメータを使用して識別します。
- userId
- ユーザーのメールアドレス。特別な値
me
を使用して、現在認証されているユーザーを指定できます。 - sendAsEmail
- キーを取得するエイリアス。このエイリアスを使用して送信されたメールの [From:] ヘッダーに表示されるメールアドレスです。
S/MIME 鍵を削除する
smimeInfo.delete() メソッドを使用して、エイリアスから指定した S/MIME 鍵を削除します。ターゲット エイリアスは、次のパラメータを使用して識別します。
- userId
- ユーザーのメールアドレス。特別な値
me
を使用して、現在認証されているユーザーを指定できます。 - sendAsEmail
- キーを取得するエイリアス。このエイリアスを使用して送信されたメールの [From:] ヘッダーに表示されるメールアドレスです。
- id
- SmimeInfo の不変の ID。
エイリアスのデフォルトの S/MIME 鍵を設定する
smimeInfo.setDefault() メソッドを使用して、指定した S/MIME 鍵を指定されたエイリアスのデフォルトとしてマークします。ターゲット エイリアスは、次のパラメータを使用して識別します。
- userId
- ユーザーのメールアドレス。特別な値
me
を使用して、現在認証されているユーザーを指定できます。 - sendAsEmail
- キーを取得するエイリアス。このエイリアスを使用して送信されたメールの [From:] ヘッダーに表示されるメールアドレスです。
- id
- SmimeInfo の不変の ID。
サンプルコード
次のコードサンプルは、API を使用して複数のユーザーが存在する組織の S/MIME 証明書を管理する方法を示しています。
S/MIME 証明書の SmimeInfo リソースを作成する
次のコードサンプルは、ファイルから証明書を読み取り、base64url 文字列にエンコードして、smimeInfo
リソースの pkcs12
フィールドに割り当てる方法を示しています。
Java
Python
S/MIME 証明書のアップロード
証明書をアップロードするには、smimeInfo.insert
を呼び出し、リクエストの本文に smimeInfo
リソースを指定します。
Java
Python
多くのユーザーの証明書を管理する例
組織内の多くのユーザーの証明書を一度に管理したい場合があります。次の例は、1 つのバッチ呼び出しで複数のユーザーの証明書を管理する方法を示しています。
CSV ファイルから証明書を挿入する
ユーザー ID と各ユーザーの証明書のパスをリストした CSV ファイルがあるとします。
$ 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 ファイルを処理する関数から呼び出されます。