Google Workspace では、Google Workspace または Google Workspace for Education をご利用のお客様にシングル サインオン(SSO)サービスを提供しています。Google Workspace シングル サインオン サービスは、RSA または DSA のアルゴリズムを使って生成された公開鍵と証明書を採用しています。このサービスを利用するには、秘密鍵と公開鍵のペア、および公開鍵を含む X.509 証明書を生成する必要があります。生成した公開鍵や証明書は Google に登録する必要があります。登録するには、Google 管理コンソールから鍵や証明書をアップロードします。
鍵や証明書の生成方法は開発プラットフォームやプログラム言語によって異なることが一般的ですが、ここでは、Google Workspace SSO サービスのご利用に必要な鍵と証明書の生成方法をいくつかご紹介します。
OpenSSL を使用する
公開鍵と秘密鍵のペアを生成する方法は多数ありますが、オープンソースの OpenSSL ツールを使用するのが最も一般的です。OpenSSL はすべての主要プラットフォームに組み込まれており、シンプルなコマンドライン インターフェースで鍵を生成できます。
RSA 秘密鍵を作成する
OpenSSL の次のコマンドを実行するだけで RSA 秘密鍵を生成できます。
openssl genrsa -out rsaprivkey.pem 2048
このコマンドを実行すると PEM 形式にエンコードされた秘密鍵が生成され、rsaprivkey.pem ファイルに保存されます。この方法で生成されるのは 2, 048 ビットの鍵で、ほぼすべての用途に利用できます。生成された秘密鍵は非公開のままにし、データへの署名やデータの復号に使用します。
Java ベースのプラットフォームをご利用の場合など、一部の環境下では DER や PKCS8 形式の鍵が必要になる場合があります。これらの形式の鍵は、たとえば次の手順で生成できます。
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in rsaprivkey.pem -out rsaprivkey.der -nocrypt
手順 1 で、DER 形式の公開鍵が生成されます。
手順 2 で、pkcs8 形式および DER 形式の秘密鍵が生成されます。生成された鍵(rsapubkey.der と rsaprivkey.der)はすぐにご利用いただけます。
DSA 秘密鍵を生成する
DSA 鍵を生成するには次の 2 つの手順を実施します。
openssl dsaparam -out dsaparam.pem 2048openssl gendsa -out dsaprivkey.pem dsaparam.pem
手順 1 で、DSA のパラメータ ファイル dsaparam.pem が生成されます。手順 2 の OpenSSL コマンドでこのファイルを指定することで、2,048 ビットの鍵が生成されます。なお、dsaparam.pem ファイル自体は鍵ではないため、公開鍵と秘密鍵を生成したら破棄して構いません。手順 2 で dsaprivkey.pem ファイル内に生成される秘密鍵は、非公開のままにしておく必要があります。
鍵を DER(バイナリ)形式で書き出すには、次の手順を実施します。
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in dsaprivkey.pem -out dsaprivkey.der -nocrypt
手順 1 で、公開鍵が DER 形式で書き出されます。
手順 2 で、秘密鍵が pkcs8 および DER 形式に変換されます。この手順を完了したら、この公開鍵(dsapubkey.der)と秘密鍵(dsaprivkey.der)のペアをご利用いただけます。
証明書を生成
鍵のペアを生成し終えたら、X.509 証明書を生成します。証明書の生成は簡単です。証明書には、対応する公開鍵とともに、証明書を生成した組織に関するメタデータが含まれています。RSA または DSA の秘密鍵から自己署名証明書を生成するには、次の手順を実施してください。
openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem
質問に回答し終えると証明書が生成され、dsacert.pem という名前で保存されます。SSO の設定時に、このファイルをコントロール パネルから Google Workspace にアップロードしてください。
証明書のフィンガープリントを作成する
一部のアプリケーションでは、X.509 証明書そのものではなく、X.509 証明書のフィンガープリントが必要です。フィンガープリントは、バイナリ形式の x509 証明書のダイジェストです。フィンガープリントの形式は、フィンガープリントの生成に使用されるアルゴリズム(SHA-1、SHA-256 など)によって異なります。
X.509 証明書から SHA-256 のフィンガープリントを作成するには、次のコマンドを使用します。.pem ファイルのファイル名は、実際の証明書のファイル名に置き換えてください。
openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"
Microsoft Visual Studio for .NET を使用する
Microsoft Visual Studio 2005 のユーティリティ(Common7ToolsBin ディレクトリにあります)を使って、Google Workspace で利用する証明書を生成できます。.NET で公開鍵と秘密鍵のペアおよび証明書を生成するには、次の手順を実施します。
makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cerpvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx
上記のコマンドでは、デフォルトで RSA アルゴリズムが使用されます。手順 1 で Certificate Creation ツール(makecert.exe)が起動し、testcert.cer というファイル名の自己署名 X.509 証明書と対応する秘密鍵が生成されます。
手順 2 で pvk2pfx ツール(pvk2pfx.exe)が起動し、CER および PVK ファイルから Personal Information Exchange(PFX)ファイルが生成されます。PFX には、公開鍵と秘密鍵の両方が含まれています。
手順 1 で作成した testcert.cer ファイルは、コントロール パネルを使用して Google Workspace にアップロードできます。手順 2 で作成した testcert.pfx は、SAML レスポンスの署名に必要な X509Certificate2(.NET 2.0 以降)インスタンスを作成するために使用できます。
Java で keytool を使用する
Java デベロッパーは、標準 JDK にある keytool ユーティリティを使用して、公開鍵/秘密鍵のペアと X.509 証明書を作成できます。keytool は、デジタル署名を必要とする認証スキームで使用する独自の公開鍵/秘密鍵ペアと関連する証明書を管理できる鍵と証明書の管理ユーティリティです。keytool は、鍵と証明書を「キーストア」に保存します。デフォルトの実装では、これはユーザーのホーム ディレクトリにある単なるファイル(.keystore)です。秘密鍵はパスワードで保護されます。
DSA 鍵のペアを生成する
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"keytool -export -alias dsassokey -file dsasso.cer
手順 1 のコマンドで、DSA アルゴリズムで公開鍵と秘密鍵のペア(サイズ 2,048 ビット、有効期間 180 日)が生成されます。
手順 2 で、公開鍵から X.509 証明書(dsasso.cer)が生成されます。生成された dsasso.cer を、コントロール パネルから Google Workspace にアップロードします。
RSA 鍵ペアを作成する
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -export -alias rsassokey -file rsasso.cer
手順 1 のコマンドで、RSA アルゴリズムで公開鍵と秘密鍵のペア(サイズ 2,048 ビット、有効期間 180 日)が生成されます。
手順 2 で、公開鍵から X.509 証明書(rsasso.cer)が生成されます。生成された rsasso.cer を、コントロール パネルから Google Workspace にアップロードしてください。
Java 暗号化アーキテクチャを使用する
Java 暗号化アーキテクチャ(JCA)には、セキュリティ プロパティを生成、操作するうえで中核となるクラスやインターフェースが含まれ、暗号化関連の Java 2 SDK Security API が提供されています。この API を使用すると、目的のアルゴリズムで公開鍵と秘密鍵のペアを簡単に生成できます。Google Workspace の SSO サービスに使う DSA 鍵または RSA 鍵を生成するサンプルコードは、以下のとおりです。
公開鍵と秘密鍵のペアを作成する
import java.io.*;
import java.security.*;
public class KeyGenDSA {
public static void main(String[] args) {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
SecureRandom random = SecureRandom.getInstanceStrong();
keyGen.initialize(2048, random);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
byte[] encPriv = priv.getEncoded();
FileOutputStream privfos = new FileOutputStream("DSAPrivateKey.key");
privfos.write(encPriv);
privfos.close();
byte[] encPub = pub.getEncoded();
FileOutputStream pubfos = new FileOutputStream("DSAPublicKey.key");
pubfos.write(encPub);
pubfos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
上記のコードは、KeyPairGenerator を使って DSA 鍵のペアを生成します。生成された鍵はバイナリ形式で、個々のファイルに出力されます。鍵を生成し終えたら、Google Workspace に公開鍵を登録し、秘密鍵を使って SAMLResponse に署名してください。DSA 鍵ではなく RSA 鍵のペアを生成するには、コード内の "DSA" を "RSA" に置き換えてください。
証明書または公開鍵を Google Workspace に登録する
鍵と証明書の生成手順は少し複雑でしたが、あとは簡単です。Google Workspace で証明書または公開鍵を登録するには、管理コンソールにアクセスし、管理者としてログインします。[セキュリティ]、[シングル サインオン(SSO)の設定] の順に選択し、[サードパーティの ID プロバイダで SSO を設定する] のすべての欄を入力します。