- 前提
- 1. 設定ファイル (workspaces.cnf) の作成
- 2. ルート CA (認証局) の作成
- 3. クライアント(デバイス)証明書の作成
- 4. 配布用ファイル (p12) への変換
- 5. WorkSpaces のディレクトリにルート証明書を登録
- 6. クライアント PC にクライアント(デバイス)証明書を登録
- 7. 接続
- 補足:証明書の有効期限(Expire)について
- 公式ドキュメント
AWS WorkSpaces で「信頼されたデバイスのみアクセスを許可する(デバイス認証)」を設定する際、証明書の作成で少しハマったので、現在の最短手順を備忘録として残します。
前提
- OpenSSL がインストールされている環境(Mac, Linux, WSLなど)
1. 設定ファイル (workspaces.cnf) の作成
ここが最大のポイントです。AWSが要求する v3 拡張(Key Usageなど)を正確に付与するために、設定ファイルを作成します。
以下の内容を workspaces.cnf として保存してください。
[ req ] distinguished_name = req_distinguished_name req_extensions = v3_req x509_extensions = v3_ca [ req_distinguished_name ] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) organizationName = Organization Name (eg, company) commonName = Common Name (eg, YOUR name) [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # ルートCA用の設定 subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ v3_client ] # クライアント(デバイス)証明書用の設定 # 要件: Key Usage: Digital Signature # 要件: Enhanced Key Usage: Client Authentication basicConstraints = CA:FALSE nsCertType = client, email nsComment = "OpenSSL Generated Client Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature extendedKeyUsage = clientAuth
v3拡張が必要な理由
単に openssl req コマンドを打つだけでも証明書は作れますが、それらはデフォルトでは「X.509 v1」という古い形式か、あるいは用途制限のない証明書になりがちです。
AWS WorkSpaces が要求しているのは、「この証明書は『クライアント認証』だけに使います」 と明確に用途が刻印された証明書(X.509 v3)です。これを実現するために、以下の2つの拡張設定が不可欠となります。
Key Usage: Digital Signature(デジタル署名)
- 背景: デバイス認証の通信時、PC(クライアント)は「私がこの秘密鍵の持ち主です」と証明するために、通信データに署名を行います。
- 理由: この設定がないと、AWS側は「この証明書は署名用として許可されていない」と判断し、接続を拒否してしまいます。
Extended Key Usage: Client Authentication(クライアント認証)
- 背景: 証明書には「Webサーバー用」「メール署名用」「コード署名用」など様々な用途があります。
- 理由: AWSはセキュリティのため、「クライアント認証(Client Authentication)」というタグが付いた証明書しか受け入れません。これにより、誤ってWebサーバー用の証明書などが認証に使われるのを防いでいます。
これらの細かい属性(拡張領域)を正確に付与するために、今回はコマンドラインオプションではなく、構成ファイル (workspaces.cnf) を使用しています。
2. ルート CA (認証局) の作成
まずは大元となるルート証明書を作成します。
# 秘密鍵の作成 openssl genrsa -out rootCA.key 4096 # ルート証明書の発行 # -subj の内容は適宜変更してください openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -config workspaces.cnf -extensions v3_ca -subj "/C=JP/ST=Tokyo/O=MyOrg/CN=MyWorkSpacesRootCA"
3. クライアント(デバイス)証明書の作成
次に、実際に PC に配布する証明書を作成します。
ポイントは openssl x509 コマンド実行時に -extfile と -extensions を指定して、クライアント認証用の属性を付与することです。
# クライアント秘密鍵の作成 openssl genrsa -out device.key 2048 # CSR (署名要求) の作成 # CN=の部分はデバイスを識別できる名前にします openssl req -new -key device.key -out device.csr -config workspaces.cnf -subj "/C=JP/ST=Tokyo/O=MyOrg/CN=device-user-01" # ルートCAによる署名(証明書の発行) # ここで [ v3_client ] セクションを適用します openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 365 -sha256 -extfile workspaces.cnf -extensions v3_client
4. 配布用ファイル (p12) への変換
Windows や Mac にインストールするために .p12 形式に変換します。実行時にエクスポート用パスワードの設定を求められます。
openssl pkcs12 -export -out device.p12 -inkey device.key -in device.crt -certfile rootCA.pem
ところが、Mac にインポートができませんでした。
正しいパスワードを入れているはずなのにエラーになります。

最近の OpenSSL(バージョン3系)で作成した .p12 ファイルは、デフォルトの暗号化方式が新しすぎて、Mac のキーチェーンアクセスが読み取れず、「解読できない=パスワードが違う」と誤ったエラーを出している 可能性が非常に高いです。
これを解決するには、Mac が理解できる「昔ながらの形式」で書き出すための魔法のオプション -legacy を付けて作り直す必要があります。
openssl pkcs12 -export -legacy -out device.p12 -inkey device.key -in device.crt -certfile rootCA.pem
これで必要なファイルが揃いました。
- rootCA.pem: テキストの中身をコピーして、AWS WorkSpaces コンソールの「信頼されたデバイスの証明書」に登録しましょう。
- device.p12: 対象のクライアント PC に配布してインストールします。
5. WorkSpaces のディレクトリにルート証明書を登録
WorkSpaces コンソールを開き、対象のディレクトリを選択して [アクション] > [詳細の更新] をクリックします。
「アクセスコントロールオプション」という項目の中に設定があります。
「信頼されたデバイス...」のチェックを全てオンにします。

ここに、手順2で作成した rootCA.pem の中身(-----BEGIN CERTIFICATE----- から始まるテキスト)を貼り付けて [インポート] をクリックします。

正しくインポートされると、証明書の拇印(Thumbprint)が表示されます。これで AWS 側の設定は完了です。

6. クライアント PC にクライアント(デバイス)証明書を登録
Mac の場合 作成した .p12 ファイルをダブルクリックすると、キーチェーンアクセスへの登録画面が開きます。 ここでパスワードを求められますが、2回入力が必要になる点に注意してください。
- 証明書のパスワード: openssl コマンドで設定したパスワードを入力
- キーチェーンの変更許可: Mac のログインパスワードを入力
正しく登録されると、キーチェーン一覧に証明書が表示されます。

Windows の場合 .p12 ファイルをダブルクリックすると、「証明書のインポート ウィザード」が起動します。基本的には「次へ」で進めていけばOKですが、数箇所ポイントがあります。
保存場所の選択 「現在のユーザー」を選択して次へ進みます。

ファイルの選択 そのまま次へ進みます。

パスワードの入力とオプション 設定したパスワードを入力します。 この時、「このキーをエクスポート可能にする (Mark this key as exportable)」 にチェックを入れておくのがおすすめです。これをしておくと、PC入れ替え時などに証明書をバックアップ(再エクスポート)できるようになります。

証明書ストアの選択 「証明書の種類に基づいて、自動的に証明書ストアを選択する」のままで大丈夫です。

完了とセキュリティ警告 [完了] をクリックすると、セキュリティ警告が表示されます。 これは「自作した(公的な認証局ではない)証明書」をインストールする際に必ず出る警告です。 自分で作ったものなので問題ありません。[はい(Yes)] をクリックしてインストールを完了させます。



7. 接続
証明書インストール前には接続できませんでした。デバイスエラーが出ています。

証明書インストール後には接続できるようになりました。


補足:証明書の有効期限(Expire)について
今回の手順では、コマンド内の -days オプションで証明書の有効期限を設定しています。
- ルート CA 証明書:
3650(約10年) - クライアント証明書:
365(1年)
# クライアント証明書の作成コマンド(抜粋) openssl x509 ... -days 365 ...
なぜ期間が違うのか
ルート CA は、一度 AWS 側や全社員の PC に登録すると、入れ替え作業が非常に大変(全台再配布)になります。そのため、一般的に 10年〜20年 といった長い期間を設定します。
一方、クライアント証明書 は、紛失や盗難のリスクを考慮して 1年〜2年 程度で運用するのが一般的です。
期限を変えたい場合
運用を楽にするために「クライアント証明書も 3年 (1095日) にしたい」という場合は、openssl x509 コマンドの -days 365 の部分を -days 1095 に書き換えて実行してください。
有効期限の確認方法
作成した証明書がいつ切れるかは、以下のコマンドで確認できます。
openssl x509 -in device.crt -noout -enddate # 出力例: notAfter=Jan 23 15:00:00 2027 GMT
公式ドキュメント
手順は以上です。