Amazon WorkSpacesをオレオレ証明書（自己証明書）でデバイス制限した話


# Amazon WorkSpacesにオレオレ証明書（自己証明書）を登録する
はい皆さんこんにちは

結論から言うとこの記事は
WorkSpacesで認証済みの端末からアクセスを許可するために
証明書を作って登録する話です。


# 詳細

信頼されたデバイスへの WorkSpaces アクセスを制限する
https://docs.aws.amazon.com/ja_jp/workspaces/latest/adminguide/trusted-devices.html
クライアントアプリケーションはこちら
https://clients.amazonworkspaces.com/

環境：
AmazonWorkSpaces
クライアント：WIN10
サーバ：WIN10
接続方式：クライアントアプリケーション
証明書を作る環境：CentOS7（他のLINUXでもOKです）

注意事項：
**接続方式が他のデバイス（WEB ACCESSとか）の場合、証明書でアクセス制限できません**
なのでDirectoriesの[Actions]＞[Update Details]＞[Access Control Options]＞[Other Platforms]で他のデバイスが無効になっている前提で話を進めます。

##CA証明書をLINUXサーバで作る
LINUXサーバはyumでパッケージがインストールできる環境なら何でもいいと思います。
今回は有効期限を20年で作ります。よって2040年まで使える証明書になります。

基本root権限でいきます。
`rpm -qa | grep openssl`
⇒opensslが入って無ければ入れましょう。
`yum update -y`
`rpm -qa | grep openssl`

`mkdir -p /etc/pki/workspaces/newcerts
cd /etc/pki/workspaces/
echo "01" | sudo tee serial
touch index.txt
cp /etc/pki/tls/openssl.cnf openssl_ca.cnf`

`vi openssl_ca.cnf`
[ CA_default ]の箇所を変更
dir = /etc/pki/workspaces
[ v3_ca ]の箇所でコメントアウト（頭にシャープ追加）
 #authorityKeyIdentifier=keyid:always,issuer
[ v3_ca ]の箇所で追記
keyUsage = digitalSignature,cRLSign,keyCertSign 
保存する。（SHIFT押しながらZZ）

`openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 7300 -config openssl_ca.cnf`
入力はこんな感じで
Enter PEM pass phrase:1111
Verifying - Enter PEM pass phrase:1111
**※好きなパスワードにしてください**
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Mita
Organization Name (eg, company) [Default Company Ltd]:ramen jiro
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:yourname.com
Email Address []:
**※yourname.comは実際のサーバ名に変えてください。WORKSPACESで使う分にはこのままでもいいかもですが・・**
**※何も書いてないところはエンターで進めます**

##クライアント証明書をLINUXサーバで作る
`cd /etc/pki/workspaces/
mkdir Client
cd Client/
openssl genrsa -out client.key 2048`

`openssl req -new -key client.key -out client.csr -sha256`
入力はこんな感じで
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Mita
Organization Name (eg, company) [Default Company Ltd]:ramen jiro
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:yourname.com
**※yourname.comは実際のサーバ名に変えてください。WORKSPACESで使う分にはこのままでもいいかもですが・・**
**※何も書いてないところはエンターで進めます**

`cp /etc/pki/tls/openssl.cnf ./openssl_client.cnf`

`vi openssl_client.cnf`
[ CA_default ]の箇所で変更
dir = /etc/pki/workspaces
private_key     = $dir/cakey.pem
[ usr_cert ]の箇所で追記
keyUsage = critical,nonRepudiation, digitalSignature, keyEncipherment,dataEncipherment
[ usr_cert ]の箇所でコメントアウト（頭にシャープ追加）
 #nsComment = "OpenSSL Generated Certificate"
[ usr_cert ]の箇所で追記
extendedKeyUsage = clientAuth
保存する。（SHIFT押しながらZZ）

`mkdir -p /etc/pki/workspaces/newcerts
openssl ca -config openssl_client.cnf -out client.crt -in client.csr -days 7300`
Enter pass phrase for /etc/pki/workspaces/cakey.pem:
と聞かれたら設定したパスワードを入れます。この手順だと1111
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y


`openssl pkcs12 -export -in client.crt -inkey client.key -name yourname.com -certfile ../cacert.pem -out workspaces.p12`
**※yourname.comの箇所は変えてください**
Enter Export Password:
Verifying - Enter Export Password:
⇒クライアントにインストールする時に必要なパスワードを設定します（エンターで省略可能）

##うまく動かないとき
**途中で間違った場合は、/etc/pki/workspacesから削除して最初からやり直した方が早いと思います。**


##LINUXサーバからローカルにファイル転送
出来たファイルをWIN10に持ってくるのですが、パーミッションがどうたらと言われるので最初から圧縮しておきます。
`cd /etc/pki
tar cvf workspaces.tar workspaces`
このworkspaces.tarをFTPなりでローカルに持ってきて解凍します。

##WorkSpacesに登録する
必要なファイルは以下になります。
**cacert.pem**
⇒AWSのDirectoriesの[Actions]＞[Update Details]＞[Access Control Options]に登録するファイルです。中身はこんな感じです。
-----BEGIN CERTIFICATE-----
YASAIMASHI
NINNIKU
ABURA
KARAME
-----END CERTIFICATE-----

**workspaces.p12**
⇒ダブルクリックすると証明書の登録ウィザードが立ち上がるのでデフォルトでインストールします。
パスワードを入れる欄が出てきますが、設定していない場合はスルーでOKです。
確認は、ユーザー証明書の管理（certmgr.msc）＞個人＞証明書　の中を見ます。


**あとは冒頭のクライアントアプリで接続するだけです。**

##感想
証明書の作り方とかは結構ネットにあるのですが、
WorkSpacesと絡めたものがあまりなかったので投稿しました。
**ありがとうございました。**