経緯
素のWorkSpaceだとユーザーIDとパスワードが分かれば誰でも接続できてしまいます。
そこで、クライアント証明書を発行して、その証明書があるデバイスからしか接続できないようにして、セキュリティーを高めます。
ちなみにWorkSpacesでは、下記図のように簡単にPC以外のデバイスをアクセス制御する事ができます。
クライアント証明書の作成
認証局(CA)の作成
今回はAmazonLinuxを認証局とします。
AmazonLinuxにはOpenSSLは既にインストールされていたので、最新に更新しておきます。
$ sudo yum update -y
CAを構成していきます。
# 作業フォルダの作成
cd /etc/pki
sudo mkdir hogeCA
cd hogeCA
# 署名した証明書の保管フォルダを作成
sudo mkdir newcerts
# 証明書のラベル付けに使用するシリアルファイルを作成
echo "01" | sudo tee serial
sudo touch index.txt
# openSSL設定ファイルのコピー
sudo cp ../tls/openssl.cnf .
sudo vi openssl.cnf
openssl.cnfの下記項目を編集して保存します。
[ CA_default ]
dir = /etc/pki/hogeCA
[ v3_ca ]
# 鍵の用途
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
下記を実行してCAの
- CAの公開鍵:cacert.pem
- CAの秘密鍵:cakey.pem
を作成します。
sudo openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 3560 -config openssl.cnf
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Osaka
Locality Name (eg, city) [Default City]:Chuo-ku
Organization Name (eg, company) [Default Company Ltd]:HOGE Co.,Ltd.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:ca.hoge.jp
Email Address []:
クライアント証明書の作成
下記を実行してクライアントの公開鍵と秘密鍵を作成します。
sudo mkdir client
cd client
#秘密鍵の作成
sudo openssl genrsa -out client.key 2048
# 公開鍵の作成
sudo openssl req -new -key client.key -out client.csr -sha256
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Osaka
Locality Name (eg, city) [Default City]:Chuo-ku
Organization Name (eg, company) [Default Company Ltd]:HOGE Co.,Ltd.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:client.hoge.co.jp
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:xxxxx # 任意のパスワード入力
An optional company name []:
OpenSSLの設定ファイルをコピーします。
sudo cp ../../tls/openssl.cnf ./openssl.cnf
sudo vi openssl.cnf
openssl.cnfの下記項目を編集して保存します。
[ CA_default ]
dir = /etc/pki/hogeCA
private_key = $dir/cakey.pem
[ usr_cert ]
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment
#nsComment = "OpenSSL Generated Certificate"
extendedKeyUsage = clientAuth
作成したクライアント証明書をCAに署名してもらいます。
# 認証局に署名してもらう
sudo openssl ca -config openssl.cnf -out client.crt -in client.csr
(CAの秘密鍵のパスワードを入力)
クライアントにインストールするPKCS12のファイルを作成します。
# クライアントにインストールするPKCS12のファイルを作成
sudo openssl pkcs12 -export -in client.crt -inkey client.key -name hoge.com -certfile ../cacert.pem -out client.p12
(Enter Export PasswordでCSRのチャレンジパスワードを入力)
クライアントPCに証明書のインストール
今回はwindowsからWorkSpacesへアクセスします。
WorkSpacecサービスより”ディレクトリ”を選択して、”アクセス制御のオプション”より”信頼されたwindowsデバイスのみにWorkSpacesへのアクセスを許可”にチェックを入れ、CAの公開鍵(cacert.pem)をインポートして設定内容を更新します。
クライアントPCからWorkSpacesへアクセスしようとしたところ、エラーが出て接続できなくなりました。
クライアント証明書のインストール
クライアントPC上で、先ほど作成したclient.p12をダブルクリックします。
今回は保存場所は”現在のユーザー”としました。
何も変更せずに次へ
何も変更せずに次へ
インポートを完了します。
確認します。
WorkSpacesのアプリを起動します。
先ほどまではログイン画面になる前にエラーになっていたのですが、ログイン画面が表示されログインできるようになりました。