このページでは、OpenSSL コマンドライン ツールを使用して公開鍵/秘密鍵のペアを生成する方法について説明します。
デバイス認証
Cloud IoT Core では、公開鍵(または非対称)認証が使用されます。
- デバイスは秘密鍵を使用して JSON Web Token(JWT)に署名します。トークンは、デバイスの ID の証明として Cloud IoT Core に渡されます。
- このサービスでは、デバイスの公開鍵(JWT の送信前にアップロードされる)を使用してデバイスの ID を検証します。
Cloud IoT Core は、RSA アルゴリズムと El 円曲線アルゴリズムをサポートしています。鍵の形式の詳細については、公開鍵の形式をご覧ください。
RSA 鍵を生成する
次のコマンドを使用して、2,048 ビットの RSA 鍵ペアを生成できます。
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048 openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem
これらのコマンドを実行すると、次の公開鍵と秘密鍵のペアが作成されます。
rsa_private.pem
: デバイスに安全に保存し、認証 JWT の署名に使用する秘密鍵。rsa_public.pem
: Cloud IoT Core に保存し、認証 JWT の署名を検証するために使用する公開鍵。
自己署名 X.509 証明書付きの RSA 鍵を生成する
レジストリレベルの証明書に対して鍵を検証する場合、証明書が特定の要件を満たしている必要があります。こうした要件の 1 つは、証明書で X.509 標準を使用していることです。
次のコマンドを実行して、2, 048 ビットの RSA 秘密鍵と、SHA-256 署名付きの自己署名 X.509 証明書を生成します。
openssl req -x509 -nodes -newkey rsa:2048 -keyout rsa_private.pem \ -out rsa_cert.pem -subj "/CN=unused"
-subj
引数を実際の証明書のサブジェクトに置き換えて、その証明書を使用できます。または、プロンプトが表示され場合は、-subj
を省略して証明書情報を指定できます(Cloud IoT Core によってサブジェクトが検証されることはありません)。
デフォルトで、X.509 証明書は作成から 30 日後に期限切れになります。証明書の有効期限が切れる日数を設定するには、作成時に -days <n>
フラグを追加します。期限切れの証明書を使用してデバイスを作成または更新しようとすると、デバイスをレジストリに接続しようとしてレジストリの証明書が期限切れになると、Cloud IoT Core からエラーが返されます。
楕円曲線鍵を生成する
P-256 楕円曲線鍵のペアを生成するには、次のコマンドを使用します。
openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem openssl ec -in ec_private.pem -pubout -out ec_public.pem
これらのコマンドを実行すると、次の公開鍵と秘密鍵のペアが作成されます。
ec_private.pem
: デバイスに安全に保存し、認証 JWT の署名に使用する秘密鍵。ec_public.pem
: Cloud IoT Core に保存し、認証 JWT の署名を検証するために使用する公開鍵。
自己署名 X.509 証明書で ES256 鍵を生成する
レジストリレベルの証明書に対して鍵を検証する場合は、このページで説明されていない追加の要件を証明書が満たしている必要があります。こうした要件の 1 つは、証明書で X.509 標準を使用していることです。
次のコマンドを実行して、自己署名 X.509 証明書を含む ES256 鍵を生成します。
openssl req -x509 -new -key ec_private.pem -out ec_cert.pem -subj "/CN=unused"
-subj
引数を実際の証明書のサブジェクトに置き換えて、その証明書を使用できます。または、プロンプトが表示され場合は、-subj
を省略して証明書情報を指定できます(Cloud IoT Core によってサブジェクトが検証されることはありません)。
デフォルトでは、X.509 証明書の有効期限は作成後 30 日間です。証明書の有効期限が切れる日数を設定するには、作成時に -days <n>
フラグを追加します。期限切れの証明書を使用してデバイスを作成または更新しようとすると、デバイスをレジストリに接続しようとしてレジストリの証明書が期限切れになると、Cloud IoT Core からエラーが返されます。
鍵を Java 用の PKCS8 に変換する
Java では、秘密鍵を PKCS8 形式に変換する必要があります。RSA 鍵と El 円曲線鍵を PEM 形式から PKCS8 形式に変換するには、次のコマンドを実行します。
RSA
openssl pkcs8 -topk8 -inform PEM -outform DER -in rsa_private.pem \ -nocrypt > rsa_private_pkcs8
楕円曲線
openssl pkcs8 -topk8 -inform PEM -outform DER -in ec_private.pem \ -nocrypt > ec_private_pkcs8
鍵を管理する
デバイスのセキュリティに関する推奨事項を必ず確認し、鍵のローテーションの実装を検討してください。
オプションのレジストリレベルの証明書を使用して、鍵認証情報を確認することもできます。