WindowsのWorkSpacesクライアントでデバイス認証

記事タイトルとURLをコピーする

こんにちは、技術4課の城です。
WorkSpacesの接続元を制限する方法の一つとして、Windows、Macのクライアントについては、デバイス認証が用意されています。
Windows端末にて作業を実施する際に必要なことについて、記載します。

やること

AWSドキュメントを参考に下記を実施します。

  • ルート証明書、クライアント証明書の用意
  • ルート証明書のインポート(AWSマネジメントコンソール)
  • クライアント証明書のインポート(ローカル端末)

環境

OpenSSLはStoreでインストールしたUbuntu 16.04のOpenSSLを利用します。

事前確認

ubuntuを起動し、opensslがインストール済みであることを確認します。

openssl version

【結果例】

OpenSSL 1.0.2g  1 Mar 2016

※インストールされていない場合はインストールします。

sudo apt-get install openssl

作業用ディレクトリの作成

mkdir -p ~/workspaces/CA/{newcerts,client}

コンフィグの変更

sudo vi /etc/ssl/openssl.cnf

デフォルトのディレクトリを変更しておきます。
[ CA_default ]セクション
dir             = ./demoCA
↓
dir             = /home/【ユーザー名】/workspaces/CA

自己認証局の作成

シリアルとインデックスファイルの作成

cd ~/workspaces/CA
echo 01 > serial
touch index.txt

自己認証局(CA)の秘密鍵(cakey.pem)、証明書(cacert.pem)の作成

sudo openssl req \
  -x509 \
  -days 3650 \
  -newkey rsa:2048 \
  -keyout cakey.pem \
  -out cacert.pem \
  -subj "/C=JP/ST=Tokyo/O=Serverworks/CN=jo-workspaces-ca"

対話式にて入力していきます。任意の秘密鍵のパスフレーズを入力します。
Generating a 2048 bit RSA private key
.........................+++
.+++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase: 【任意のパスフレーズを入力】
Verifying - Enter PEM pass phrase: 【パスフレーズの再入力】
-----

クライアント証明書の作成

秘密鍵(client.key)の作成

cd client
sudo openssl genrsa -out client.key 2048

署名要求(CSR)の作成

sudo openssl req \
  -new \
  -key client.key \
  -out client.csr \
  -sha256

対話式にて入力していきます。下記は例です。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Serverworks
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:jo-workspaces
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

CSRへの署名に利用するコンフィグの作成

cp /etc/ssl/openssl.cnf .
vi openssl.cnf

[ usr_cert ]セクション
下記、追加
keyUsage = critical,nonRepudiation, digitalSignature, keyEncipherment,dataEncipherment
extendedKeyUsage = clientAuth

下記行をコメントアウト
nsComment = "OpenSSL Generated Certificate"

CSRへの署名

sudo openssl ca \
  -config openssl.cnf \
  -keyfile ~/workspaces/CA/cakey.pem \
  -cert ~/workspaces/CA/cacert.pem \
  -in client.csr \
  -out client.crt

対話式にて入力していきます。
Using configuration from openssl.cnf
Enter pass phrase for /home/kotajo/workspaces/CA/cakey.pem: 【秘密鍵のパスフレーズを入力】
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Sep  9 13:42:36 2018 GMT
            Not After : Sep  9 13:42:36 2019 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = Serverworks
            commonName                = jo-workspaces
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage: critical
                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
            X509v3 Subject Key Identifier:
                4B:F0:A3:F6:B5:FE:E6:EE:03:0E:1B:C8:49:28:C3:50:A5:5F:0B:70
            X509v3 Authority Key Identifier:
                keyid:A7:B6:0F:DF:AC:E9:25:31:10:EE:95:C6:30:62:25:C2:BC:7F:0E:34

            X509v3 Extended Key Usage:
                TLS Web Client Authentication
Certificate is to be certified until Sep  9 13:42:36 2019 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

標準だと証明書の期限が1年なので、延長したい場合は -daysオプションや openssl.cnfの設定変更で対応します。

インストール用クライアント証明書(client.p12)の作成

sudo openssl pkcs12 \
  -export \
  -in client.crt \
  -inkey client.key \
  -certfile ~/workspaces/CA/cacert.pem \
  -name 'jo workspaces client cert' \
  -caname jo-workspaces-ca \
  -out client.p12

パスワードなしで作成する場合はそのままEnterでOKです。
Enter Export Password:
Verifying - Enter Export Password:

ルート証明書のインポート(AWSマネジメントコンソール)

WorkSpacesのダッシュボードにて[Directory]をクリックします。
対象のDirectory Serviceを選択し、[アクション] > [詳細の更新]とクリックします。

[アクセス制御のオプション]を展開します。

「信頼された Winodws デバイスのみに WorkSpaces へのアクセスを許可」にチェックし、[インポート]をクリックします。

cacert.pemの内容を貼り付け、[インポート]をクリックします。

[更新と終了]をクリックします。

アクセス確認(拒否されること)

アクセス確認をします。
クライアント証明書をインストールしていないため、アクセスできません。

クライアント証明書のインポート(ローカル端末)

作成したclient.p12をローカル端末にて実行します。

証明書のインポートウィザードが開きますので、そのまま[次へ]をクリックします。

インポートする証明書ファイルについても、そのまま[次へ]をクリックします。

秘密キーの保護についても、そのまま[次へ]をクリックします。

証明書ストアは「信頼されたルート証明機関」を選択し、次へをクリックします。

自己認証局なので、セキュリティ警告が出ます。[はい]をクリックします。

[完了]をクリックします。

アクセス確認

WorkSpacesクライアントを起動し、アクセスします。
アクセスできました!!

終わりに

今さらながらではありますが、デバイス認証の手順についてまとめてみました。
どなたかの助けになれば、幸いです。

城 航太 (記事一覧)

サイトリライアビリティエンジニアリング部・CSM課・課長

AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020