このドキュメントでは、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 は、各エイリアスのデフォルトとして 1 つの S/MIME 証明書をマークします。
エイリアスの詳細については、Gmail API でエイリアスと署名を管理する をご覧ください。
API アクセスを承認する
Gmail API へのアクセスを承認するには、次のいずれかの方法を使用します。
ドメイン全体の権限委任が設定された サービス アカウントを使用する。これらの用語の説明については、認証と 認可についてをご覧ください。このオプションを有効にするには、アクセス認証情報を作成するをご覧ください。
エンドユーザーの同意を得て OAuth 2.0 アクセス トークンを取得する標準の OAuth 2.0 フローを使用する。詳細については、認証と認可について をご覧ください。
このオプションを使用するには、ドメイン管理者が Google 管理コンソールで [メールの送受信で S/MIME 暗号化を有効にする] チェックボックスをオンにする必要があります。詳細については、ホスト型 S/MIME を有効にする Google 管理コンソールをご覧ください。
ACL スコープ
Gmail API は、同じ ACL スコープを、Gmail sendAs メソッドと同じように使用します。
gmail.settings.basic: メインのSendAsS/MIME を更新するには、このスコープが必要です。gmail.settings.sharing: カスタムの from S/MIME を更新するには、このスコープが必要です。
S/MIME 鍵を構成する
settings.sendAs.smimeInfo
リソースには、S/MIME 証明書を管理するためのメソッドがいくつか用意されています。各証明書は、ユーザーの 1 つの [名前を付けて送信] エイリアスに関連付けられています。
ユーザーの [名前を付けて送信] エイリアスを特定するには、
settings.sendAs.list
リソースで
settings.sendAs
メソッドを使用します。
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.get
メソッドを settings.sendAs.smimeInfo リソースで使用して、ユーザーの特定の [名前を付けて送信] エイリアスの特定の 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 文字列にエンコードして、pkcs12 フィールドを settings.sendAs.smimeInfo リソースに割り当てる方法を示しています。
Java
Python
S/MIME 証明書をアップロードする
証明書をアップロードするには、
settings.sendAs.smimeInfo.insert
メソッドを呼び出し、リクエストの本文に settings.sendAs.smimeInfo リソースを指定します。
Java
Python
複数のユーザーの証明書を管理する
次のコードサンプルは、1 回のバッチ呼び出しで組織内の複数のユーザーの証明書を管理する方法を示しています。
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 リソースの複数のメソッドを組み合わせて、組織の証明書を管理する方法を示します。ユーザーの証明書が一覧表示されます。デフォルトの証明書の有効期限が切れているか、設定されていない場合は、指定されたファイルにある証明書がアップロードされます。次に、有効期限が最も長い証明書がデフォルトとして設定されます。
この関数は、前の Insert CSV ファイルから証明書を挿入する サンプルと同様に、CSV ファイルを処理します。